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修改Excel数据的实例代码
Nov 01 Python
解决Python requests库编码 socks5代理的问题
May 07 Python
Django使用HttpResponse返回图片并显示的方法
May 22 Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 Python
Python实现八皇后问题示例代码
Dec 09 Python
python 随机生成10位数密码的实现代码
Jun 27 Python
爬虫代理池Python3WebSpider源代码测试过程解析
Dec 20 Python
Python 文件数据读写的具体实现
Jan 24 Python
浅析python标准库中的glob
Mar 13 Python
Python如何根据时间序列数据作图
May 12 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
Python List remove()实例用法详解
Aug 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
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
ajax图片上传,图片异步上传,更新实例
2016/12/30 Javascript
详解Html a标签中href和onclick用法、区别、优先级别
2017/01/16 Javascript
基于JavaScript实现验证码功能
2017/04/01 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
Vue2 配置 Axios api 接口调用文件的方法
2017/11/13 Javascript
vue中路由验证和相应拦截的使用详解
2017/12/13 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
python为tornado添加recaptcha验证码功能
2014/02/26 Python
初步探究Python程序的执行原理
2015/04/11 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
Python之列表的插入&替换修改方法
2018/06/28 Python
python 输出所有大小写字母的方法
2019/01/02 Python
python远程连接MySQL数据库
2019/04/19 Python
python各类经纬度转换的实例代码
2019/08/08 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
如何用Python 加密文件
2020/09/10 Python
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
市场专员岗位职责
2014/02/14 职场文书
学生保证书格式
2015/02/27 职场文书
小学教师节活动总结
2015/03/20 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
浅析Python中的随机采样和概率分布
2021/12/06 Python
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL