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中django框架通过正则搜索页面上email地址的方法
Mar 21 Python
Python3遍历目录树实现方法
May 22 Python
python实现在windows服务中新建进程的方法
Jun 30 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
利用Python将时间或时间间隔转为ISO 8601格式方法示例
Sep 05 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
Aug 03 Python
pandas的qcut()方法详解
Jul 06 Python
在Django的View中使用asyncio的方法
Jul 12 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
python小白学习包管理器pip安装
Jun 09 Python
matplotlib阶梯图的实现(step())
Mar 02 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
PL-880隐藏功能
2021/03/01 无线电
php生成EXCEL的东东
2006/10/09 PHP
php将fileterms函数返回的结果变成可读的形式
2011/04/21 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
php文件管理基本功能简单操作
2017/01/16 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
prototype与jquery下Ajax实现的差别
2009/09/13 Javascript
jquery的冒泡事件的阻止与允许(三种实现方法)
2013/02/01 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)
2015/11/09 Javascript
JavaScript代码实现左右上下自动晃动自动移动
2016/04/08 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
Vue 中的受控与非受控组件的实现
2018/12/17 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
JS中比Switch...Case更优雅的多条件判断写法
2019/09/05 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
python语言使用技巧分享
2016/05/31 Python
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
Python Pandas找到缺失值的位置方法
2018/04/12 Python
python 美化输出信息的实例
2018/10/15 Python
python对html过滤处理的方法
2018/10/21 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
Django中多种重定向方法使用详解
2019/07/17 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
基于HTML5 audio元素播放声音jQuery小插件
2011/05/11 HTML / CSS
中学自我评价
2014/01/31 职场文书
小学数学国培感言
2014/03/10 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
MySQL中distinct和count(*)的使用方法比较
2021/05/26 MySQL
Java基础之详解HashSet的使用方法
2021/06/30 Java/Android
python图像处理 PIL Image操作实例
2022/04/09 Python