吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3654|回复: 12
收起左侧

[Python 原创] 【python】一个简单的天气爬虫+QQ消息推送

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

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

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


代码:
[Python] 纯文本查看 复制代码
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[0]  # 清洗数据 可搭建for增加获取天数
tian = tr.find_all('h1')[0].get_text()
wea = tr.find_all('p', class_='wea')[0].get_text()
daymax = tr.find('span').get_text()
daymin = tr.find('i').get_text()
wind = tr.find_all('span')
speed = tr.find_all('i')[1].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[0]
list_hot = tr_hot.find_all('li')
for i in range(0, 3):  # 循环int类型字符需要使用range函数
    list_title = list_hot[i].find_all('a', class_='list-title')
    list_title = list_title[0]['title']
    hostlist[i] = list_title  # 另一种创建词典方式

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

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



免费评分

参与人数 3吾爱币 +3 热心值 +3 收起 理由
991375252 + 1 知道了Qmsg酱这个好东西 感谢
fuxiujun + 1 + 1 我很赞同!
loner. + 2 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 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
多谢分享,学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表