「原创声明:保留所有权利,禁止转载」
最近做了一个历史上今天的爬虫程序,跟历史天气数据源一致,数据量比较小,几十秒就爬完了。中间遇到一些问题,一起分享出来供大家参考。本项目源码和相关数据已经上传到了 github,有兴趣的朋友可以去看看,会不定期更新。
get 请求发送 sql 语句不能过长:我是做爬虫里面把 sql 拼好,发送到数据库存储服务上,之前一直用的 get 请求,由于这次内容较多,超过了最大长度限制,导致报错。故改为 post 请求,且兼容了 get 请求方式。
不明确的数据类型:某个年份的某一天事件不唯一的话,json 格式的 value 是 array,如果唯一则是一个 json。在处理这个数据的时候才去了正则匹配。总结起来,在提取相关接口数据的时候,正则最好用。
拼接月份的时候有点复杂,直接写了一个省事儿的方法,如果各位有简单好用的,望不吝赐教。
static void main(String[] args) {
DEFAULT_CHARSET = GBK;
for (int i in 1..12) {
for (int j in 1..31) {
if (i == 2 && (j == 30 || j == 31)) continue
if ((i in [4, 6, 9, 11]) && j == 31) continue
def month = i > 9 ? i + EMPTY : "0" + i;
def day = j > 9 ? j + EMPTY : "0" + j;
def date = month + "-" + day
getInfo(date)
}
}
testOver()
}
static getInfo(String date) {
def url = "http://tools.***.com/his/" + date.replace("-", EMPTY) + "_c.js"
def all = FanRequest.isGet()
.setUri(url)
.getResponse()
.getString("content")
.substring(8)
.replace(";", EMPTY)
.replaceAll("( )+", EMPTY)
.replaceAll("\\t", EMPTY)
.replace("##", EMPTY)
.replaceAll(SPACE_1, EMPTY)
def json = JSONObject.fromObject(all)
def keys = json.keySet()
keys.each { key ->
def s = json.get(key).toString()
def all1 = Regex.regexAll(s, "\\{\"title.+?\\}")
for (int i in 0..all1.size() - 1) {
def info = all1.get(i)
def inf = JSONObject.fromObject(info.toString())
def title = inf.getString("title")
def keyword = inf.getString("keyword")
def content = inf.getString("content")
def alt = inf.getString("alt")
String sql = "INSERT INTO today_histroy (date,title,keyword,content,alt) VALUES (\"%s\",\"%s\",\"%s\",\"%s\",\"%s\");"
sql = String.format(sql, key + "-" + date, title, keyword, content.replace(" ", EMPTY), alt)
MySqlTest.sendWork(sql)
}
}
}
技术类文章精选
- java 一行代码打印心形
- Linux 性能监控软件 netdata 中文汉化版
- 接口测试代码覆盖率(jacoco)方案分享
- 性能测试框架
- 如何在 Linux 命令行界面愉快进行性能测试
- 图解 HTTP 脑图
- 将 swagger 文档自动变成测试代码
- 五行代码构建静态博客
- 基于 java 的直线型接口测试框架初探
- 单点登录性能测试方案
非技术文章精选
- 为什么选择软件测试作为职业道路?
- 写给所有人的编程思维
- 自动化测试的障碍
- 自动化测试的问题所在
- 成为优秀自动化测试工程师的 7 个步骤
- 未来 10 年软件测试的新趋势 - 上
- 未来 10 年软件测试的新趋势 - 上
- 手动测试存在的重要原因
大咖风采
TesterHome 为用户提供「保留所有权利,禁止转载」的选项。
除非获得原作者的单独授权,任何第三方不得转载标注了「原创声明:保留所有权利,禁止转载」的内容,否则均视为侵权。
具体请参见TesterHome 知识产权保护协议。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。