事情起因是昨天上班摸鱼的时候逛论坛看到了一个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)
|