python 爬虫 实现给 learnku 好友发当天的天气预报
百度天气api
此文章的天气预报功能是基于百度天气api,百度api可以获取到当前的温度,天气,风度。还可以获取到未来三天的天气,温度。若要申请该api,请前往前往百度天气api申请。
步骤
- 登录你的账号。
- 选择创建应用
- 设置好ip白名单,功能(必选国内天气查询),名字。
- 获取生成的ak(类似于api)
learnku发消息接口
接口:learnku.com/messages
请求方式:post
cookie所需性:yes
参数名 | 介绍 | 例子 |
---|---|---|
_token | 请求暗号 | 无 |
recipient_id | 好友id | 60808(一大加贝) |
message | 发送内容 | 你好 |
cookie和token
cookie
cookie是一个保存在本地的小文本文件,用于存储用户在各种网站上登录的数据(账号,密码)。这样,下次进入这个网站的时候,你就不用再次登录。
获取方式:F12打开开发者工具,选择到network,F5刷新网站。选择第一个网站文件。往下翻数据即可看到cookie,复制即可。(google chrome)
token
token类似于暗号,向一个请求数据的时候就需要用到。大多数网站都用token作为反爬机制。
获取方式:打开网络源代码,此位置的数据就是token。
代码
对api进行请求
首先,我们要请求对百度天气api进行请求。若需要查看请求接口,请求方式,请求参数,请前往百度天气api服务文档。
import requests
city_id = 440300#深圳的地区编码,查询地区编码请前往https://blog.csdn.net/Madman_long/article/details/83374400
ak = 'HELaVmuS91N8z1IjE9i3m2uAVFWGMVBU'#你的ak
url = 'http://api.map.baidu.com/weather/v1/?district_id=%d&data_type=all&ak=%s'%(city_id,ak)
result = requests.get(url).json()
print(result)
保存为weather.py,终端输入python weather.py
,返回结果:
{'status': 0, 'result': {'location': {'country': '中国', 'province': '广东省', 'city': '深圳市', 'name': '深圳', 'id': '440300'}, 'now': {'text': '阴', 'temp': 23, 'feels_like': 23, 'rh': 81, 'wind_class': '2级', 'wind_dir': '东风', 'uptime': '20200422110000'}, 'forecasts': [{'text_day': '阵雨', 'text_night': '阵雨', 'high': 23, 'low': 18, 'wc_day': '<3级', 'wd_day': '静风', 'wc_night': '<3级', 'wd_night': '静风', 'date': '2020-04-22', 'week': '星期三'}, {'text_day': '中雨', 'text_night': '中雨', 'high': 22, 'low': 18, 'wc_day': '3~4级', 'wd_day': '东风', 'wc_night': '3~4级', 'wd_night': '东风', 'date': '2020-04-23', 'week': '星期四'}, {'text_day': '中雨', 'text_night': '中雨', 'high': 19, 'low': 17, 'wc_day': '3~4级', 'wd_day': '北风', 'wc_night': '3~4级', 'wd_night': '北风', 'date': '2020-04-24', 'week': '星期五'}, {'text_day': '阵雨', 'text_night': '阵雨', 'high': 22, 'low': 18, 'wc_day': '<3级', 'wd_day': '静风', 'wc_night': '<3级', 'wd_night': '静风', 'date': '2020-04-25', 'week': '星期六'}, {'text_day': '阵雨', 'text_night': '多云', 'high': 22, 'low': 19, 'wc_day': '<3级', 'wd_day': '静风', 'wc_night': '<3级', 'wd_night': '静风', 'date': '2020-04-26', 'week': '星期日'}]}, 'message': 'success'}
我们要获取到当天的天气预报,位置就在于result[‘result’][‘forecasts’][0]的字典。在这个字典里面,有今天的是白天天气,晚上天气,最高温度和最低温度等数据。完整代码:
import requests
city_id = 440300 #深圳的地区编码,查询地区编码请前往https://blog.csdn.net/Madman_long/article/details/83374400
ak = 'HELaVmuS91N8z1IjE9i3m2uAVFWGMVBU' #你的ak
url = 'http://api.map.baidu.com/weather/v1/?district_id=%d&data_type=all&ak=%s'%(city_id,ak)
result = requests.get(url).json()['result']['forecasts'][0]
date = result['date'] #当天日期
text_day = result['text_day'] #白天天气
text_night = result['text_night'] #晚上天气
high_temp = result['high'] #当天最高温度℃
low_temp = result['low'] #当天最低温度℃
wc_day = result['wc_day'] #风力
wd_day = result['wd_day'] #风
weather = '''%s
-----深圳天气-----
白天天气:%s
晚上天气:%s
当天最高温度:%d
当天最低温度:%d
风力:%s
风:%s'''%(date,text_day,text_night,high_temp,low_temp,wc_day,wd_day)
调用learnku发消息接口
我们弄好了百度天气api这一块,接下来就要弄发消息。首先,我们创建一个新的python文件,叫send_message.py。首先,导入我们的requests库。
import requests
然后再设置好请求url,data,token以及我们的cookie
response = requests.get('https://learnku.com/').text
html = etree.HTML(response.text)
token = '你的token'
url = 'https://learnku.com/messages'
data = {'_token':token,
'recipient_id':'好友id',
'message':'你好!'}
headers = {'cookie':'你的cookie'}
最后,就可以进行一个请求了!
send = requests.post(url,data=data,headers=headers)
打印一下send,如果状态码是200,就说明你成功了!
效果图:
完成了调用百度天气api与发消息之后,我们就可以合并代码,进行一个小修改了。
import requests
city_id = 440300 #深圳的地区编码,查询地区编码请前往https://blog.csdn.net/Madman_long/article/details/83374400
ak = 'HELaVmuS91N8z1IjE9i3m2uAVFWGMVBU' #你的ak
weather_url = 'http://api.map.baidu.com/weather/v1/?district_id=%d&data_type=all&ak=%s'%(city_id,ak)
result = requests.get(weather_url).json()['result']['forecasts'][0]
date = result['date'] #当天日期
text_day = result['text_day'] #白天天气
text_night = result['text_night'] #晚上天气
high_temp = result['high'] #当天最高温度℃
low_temp = result['low'] #当天最低温度℃
wc_day = result['wc_day'] #风力
wd_day = result['wd_day'] #风
weather = '''%s
--------深圳天气--------
白天天气:%s
晚上天气:%s
当天最高温度:%d
当天最低温度:%d
风力:%s
风:%s'''%(date,text_day,text_night,high_temp,low_temp,wc_day,wd_day)
response = requests.get('https://learnku.com/').text
html = etree.HTML(response.text)
token = html.xpath('//meta[@name="csrf-token"]/@content')
send_url = 'https://learnku.com/messages'
data = {'_token':token,
'recipient_id':'好友id',
'message':weather + '\nTNT机器人报告完毕,祝您有一个美好的一天:kissing_heart:'}
headers = {'cookie':'你的cookie'}
send = requests.post(send_url,data=data,headers=headers)
保存为send_weather.py,终端运行python send_weather.py
。
效果图:
本作品采用《CC 协议》,转载必须注明作者和本文链接
你私信我的天气看到了,我回复不了信息。声望不到100,发送消息就会有限制。
另外,这个工具不错
这个很强啊