2018-7-12python爬取历史天气数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了2018-7-12python爬取历史天气数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3445字,纯文字阅读大概需要5分钟。
内容图文
2018-7-12python爬取历史天气数据
需求
需要几个城市的历史天气数据,为了方便最后入库,需要的字段为 城市、温度、天气。最好能生成一个完整的csv导入数据。
from bs4 import BeautifulSoup as bsp
import urllib,http.cookiejar,re,time
#对excel的操作,可以添加sheetimport xlwt
#拼接两个csvimport glob
import time
# 做好cookie管理工作
cookie=http.cookiejar.CookieJar() # 创建空CookieJar
cj=urllib.request.HTTPCookieProcessor(cookie) # 构造cookie
opener = urllib.request.build_opener(cj) # 根据cookie构造opener# 伪造header
opener.addheaders = [(‘User-agent‘, ‘Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0‘),
(‘Connection‘,‘ keep-alive‘)]
# 载入header
urllib.request.install_opener(opener)
# 定义若干url
root_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)#### shg 2018/07/12 ################### 需要哪些城市将那些城市的拼音和汉字放到以下两个列表中,月份同理
city_urls=["nanjing","beijing"]
city_names=["南京","北京"]
months=[‘201712‘,‘201801‘,‘201802‘,‘201803‘,‘201804‘,‘201805‘,‘201806‘,‘201807‘]
#### shg 2018/07/12 ################ 构造各市历史月份urlfor i,city_url in enumerate(city_urls):
# 每爬一个市休息2秒钟
time.sleep(2)
with open(‘D:/天气数据/‘+str(i)+city_names[i]+‘.csv‘,‘w‘) as f:
##### 只给第一个csv建列名if i == 0 :
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分钟whileTrue:
try:
u=bsp(bytes.decode(urllib.request.urlopen(req).read(),‘gbk‘))
breakexcept:
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:
# 城市名称列#### shg 2018/07/12 #################
f.write(city_names[i]+",")
f.write(item+‘\n‘)
else:
f.write(item+‘,‘)
#### shg 2018/07/12 ##################import glob #import time##### 拼接多个城市的csv##### 注意修改路径
csvx_list = glob.glob(‘D:/天气数据/*.csv‘)
print(‘总共发现%s个CSV文件‘% len(csvx_list))
time.sleep(2)
for i in csvx_list:
fr = open(i,‘r‘).read()
with open(‘weather_history.csv‘,‘a‘) as f:
f.write(fr)
print(‘拼接完毕!‘)
#### shg 2018/07/12 #################
在做的过程中遇到了几个问题,记录如下:
1 写入excel中,分成多个sheet
导入xlwt包。
import xlwt
# 新建一个xls文件,注意编码
workbook = xlwt.Workbook(encoding=‘utf-8‘)
# 新建一个sheet,如果对一个单元格重复操作,添加cell_overwrite_ok=True
booksheet1 = workbook.add_sheet("beijing",cell_overwrite_ok=True)
# 写入
booksheet1.write(1,1,"beijing")
booksheet2 = workbook.add_sheet("jing",cell_overwrite_ok=True)
booksheet2.write(1,1,"jing")
# 保存文件
workbook.save(‘weather.xls‘)
2 拼接多个csv文件。
纵向的拼接,需要两个csv文件的列相同,注意两点:
- 如果是循环跑出来的表,每个表都有表头,拼接的时候不会去掉。
- 拼接的时候是按照文件名默认排序从上到下依次排列的。
import glob
import time
csvx_list = glob.glob(‘D:/天气数据/*.csv‘)
print(‘总共发现%s个CSV文件‘% len(csvx_list))
time.sleep(2)
print(‘正在处理............‘)
for i in csvx_list:
fr = open(i,‘r‘).read()
with open(‘csv_to_csv.csv‘,‘a‘) as f:
f.write(fr)
print(‘写入成功!‘)
print(‘写入完毕!‘)
print(‘10秒钟自动关闭程序!‘)
3 获取网页上表格的方法
[re.sub(‘\s‘,‘‘,x.text) for x in u.table.find_all(‘td‘)]
re.sub("替换的内容“,”替换成“,需替换的字符串)
- 替换的内容可以使用正则表达式,\ 为转义字符;| 为或,可以拼接多个条件;例如:
import re
re.sub(‘\[|\]|\"|\"‘,‘‘,‘["88585465","64325165","1685654"]‘)
>>> ‘88585465,64325165,1685654‘
原文:https://www.cnblogs.com/shgwater/p/9302222.html
内容总结
以上是互联网集市为您收集整理的2018-7-12python爬取历史天气数据全部内容,希望文章能够帮你解决2018-7-12python爬取历史天气数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。