2020中国高校计算机大赛 华为云大数据挑战赛--热身赛--爬取天气数据
热身赛中有这样的提示:
小提示:如果不考虑天气、周边活动、节假日等因素,预测结果可能不准确哦。
于是就查了查怎么爬取比赛中所需的天气信息。其实针对数据量不大的数据,可以尝试手动填写特征,由于热身赛给出的数据只有28天的数据,其实是可以手动添加的
但是数据量一多,如果是给一年的数据,手动添加是不太可能的。
下面变记录一下爬虫的过程。
一、 安装库
python 中先安装 request 和 bs4
二、需要爬取网页
热身赛需要爬去的是深圳1、2月信息
这两个网址分别记录了深圳1、2月的天气信息
http://lishi.tianqi.com/shenzhen/201901.html
http://lishi.tianqi.com/shenzhen/201902.html
urls = [ "http://lishi.tianqi.com/shenzhen/201901.html", "http://lishi.tianqi.com/shenzhen/201902.html"]
三、创建文件存储信息
files = open('shenzhen_weathe.csv','w')
四、建立连接
连接之前需要修改request中的用户名。原始用户名会直接告诉web服务器访问的是python,于是会被拒绝访问
kv = {'user-agent':'Mozilla/5.0'}
建立连接
response = requests.get(url,headers=kv) soup = BeautifulSoup(response.text,'html.parser')
此时soup中就是爬去的网站信息了。实际上soup就是获取了这个网站的html,像这个网站把数据都写在了html文件里,所以就可以直接分析了。
可以看到,所有天气信息都是在<ul class="thrui">中,而每一天的天气信息都在 li 标签中的div中
所以通过循环处理就可以获得信息
weather_list = soup.select('ul[class="thrui"]') for weather in weather_list: li_list = weather.select('li') for li in li_list: div_items = li.select('div') str = "" for div in div_items: str += div.string+',' files.write(str+'\n')
五、整体代码+效果
import requests from bs4 import BeautifulSoup urls = [ "http://lishi.tianqi.com/shenzhen/201901.html", "http://lishi.tianqi.com/shenzhen/201902.html"] files = open('shenzhen_weathe.csv','w') kv = {'user-agent':'Mozilla/5.0'} #更换用户信息,变成浏览器模式 for url in urls: response = requests.get(url,headers=kv) soup = BeautifulSoup(response.text,'html.parser') weather_list = soup.select('ul[class="thrui"]') for weather in weather_list: li_list = weather.select('li') for li in li_list: div_items = li.select('div') str = "" for div in div_items: str += div.string+',' files.write(str+'\n') files.close()
效果如下: