• 利用Python爬虫获取某乎热榜


    如今,某乎必须要登录才能查看相关话题内容,给我们的日常造成了极大的不便,今天我就教大家如何利用简单的代码,绕开登录限制。

    准备工作

    1. 配置好python运行环境,推荐 pycharm。
    2. 复制下面的源代码,运行,大功告成。

    源代码

    1. import requests
    2. class Zhihu:
    3. """
    4. 知乎热榜
    5. """
    6. def __init__(self):
    7. self.hot_lists_api = 'https://api.zhihu.com/topstory/hot-lists/total' # 热榜api
    8. self.recommend_lists_api = 'https://api.zhihu.com/topstory/recommend' # 推荐api
    9. self.headers = {
    10. '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'
    11. }
    12. self.hot = self.get_hot_lists() # 热榜未处理数据
    13. self.recommend = self.get_recommend_lists() # 推荐未处理数据
    14. self.hot_data = self.wash_hot_lists() # 热榜处理后数据
    15. self.recommend_data = self.wash_recommend_lists() # 推荐处理后数据
    16. def get_hot_lists(self):
    17. """
    18. 获取知乎热榜
    19. :return: json
    20. """
    21. params = {'limit': '10',
    22. 'is_browser_model': '0'}
    23. response = requests.get(url=self.hot_lists_api, headers=self.headers, params=params)
    24. return response.json()
    25. def get_recommend_lists(self):
    26. """
    27. 获取随机推荐
    28. :return:
    29. """
    30. params = {
    31. "action": "down",
    32. "ad_interval": "-10",
    33. "after_id": '1', # TODO:
    34. "page_number": '1', # TODO:
    35. "session_token": "99872c210b53364be1ede4bf459e8005", }
    36. response = requests.get(url=self.recommend_lists_api, headers=self.headers, params=params)
    37. return response.json()
    38. def wash_hot_lists(self):
    39. """
    40. 清洗热榜数据
    41. :return:['[title](url)',....]
    42. """
    43. hot_lists = []
    44. for data in self.hot['data']:
    45. title = data['target']['title']
    46. url = data['target']['url'].replace('api.zhihu.com/questions', 'zhihu.com/question')
    47. hot_lists.append(f'[{title}]({url})')
    48. return hot_lists
    49. def wash_recommend_lists(self):
    50. """
    51. 清洗推荐数据
    52. :return:
    53. """
    54. hot_lists = []
    55. for data in self.recommend['data']:
    56. try:
    57. title = data['target']['question']['title']
    58. url = data['target']['question']['url'].replace('api.zhihu.com/questions', 'zhihu.com/question')
    59. except KeyError:
    60. title = data['target']['title']
    61. url = data['target']['url'].replace('api.zhihu.com/questions', 'zhihu.com/question')
    62. hot_lists.append(f'[{title}]({url})')
    63. return hot_lists
    64. zhihu = Zhihu()

    使用教程

    • 要获取当前知乎热榜数据,在源代码末尾添加下面这行代码,然后运行程序即可。
      print(zhihu.hot_data)
    • 要想获取随机推荐话题,在源代码末尾添加下面这行代码,然后运行程序即可。
      print(zhihu.recommend_data)

    运行结果展示

  • 相关阅读:
    Nestjs模块机制的概念和实现原理
    抖音快速涨粉的方法,快速涨粉软件的实操分享与心得分享
    Vxlan协议原理及基本配置——网络测试仪实操手册
    快速批量导出excel超链接
    Vue项目初始化搭建JDK+Node.js+npm+vue-cli+创建Vue项目
    三个修饰符:abstract、static、final(JAVA基础五)
    【英语:基础进阶_原著扩展阅读】J5.阅读分析中的常用概念
    springSecurity简单直接说明
    vue ant 隐藏列
    远程电脑未连接显示器时分辨率太小的问题处理
  • 原文地址:https://blog.csdn.net/leavemyleave/article/details/133955865