python3爬天气后报历史数据
来源:互联网 发布:网络盗刷信用卡什么罪 编辑:程序博客网 时间:2024/05/17 01:55
查询国内各地市的天气数据,天气后报网http://www.tianqihoubao.com/lishi
是一个还凑合的选择,因为里面只有天气状况、气温、风力风向
这三方面的数据,是一个不能更基本的天气数据了。
可以注意到每个数据页的url构造很有规律,基本上就是www.tianqihoubao.com/lishi/
+地市拼音+/month/
+六位月份+.html
由于数据量不大,这里的策略就是:
- 在
www.tianqihoubao.com/lishi/
页获取所有地市的拼音全拼 - 根据规律构造url,获取网页文本
- 解析文本,获取所需数据并整理格式化,保存到文件中
# -*- coding: utf-8 -*-'''爬天气后报历史数据http://www.tianqihoubao.com/lishi'''from bs4 import BeautifulSoup as bspimport urllib,http.cookiejar,re,time# 做好cookie管理工作cookie=http.cookiejar.CookieJar() # 创建空CookieJarcj=urllib.request.HTTPCookieProcessor(cookie) # 构造cookieopener = urllib.request.build_opener(cj) # 根据cookie构造opener# 伪造headeropener.addheaders = [('User-agent', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0'), ('Connection',' keep-alive')]# 载入headerurllib.request.install_opener(opener)# 定义若干urlroot_url='http://www.tianqihoubao.com/lishi/'# 获取root_url网页内容req = urllib.request.Request(root_url)u=bsp(bytes.decode(urllib.request.urlopen(req).read(),'gbk'))# 找到表格u1=u.find(class_="citychk")# 找到表格里的每一个市u2=u1.find_all('dd')# 记录每一个市的url和对应的中文名称city_urls=[]city_names=[]for uu in u2: u3=uu.find_all('a') for u3u in u3: city_urls.append(re.split('\.|/',u3u.attrs['href'])[2]) city_names.append(u3u.text)months=['201201','201202','201203','201204','201205','201206','201207','201208','201209','201210','201211','201212','201301','201302','201303','201304','201305','201306','201307','201308','201309','201310','201311','201312','201401','201402','201403','201404','201405','201406','201407','201408','201409','201410','201411','201412','201501','201502','201503','201504','201505','201506','201507','201508','201509','201510','201511','201512','201601','201602','201603','201604','201605','201606','201607','201608','201609','201610','201611','201612']# 构造各市历史月份urlfor i,city_url in enumerate(city_urls): # 每爬一个市休息2秒钟 time.sleep(2) with open('d:/weather/'+city_names[i]+'.csv','w') as f: f.write('日期,天气状况,气温,风力风向\n') for month in months: url_month='http://www.tianqihoubao.com/lishi/'+city_url+'/month/'+month+'.html' req = urllib.request.Request(url_month) #如果连接不成功,休息5分钟 while True: try: u=bsp(bytes.decode(urllib.request.urlopen(req).read(),'gbk')) break except: time.sleep(300) # 删去不可见字符 u1=[re.sub('\s','',x.text) for x in u.table.find_all('td')] # 写入文件的时候跳过表头 for j,item in enumerate(u1[4:]): if j%4==3: f.write(item+'\n') else: f.write(item+',')
学习收获:
使用了urllib、http.cookiejar包管理连接
使用BeautifulSoup包解析网页文本
使用了enumerate、try/except函数控制循环等
阅读全文
0 0
- python3爬天气后报历史数据
- python爬天气网历史数据
- python爬取天气网历史数据
- python3获取天气信息
- Python3.x 爬虫 爬取中国天气网数据
- python3网络爬虫爬取天气网空气质量数据
- python3爬虫--抓取天气信息
- Python3爬虫小程序——爬取各类天气信息
- Python3爬虫小程序——爬取各类天气信息(2)
- Python3爬虫小程序——爬取各类天气信息(3)
- Python3爬虫小程序——爬取各类天气信息(4)
- 树莓派使用Python3获取天气信息
- python3获得本地位置和天气
- ElasticSearch新增IK扩展词后,让历史数据生效方法
- python3.6脚本import json模块后,报错:AttributeError: module 'json' has no attribute 'dumps'
- python3 报错
- 天气愚报之麦莎老狼来了
- Python3 Pickle报错 TypeError
- QQ登录
- LeetCode 483 Smallest Good Base 题解
- 三维计算几何模板--表面三角形个数 表面多边形个数 三维凸包 表面积 凸包重心 点到面的距离
- J
- J
- python3爬天气后报历史数据
- 7个处理javascript的`undefined`的tips
- Android6.x:权限列表
- 树链剖分
- Prime Path(广搜)
- React Native 实现注销登录功能
- STL空间配置器——第一级配置器__malloc_alloc_template剖析
- Eclipse ,ctrl+h,搜索,拼接正则表达式
- 财务类程序使用的表(我的第一篇)