欢迎光临UUpython
最大、最新、最全的Python代码收集站

获取知乎热榜

这段代码定义了一个 Zhihu 类,用于获取知乎的热榜和推荐内容,并对数据进行清洗,以便于进一步处理和显示。

主要功能:

  • 使用 requests 库发送 HTTP 请求来获取知乎热榜和推荐数据。
  • 清洗获取的数据,提取标题和对应的链接。

具体步骤解释:

  1. 初始化方法 __init__
  • 设置热榜和推荐的 API 地址。
  • 设置请求头部信息,模拟浏览器请求。
  • 调用 get_hot_listsget_recommend_lists 方法获取未处理的热榜和推荐数据。
  • 调用 wash_hot_listswash_recommend_lists 方法对数据进行清洗,提取标题和链接。
  • 最终保存处理后的热榜和推荐数据。
  1. get_hot_lists 方法:
  • 构建请求参数,包括限制条目数量和不使用浏览器模式。
  • 使用 requests.get 发送 GET 请求,获取热榜数据的 JSON 响应。
  1. get_recommend_lists 方法:
  • 构建请求参数,包括推荐相关参数,如动作、广告间隔、后续 ID 和页码。
  • 使用 requests.get 发送 GET 请求,获取推荐数据的 JSON 响应。
  1. wash_hot_lists 方法:
  • 遍历热榜数据的每个条目,提取标题和链接。
  • 对链接进行处理,将 API 地址转换为浏览器中的地址。
  • 将处理后的标题和链接以 Markdown 格式保存。
  1. wash_recommend_lists 方法:
  • 遍历推荐数据的每个条目,尝试提取问题标题和链接。
  • 如果提取失败,则获取条目的标题和链接。
  • 对链接进行处理,将 API 地址转换为浏览器中的地址。
  • 将处理后的标题和链接以 Markdown 格式保存。

这段代码的目的是将获取的热榜和推荐数据清洗为 Markdown 格式的链接,方便在其他地方进行展示或者生成文本。你可以根据需要,进一步扩展和使用这个 Zhihu 类,例如将清洗后的数据展示在 GUI 界面中,或者生成 HTML 文件等。

import requests

class Zhihu:
    """
    知乎热榜
    """

    def __init__(self):
        self.hot_lists_api = 'https://api.zhihu.com/topstory/hot-lists/total'  # 热榜api
        self.recommend_lists_api = 'https://api.zhihu.com/topstory/recommend'  # 推荐api
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
        }
        self.hot = self.get_hot_lists()  # 热榜未处理数据
        self.recommend = self.get_recommend_lists()  # 推荐未处理数据
        self.hot_data = self.wash_hot_lists()  # 热榜处理后数据
        self.recommend_data = self.wash_recommend_lists()  # 推荐处理后数据

    def get_hot_lists(self):
        """
        获取知乎热榜
        :return: json
        """
        params = {'limit': '10',
                  'is_browser_model': '0'}
        response = requests.get(url=self.hot_lists_api, headers=self.headers, params=params)
        return response.json()

    def get_recommend_lists(self):
        """
        获取随机推荐
        :return:
        """
        params = {
            "action": "down",
            "ad_interval": "-10",
            "after_id": '1',  # TODO:
            "page_number": '1',  # TODO:
            "session_token": "99872c210b53364be1ede4bf459e8005", }
        response = requests.get(url=self.recommend_lists_api, headers=self.headers, params=params)
        return response.json()

    def wash_hot_lists(self):
        """
        清洗热榜数据
        :return:['[title](url)',....]
        """
        hot_lists = []
        for data in self.hot['data']:
            title = data['target']['title']
            url = data['target']['url'].replace('api.zhihu.com/questions', 'zhihu.com/question')
            hot_lists.append(f'[{title}]({url})')
        return hot_lists

    def wash_recommend_lists(self):
        """
        清洗推荐数据
        :return:
        """
        hot_lists = []
        for data in self.recommend['data']:
            try:
                title = data['target']['question']['title']
                url = data['target']['question']['url'].replace('api.zhihu.com/questions', 'zhihu.com/question')
            except KeyError:
                title = data['target']['title']
                url = data['target']['url'].replace('api.zhihu.com/questions', 'zhihu.com/question')
            hot_lists.append(f'[{title}]({url})')
        return hot_lists

zhihu = Zhihu()
赞(0) 打赏
未经允许不得转载:UUpython » 获取知乎热榜
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!