AZerork 发表于 2020-11-17 10:08

【python】一个简单的天气爬虫+QQ消息推送

事情起因是昨天上班摸鱼的时候逛论坛看到了一个QQ天气推送的帖子,觉得挺有意思的,于是趁着老板不在写了一个类似的爬虫。然后想到来52摸了不少时间,本着不当白嫖怪的心情来发个帖子,于是把爬虫简化注释了一下,方便想要学习爬虫的同学。
关于推送的,我上网找了下最后选择了使用某酱。
然后在云函数那里我被绕晕了,想在腾讯云函数上面搭然后搭了半天导不进库,最后才想起来我有vps,于是跑去linux上挂了个定时。
如果有想在云函数上搭或者挂Github的,自行查找解决方法。

Linux定时执行脚本:
定时文件在/etc/crotab,可用crotab -l (小写L)直接查看定时任务,使用crotab -e 进入文件添加修改定时任务。
这里使用的实例是: 0 7 * * * python3 /test/QQmsg.py   意思是每天早上7点执行文件   
注意Linux定时的五个字符分别代表:分 时 日 月 周 ,想详细了解可以自行搜索。

代码采用requests+BeautifulSoup ,可作为静态页面爬虫的入门学习。


代码:
import requests
from bs4 import BeautifulSoup as bs

headers = {# 请求头
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36',
}

new = {}# 天气字典
hostlist = {}# 热搜字典

url_getMsg = 'http://www.weather.com.cn/weather/101300101.shtml'# 获取天气网站,此处为南宁市,可根据个人所在城市更改链接
url_hostlist = 'http://top.baidu.com/'# 百度热搜榜

url_send_QQmsg = ''   # 个人QQ推送接口,自行添加
url_send_QQGroupmsg = ''# QQ群推送接口,自行添加

'''获取天气数据部分'''
html = requests.get(url=url_getMsg, headers=headers)# 获取天气网页
html = html.text.encode("raw_unicode_escape").decode("utf-8")
soup = bs(html, 'lxml')

tr_list = soup.find('ul', class_='t clearfix')
tr_list = tr_list.find_all('li')

# 使用find_all查找数据所得为列表,使用find查找数据所得为字符串
tr = tr_list# 清洗数据 可搭建for增加获取天数
tian = tr.find_all('h1').get_text()
wea = tr.find_all('p', class_='wea').get_text()
daymax = tr.find('span').get_text()
daymin = tr.find('i').get_text()
wind = tr.find_all('span')
speed = tr.find_all('i').get_text()

# 一种创建词典方式
new = {'日期': tian, '天气': wea, '最高温度': daymax, '最低温度': daymin, '风向': wind[-1]['title'], '风速': speed}

'''获取热搜数据部分'''
html_hot = requests.get(url=url_hostlist, headers=headers)# 获取百度排行榜热搜
html_hot = html_hot.text.encode("raw_unicode_escape").decode("gbk")
soup_hot = bs(html_hot, 'lxml')
tr_hot = soup_hot.find_all('ul', id='hot-list')

tr_hot = tr_hot
list_hot = tr_hot.find_all('li')
for i in range(0, 3):# 循环int类型字符需要使用range函数
    list_title = list_hot.find_all('a', class_='list-title')
    list_title = list_title['title']
    hostlist = list_title# 另一种创建词典方式

'''发送部分'''
page_QQmsg = {
    'msg': f'「今日份天气」\n城市:南宁\n{new["日期"]}\n{new["最低温度"]}—{new["最高温度"]}\n风向:{new["风向"]}风速:{new["风速"]}\n'
         f'-----------\n「今日份要闻」:\n1.{hostlist}\n2.{hostlist}\n3.{hostlist}',
}

re = requests.post(url_send_QQmsg, headers=headers, data=page_QQmsg)
group = requests.post(url_send_QQGroupmsg, headers=headers, data=page_QQmsg)


AZerork 发表于 2020-11-17 10:51

筱木头 发表于 2020-11-17 10:39
对于我这种刚学习的,表示羡慕并且看不懂,哎,什么时候我也可以爬虫啊。

其实很简单的,如果之前学过其他语言,学python一周再去看点爬虫视频(B站)就能写我这个爬虫了,就是第三方库的一些函数简单调用而已,你也可以把代码扒拉下来贴pycharm上一句一句分析,半天时间基本足够理解了。

AZerork 发表于 2020-11-17 11:21

Light紫星 发表于 2020-11-17 11:01
所以qq消息推送接口用的是什么?机器人+websocket框架吗

qq消息推送接口我用的是Qmsg酱,你可以上网找下,也是很简单的,链接一放QQ一加就行了。当然可以自己用图灵弄个机器人,但是我比较懒,也没有必要去折腾这些。

qihang5518 发表于 2020-11-17 10:38

感谢分享脚本

筱木头 发表于 2020-11-17 10:39

对于我这种刚学习的,表示羡慕并且看不懂,哎,什么时候我也可以爬虫啊。

筱木头 发表于 2020-11-17 10:55

AZerork 发表于 2020-11-17 10:51
其实很简单的,如果之前学过其他语言,学python一周再去看点爬虫视频(B站)就能写我这个爬虫了,就是第 ...

嗯嗯,主要我是小白入门,哈哈,刚学到模块部分。以后求多辅导我们,哈哈

Light紫星 发表于 2020-11-17 11:01

所以qq消息推送接口用的是什么?机器人+websocket框架吗

小向天天看 发表于 2020-11-17 11:15

感谢楼主分享,正在学习爬虫,但没有持续性,效果很差

hellowc 发表于 2020-11-17 11:15

除了qq回复不怎么会,其他都还好

wesley1224 发表于 2020-11-17 11:20

多谢分享,学习了
页: [1] 2
查看完整版本: 【python】一个简单的天气爬虫+QQ消息推送