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列表推导式的使用方法
Nov 21 Python
Python实现抓取网页并且解析的实例
Sep 20 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
Python基于Matplotlib库简单绘制折线图的方法示例
Aug 14 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
Python实现随机漫步功能
Jul 09 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
Django时区详解
Jul 24 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
python数据预处理方式 :数据降维
Feb 24 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
新手学python应该下哪个版本
Jun 11 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
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP实现上传图片到 zimg 服务器
2016/10/19 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
FileUpload上传图片(图片不变形)
2010/08/05 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
node.js操作mongodb简单示例分享
2017/05/25 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
前端防止用户重复提交js实现代码示例
2018/09/07 Javascript
详解vue更改头像功能实现
2019/04/28 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
python pycurl验证basic和digest认证的方法
2018/05/02 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
Python实现平行坐标图的两种方法小结
2019/07/04 Python
pytorch 在网络中添加可训练参数,修改预训练权重文件的方法
2019/08/17 Python
如何解决pycharm调试报错的问题
2020/08/06 Python
python获取linux系统信息的三种方法
2020/10/14 Python
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
开学第一周值周总结
2015/07/16 职场文书
开网店计划分析
2019/07/30 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python