先对中国天气网的实时天气数据进行了研究,数据在http://www.weather.com.cn/weather1d/101010100.shtml中,可以通过城市代码进行爬取,但实况数据是用JS动态生成的,不能直接爬。

然后研究了浙江天气网http://zj.weather.com.cn/xztq/index.shtml,通过源代码发现数据都可以从另一个有规律的网址里得到,网址为http://www.zjmb.gov.cn/jxhyb/detailzjsk.jsp?sn={sn}&day=0&id={id}

sn个人认为是浙江省内部的编号,id是全国城市的编号,通过试验发现不需要day和id参数也可以获得目标网址,因此只需要知道城市对应sn值即可获得相应数据

所以第一步先要获得城市与对应sn,观察发现sn值都在58400至58800之间,因此对这个区间进行循环访问,记录有效数据就可以达到目标,对不存在的sn值进行访问,都会得到金华数据,所以剔除也较为方便

将对应关系保存至文件时一开始尝试使用字典保存,写入时用json转换,但是这样做会使字符前的反斜杠不存在转义作用,直接被视为一个反斜杠对待,因此最终还是选择了将数据写入csv文件中

第二步就是常规的爬取了,用requests访问网页,bs4解析网页提取数据,数据同样保存在csv中

第三步是对性能的优化,判断每次爬取的数据是否是正确的,是否与上次的更新时间相同等

第四步对代码进行了优化,一开始的代码是写在一坨的,不太美观,也不方便寻找错误,因此将代码改以函数形式来写,提升了美观度和容错性

后续:

代码等会搞GitHub了再上传。。。

等学会数据库了将数据存入数据库中

最新文章

  1. Oracle 查询出来的数据取第一条
  2. POJ 2503
  3. css3属性之 box-sizing
  4. apache本地网址配置
  5. PDO应用
  6. Android-根据ImageView的大小来压缩Bitmap,避免OOM
  7. 【BJG吐槽汇】第一期 - 警惕亚马逊莫名自动扣款!千万不要进了它的坑!
  8. openStack 性能开测
  9. Lifting the Stone(hdoj1115)
  10. python显示中文出错以及抛出UnicodeDecodeError的处理办法
  11. iOS 支付(含支付宝、银联、微信)
  12. java之JVM(二)
  13. 最小化webpack项目
  14. js屏蔽/过滤 特殊字符,输入就删除掉,实时删除,
  15. "她等待刀尖已经太久"--茨维塔耶娃诗抄
  16. delphi 通过事务插入数据
  17. Class DesiredCapabilities
  18. hive\hadoop 常用命令
  19. Oracle 存储过程procedure之数据更新-游标
  20. 【BZOJ】3732: Network【Kruskal重构树】

热门文章

  1. Vue计算属性的用法
  2. Mybatis之SessionFactory原理
  3. 【奇技淫巧】绕过waf写文件
  4. 2016计蒜之道复赛 百度地图的实时路况(Floyd 分治)
  5. 1.String、StringBuffer与StringBuilder之间区别
  6. 【代码笔记】iOS-NSFileManager
  7. 全局 DOM 变量
  8. 《图解HTTP》
  9. beego快速入门
  10. Oracle EBS INV 更新状态