python 爬虫 实现给 learnku 好友发当天的天气预报

百度天气api

此文章的天气预报功能是基于百度天气api,百度api可以获取到当前的温度,天气,风度。还可以获取到未来三天的天气,温度。若要申请该api,请前往前往百度天气api申请

步骤

  1. 登录你的账号。
  2. 选择创建应用
  3. 设置好ip白名单,功能(必选国内天气查询),名字。
  4. 获取生成的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。

python 爬虫 实现每天给 learnku 好友发天气预报

代码

对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,就说明你成功了!
效果图:
python 爬虫 实现每天早上给 learnku 好友发当天的天气预报

完成了调用百度天气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
效果图:

python 爬虫 实现每天早上给 learnku 好友发当天的天气预报

本作品采用《CC 协议》,转载必须注明作者和本文链接
coder Derek
讨论数量: 2

你私信我的天气看到了,我回复不了信息。声望不到100,发送消息就会有限制。

另外,这个工具不错

4年前 评论
Coolest (楼主) 4年前

这个很强啊

4年前 评论
Coolest (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!