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 FTP操作类代码分享
May 13 Python
python根据日期返回星期几的方法
Jul 06 Python
Python用threading实现多线程详解
Feb 03 Python
Python实现对字符串的加密解密方法示例
Apr 29 Python
Python网页正文转换语音文件的操作方法
Dec 09 Python
详解python之heapq模块及排序操作
Apr 04 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
解决pip安装的第三方包在PyCharm无法导入的问题
Oct 15 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
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目录操作函数之获取目录与文件的类型
2010/12/29 PHP
php 数组的一个悲剧?
2011/05/11 PHP
解析ajax事件的调用顺序
2013/06/17 PHP
PHP防范SQL注入的具体方法详解(测试通过)
2014/05/09 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
javascript 面向对象继承
2009/11/26 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
nodejs连接mongodb数据库实现增删改查
2016/12/01 NodeJs
JS如何生成一个不重复的ID的函数
2016/12/25 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
ES6的循环与可迭代对象示例详解
2021/01/31 Javascript
Python编程中的异常处理教程
2015/08/21 Python
python开发中range()函数用法实例分析
2015/11/12 Python
Python绘制KS曲线的实现方法
2018/08/13 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
意大利香水和彩妆护肤品购物网站:Ditano
2017/08/13 全球购物
2014元旦晚会策划方案
2014/02/19 职场文书
大学生自我鉴定书
2014/03/24 职场文书
优秀大学生自荐信
2014/06/09 职场文书
义和团口号
2014/06/17 职场文书
党员评议思想汇报
2014/10/08 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
追悼会家属答谢词
2015/09/29 职场文书
家访教师心得体会
2016/01/23 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
vite+vue3.0+ts+element-plus快速搭建项目的实现
2021/06/24 Vue.js