Python爬虫实例扒取2345天气预报


Posted in Python onMarch 04, 2018

寒假里学习了一下Python爬虫,使用最简单的方法扒取需要的天气数据,对,没听错,最简单的方法。甚至没有一个函数封装。。

网址:http://tianqi.2345.com/wea_history/53892.htm

火狐中右键查看网页源代码,没有发现天气数据,因此推断网页采用的json格式数据。

右击->查看元素->网络->JS,找到了位置

Python爬虫实例扒取2345天气预报

用Python爬虫下载为json格式数据存储下来,代码如下:

#-*- coding:utf-8 -*- 
import urllib2 
import json 
 
months = [1,2,3,4,5,6,7,8,9,10,11,12] 
years = [2011,2012,2013,2014,2015,2016] 
city = [53892]  #邯郸代码53892 
 
for y in years: 
  for m in months: 
    for c in city: 
      url = "http://tianqi.2345.com/t/wea_history/js/"+str(c)+"_"+str(y)+str(m)+".js?qq-pf-to=pcqq.c2c" 
      print url 
      html = urllib2.urlopen(url) 
      srcData = html.read() 
      #JsonData = json.loads(srcData) 
      file = open("d:/json/"+str(c)+"handan/weather"+str(c)+"_"+str(y)+str(m)+".json","w") 
      file.write(srcData) 
      file.close()
扒取存到本地:

因为是刚学,学一点就动手实践了一下,还没有学到json的转换,直接使用的正则匹配,提取json中的数据,直接打印

提取转换json文件中的数据Python代码:

#-*- coding:utf-8 -*- 
import json 
import re 
import time 
 
Year = [2014] 
Month = [1] 
 
for y in Year: 
  for m in Month: 
     
    """ 
    2016年2月15日终于改成功。 
    是因为正则匹配后的编码问题,导致输出时无法显示。 
    在每个正则匹配的元组后添加 .decode('gbk').encode('utf-8'),成功输出 
    """ 
    content = fRead.read() 
    pattern = re.compile('{ymd:\'(.*?)\',bWendu:\'(.*?)\',yWendu:\'(.*?)\',tianqi:\'(.*?)\',fengxiang:\'(.*?)\',fengli:\'(.*?)\'},',re.S) 
    items = re.findall(pattern,content) 
    for item in items: 
      print item[0].decode('gbk').encode('utf-8'),","+item[1].decode('gbk').encode('utf-8'),","+item[2].decode('gbk').encode('utf-8'),","+item[3].decode('gbk').encode('utf-8'),","+item[4].decode('gbk').encode('utf-8'),","+item[5].decode('gbk').encode('utf-8') 
      time.sleep(0.1) 
 
    fRead.close()

使用Sublime Text 3运行

使用正则处理的一大问题就是,格式不整齐,总会漏掉一些数据。可能是由于匹配的速度过快导致部分数据缺失,但是通过time.sleep() 睡眠依旧不能解决问题。

由此可以看出正则匹配时的缺陷,待以后使用Python中专门用于处理json数据的包以后,再重新试一下

Python 相关文章推荐
python获取android设备的GPS信息脚本分享
Mar 06 Python
Python过滤列表用法实例分析
Apr 29 Python
详解python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
Jun 23 Python
Python中使用多进程来实现并行处理的方法小结
Aug 09 Python
Python实现获取照片拍摄日期并重命名的方法
Sep 30 Python
Python面向对象编程基础解析(二)
Oct 26 Python
Python实现多进程的四种方式
Feb 22 Python
python爬虫之爬取百度音乐的实现方法
Aug 24 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
520使用Python实现“我爱你”表白
May 20 Python
python os模块常用的29种方法使用详解
Jun 02 Python
pycharm2021激活码使用教程(永久激活亲测可用)
Mar 30 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 #Python
浅析python实现scrapy定时执行爬虫
Mar 04 #Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 #Python
Python爬虫框架Scrapy实例代码
Mar 04 #Python
详解python中asyncio模块
Mar 03 #Python
python3.6+django2.0开发一套学员管理系统
Mar 03 #Python
python爬虫面试宝典(常见问题)
Mar 02 #Python
You might like
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
php车辆违章查询数据示例
2016/10/14 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
多浏览器兼容的获取元素和鼠标的位置的js代码
2009/12/15 Javascript
jQuery实现可拖动的浮动层完整代码
2013/05/27 Javascript
angular.bind使用心得
2015/10/26 Javascript
分享js粘帖屏幕截图到web页面插件screenshot-paste
2020/08/21 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
微信小程序 特效菜单抽屉效果实例代码
2017/01/11 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
python的urllib模块显示下载进度示例
2014/01/17 Python
Python常用内置函数总结
2015/02/08 Python
python发送邮件实例分享
2017/07/28 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
CSS3中的5个有趣的新技术
2009/04/02 HTML / CSS
波兰运动鞋网上商店:e-Sporting
2018/02/16 全球购物
《蝙蝠和雷达》教学反思
2014/04/23 职场文书
个人查摆问题自查报告
2014/10/16 职场文书
感动中国何玥观后感
2015/06/02 职场文书
安全教育培训制度
2015/08/06 职场文书
golang正则之命名分组方式
2021/04/25 Golang
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
CSS实现渐变色边框(Gradient borders)的5种方法
2022/03/25 HTML / CSS