surepj 发表于 2022-2-24 19:19

【Python】-[初学笔记]-用Pushover推送微博热搜到手机

用re找到微博热搜内容条目,
再转换成一个整体内容,
通过pushover提供的api接口发起推送,
当然手机上也要安装pushover。
就会收到消息推送了。

import time
import requests
import re

url = 'https://s.weibo.com/top/summary?cate=realtimehot'

headers = {
    'User-Agent': 'Chrome/96.0.4664.45 Safari/537.36','Cookie': 'SUB=_',
    'Referer': 'https://s.weibo.com/'}
resp = requests.get(url,headers=headers)
page_content = resp.text.encode('gbk','ignore').decode('gbk')# 解决某些网站好多编码不能解析的问题
resp.close()

obj = re.compile(r'<td class="td-01 ranktop">(?P<rank>.*?)</td>.*?'
               r'<a href="(?P<herf>.*?)" target="_blank">(?P<title>.*?)'
               r'</a>.*?<span>(?P<hotness>.*?)</span>',re.S)
result = obj.finditer(page_content)
count = 0
weibo_list = []
for it in result:
    if count < 20:# 控制推送条数
      weibo_list.append(f"{it.group('rank')}.{it.group('title')}")
      count += 1

push_url = 'https://api.pushover.net/1/messages.json'
# 在https://pushover.net 注册账户就会有user码,再创建个Application就有了token
# 手机也装个Pushover就能就收到消息了
message = str(weibo_list).replace('[','').replace(']','').replace("'",'').replace(',','\n')
data = {
    "token":"xxxx", # 用自己的token
    "user":"xxxx", # 用自己的user码
    "title":f"微博热搜-{time.localtime()}月{time.localtime()}日", # 推送的标题
    "message":message, # 推送的内容
    "sound":"tugboat" # 推送的提示音类型
}

resp = requests.post(push_url,data=data)
print('推送成功' if resp.json()['status']==1 else '推送失败')

http://inews.gtimg.com/newsapp_ls/0/14555584182/0

surepj 发表于 2022-5-15 09:24

poor567 发表于 2022-5-15 08:42
https://s.weibo.com/top/summary?cate=socialevent

我是这样想的,如果每一个网页的抓取方式不同,那 ...

pushover倒不用改什么,改一下提取要闻那个列表文字就可以。

代码这样:
import time
import requests
from lxml import etree

url = 'https://s.weibo.com/top/summary?cate=socialevent'

headers = {
    'User-Agent': 'Chrome/96.0.4664.45 Safari/537.36', 'Cookie': 'SUB=_',
    'Referer': 'https://s.weibo.com/'}
resp = requests.get(url, headers=headers)
page_content = resp.text.encode('gbk', 'ignore').decode('gbk')# 解决某些网站好多编码不能解析的问题

tree = etree.HTML(page_content)
title_list = tree.xpath('//*[@id="pl_top_realtimehot"]/table//tr/td/a/text()')
count = 0
weibo_list = []
for title in title_list:
    if count < 20:# 控制推送条数
      # print(title)
      weibo_list.append(title.strip('#'))
      count += 1

push_url = 'https://api.pushover.net/1/messages.json'
# # 在https://pushover.net 注册账户就会有user码,再创建个Application就有了token
# # 手机也装个Pushover就能就收到消息了
message = str(weibo_list).strip('[]').strip("'").replace("', '",'\n')
# print(message)
data = {
    "token": "xxxx",# 用自己的token
    "user": "xxxx",# 用自己的user码
    "title": f"微博要闻-{time.localtime()}月{time.localtime()}日",# 推送的标题
    "message": message,# 推送的内容
    "sound": "tugboat"# 推送的提示音类型
}

resp = requests.post(push_url, data=data)
print('推送成功' if resp.json()['status'] == 1 else '推送失败')

poor567 发表于 2022-5-15 08:42

本帖最后由 poor567 于 2022-5-15 08:46 编辑

surepj 发表于 2022-5-14 21:29
不同的网页的内容抓取方式不太一样,这个只作用于微博热搜,微博要闻是什么网址呢?
https://s.weibo.com/top/summary?cate=socialevent

我是这样想的,如果每一个网页的抓取方式不同,那么pushover的应用范围就要难上不少呀

elviss 发表于 2022-2-24 20:57

xpath更简单一些

surepj 发表于 2022-2-24 21:02

elviss 发表于 2022-2-24 20:57
xpath更简单一些

是的。但微博热搜里有个商业推广,和置顶的用xpath不好去掉。

师大帅哥 发表于 2022-2-24 22:32

Pushover只能试用30天,太拉了,有没有类似的推送服务,app端的

wuyouai 发表于 2022-2-24 23:03

我也打算学py了

Mrstick 发表于 2022-2-25 00:00

这就去414

亮少 发表于 2022-2-25 07:09

学到了,

dachairen 发表于 2022-2-25 08:11


准备学习py了,没有javascript基础可行{:1_918:}

surepj 发表于 2022-2-25 08:30

师大帅哥 发表于 2022-2-24 22:32
Pushover只能试用30天,太拉了,有没有类似的推送服务,app端的

是啊,付费的话30元。要么就只能重新用邮箱注册个账号

surepj 发表于 2022-2-25 08:32

dachairen 发表于 2022-2-25 08:11
准备学习py了,没有javascript基础可行

我也是学着玩的小白,没有任何编程基础
页: [1] 2
查看完整版本: 【Python】-[初学笔记]-用Pushover推送微博热搜到手机