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中管道用法入门实例
Jun 04 Python
Python进阶篇之字典操作总结
Nov 16 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
Python发送邮件功能示例【使用QQ邮箱】
Dec 04 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
python getpass实现密文实例详解
Sep 24 Python
使用python+poco+夜神模拟器进行自动化测试实例
Apr 23 Python
查看keras的默认backend实现方式
Jun 19 Python
python各种excel写入方式的速度对比
Nov 10 Python
C++和python实现阿姆斯特朗数字查找实例代码
Dec 07 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 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中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
基于php下载文件的详解
2013/06/02 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
2014/10/27 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
10分钟学会写Jquery插件实例教程
2014/09/06 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
Angular.js中用ng-repeat-start实现自定义显示
2016/10/18 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
基于BootStrap的前端分页带省略号和上下页效果
2017/05/18 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
python使用json序列化datetime类型实例解析
2018/02/11 Python
python人民币小写转大写辅助工具
2018/06/20 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
python实现桌面托盘气泡提示
2019/07/29 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
python动态文本进度条的实例代码
2020/01/22 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
基于python实现模拟数据结构模型
2020/06/12 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
PHP面试题大全
2015/10/16 面试题
CAD制图人员的自荐信
2014/02/07 职场文书
现金出纳岗位职责
2014/03/15 职场文书
群众路线教育实践活动民主生活会个人检查对照思想汇报
2014/10/04 职场文书
机关作风建设工作总结
2014/10/23 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
毕业生入职感言
2015/07/31 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
调解协议书范本
2016/03/21 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers