import requests # 导入requests包
import json
import time
from bs4 import BeautifulSoup
# 知乎URL
url = 'https://www.zhihu.com/billboard'
headers = {"User-Agent": "", "Cookie": ""}
# 获取知乎热榜数据
def get_hot_zhihu():
res = requests.get(url, headers=headers)
content = BeautifulSoup(res.text, "html.parser")
hot_data = content.find('script', id='js-initialData').string
hot_json = json.loads(hot_data)
hot_list = hot_json['initialState']['topstory']['hotList']
return hot_list
# FeedCardMsg消息类型
class FeedCardMsg():
def __init__(self):
super(FeedCardMsg, self).__init__()
self.msg_type = "feedCard"
self.links = []
# 添加消息
def add_feed_link(self, title=None, message_url=None, pic_url=None):
self.links.append({
"title": title,
"messageURL": message_url,
"picURL": pic_url
})
# 返回json
def get_data(self):
return {
"msgtype": self.msg_type,
"feedCard": {
"links": self.links
}
}
#将热点 url image 添加到json
def hot_list_add_json(hot_list):
freFeedCardMsg = FeedCardMsg()
i = 0
for item in hot_list:
i = i+1
if (i < 10):
#添加信息
freFeedCardMsg.add_feed_link(title='知乎:'+item['target']['titleArea']['text'],
message_url=item['target']['link']['url'], pic_url=item['target']['imageArea']['url'])
pass
pass
#返回json
return freFeedCardMsg.get_data()
#钉钉发消息
class DingTalk_Base:
def __init__(self):
self.__headers = {'Content-Type': 'application/json;charset=utf-8'}
self.url = ''
def send_msg(self, json_text):
return requests.post(self.url, json.dumps(json_text), headers=self.__headers).content
class DingTalk_Disaster(DingTalk_Base):
def __init__(self):
super().__init__()
# 填写机器人的url
timestamp = str(round(time.time() * 1000))
# 加签密码
self.url = 'https://oapi.dingtalk.com/robot/send?access_token=#######×tamp='+timestamp
if __name__ == "__main__":
#获取热点信息
hot_list = get_hot_zhihu()
#解析热点信息变成json
freFeedCardMsg = hot_list_add_json(hot_list)
ding = DingTalk_Disaster()
#发送信息
ding.send_msg(freFeedCardMsg)
展示:
河北加油
其中感谢三个文章
1、爬取知乎热榜数据
2、封装钉钉发送各种消息
3、钉钉机器人开发官方