python天气爬取 | Hlwdy's blog
python天气爬取
发表于 2020-04-08 共 613 字
分类于 python

python天气爬取 [原创]

获取天气信息

首先,我们需要寻找一个爬取目标,这里选用的是中国天气网

进入网站任意地区页面,就能查看这个地区天气信息 利用浏览器的开发者工具,我们可以抓取到一个Get请求,如下图: 通过分析我们可以很容易看出来,这个请求就是获取天气信息的请求

我们只需要分析这个101280801就行了,我们暂且把这个叫做城市id编号

获取城市id

那么如何根据城市名获取这个城市的id呢?

我们发现,上方有城市搜索框 随便输入一些文本,就可以抓取到另一个get请求,比如说这里搜索1,得到请求如下: 第一个搜索结果一定是最准确的一个,那么我们就可以根据这个来获取id了

最终代码

根据以上分析,我们就可以开始写代码了,这里我写了一个示例,完整代码如下:

import requests,re,json

def getCityId(cname):
    c_url='http://toy1.weather.com.cn/search?cityname='+cname+'&callback=success_jsonpCallback'
    req=requests.get(c_url)
    req.encoding='utf-8'
    html=req.text.replace('success_jsonpCallback(','')
    html=html[:-1]
    jsonw=json.loads(html)
    return jsonw[0]['ref'][:9]

try:
    city=getCityId(input('输入一个城市:'))
    url='http://d1.weather.com.cn/weather_index/'+city+'.html'
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4096.0 Safari/537.36',
        'Referer':'http://www.weather.com.cn/weather/101280801.shtml',
    }
    req=requests.get(url,headers=headers)
    req.encoding='utf-8'
    html=req.text
    rule = r'var cityDZ =(.*?);var alarmDZ ='
    html = re.findall(rule, html)[0]
    jsonw=json.loads(html)['weatherinfo']
    res=jsonw['cityname']+jsonw['temp']+' - '+jsonw['tempn']+jsonw['weather']+jsonw['wd']+jsonw['ws']
    print(res)
    #上面获取城市天气状况
    rule = r'var dataZS=(.*?);var fc='
    html = re.findall(rule, req.text)[0]
    jsonw=json.loads(html)['zs']
    #下面获取天气各方面一些建议
    print(jsonw['ac_des_s']+jsonw['cl_des_s']+jsonw['ct_des_s']+jsonw['gj_des_s']+jsonw['pl_des_s']+jsonw['ys_des_s']+jsonw['lk_des_s'])
except:
    print('找不到这个城市')

这样,我们就可以获取到完整的天气信息了,当然这些并不是完整的信息,还有其他的Get请求,

比如说:根据ip获取城市,多日天气等等,这些可以自行进行扩展

筛选文章
类别选择 (分类/标签)
全屏 关闭