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实现zencart产品数据导入到magento(python导入数据)
Apr 03 Python
Python实现的几个常用排序算法实例
Jun 16 Python
详解Python中的多线程编程
Apr 09 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
Python实现二分查找与bisect模块详解
Jan 13 Python
python PyTorch预训练示例
Feb 11 Python
python实现动态创建类的方法分析
Jun 25 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
pycharm通过ssh连接远程服务器教程
Feb 12 Python
Python HTMLTestRunner可视化报告实现过程解析
Apr 10 Python
pandas按条件筛选数据的实现
Feb 20 Python
浅析python连接数据库的重要事项
Feb 22 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
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
帝国cms常用标签汇总
2015/07/06 PHP
jQuery实现长文字部分显示代码
2013/05/13 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
vue中的适配px2rem示例代码
2018/11/19 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
python检测IP地址变化并触发事件
2018/12/26 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
python3的print()函数的用法图文讲解
2019/07/16 Python
Python协程 yield与协程greenlet简单用法示例
2019/11/22 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
奥地利婴儿用品和玩具购物网站:baby-markt.at
2020/01/26 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
物理专业大学生职业生涯规划书
2014/02/07 职场文书
幼儿教师工作感言
2014/02/14 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
安全生产月标语
2014/10/07 职场文书
检察院起诉意见书
2015/05/20 职场文书
光荣之路观后感
2015/06/12 职场文书
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL