m0_55469486 2021-02-25 16:37 采纳率: 0%
浏览 298

爬取微博评论时找不到https://m.weibo.cn/api/comments/show?id=

想爬取微博的评论,看了很多代码都是要用到这个链接,可是为什么找不到show?id这条,而是https://m.weibo.cn/comments/hotflow?id=这条呢,有没有大佬帮忙解疑一下

  • 写回答

1条回答 默认 最新

  • 多鱼的夏天 2021-02-26 10:42
    关注

    虽然数据不再是通过接口的方法返回的,但是老接口还能用https://m.weibo.cn/api/comments/show?id={id}&page={page} , 这里的id是某条微博的id, page 是分页参数。

    新接口,https://m.weibo.cn/comments/hotflow?mid=4477013081328252&max_id=330569188932643&max_id_type=0

    这个接口也能拿到评论,mid 是某条微博的参数, max_id 是分页参数,这个参数可以从一个请求返回的数据中拿到

     

    """ 
    爬取微博评论,保存到数据库 
     
    https://m.weibo.cn/api/comments/show?id=4477013081328252&page=50 
    该接口能获取微博的前50页数据,每页10条, id 是某条微博的id 
     
    https://m.weibo.cn/comments/hotflow?mid=4477013081328252&max_id=330569188932643&max_id_type=0 
    此接口能爬到所有评论信息, mid 是某条微博id, max_id 是上一个请求返回的分页参数, max_id_type 固定为0就好 
    """ 
     
    from pymongo import MongoClient 
    import requests 
    import time 
     
    __author__ = 'liuzhijun' 
     
    headers = { 
        "Host": "m.weibo.cn", 
        "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) " 
                      "Version/9.0 Mobile/13B143 Safari/601.1", 
        "Cookie": "xxxxx" # 这里将浏览器的cookie复制过来进行了。 
    } 
     
    client = MongoClient('mongodb://localhost:27017/') 
    db = client['weibo'] 
     
    def main(mid, max_id): 
        """ 
        :param mid: 某条微博id 
        :param max_id: 分页参数 
        :return: 
        """ 
        url = "https://m.weibo.cn/comments/hotflow?max_id_type=0" 
        params = {"mid": mid} 
        if max_id: 
            params['max_id'] = max_id 
     
        res = requests.get(url, params=params, headers=headers) 
        print(res.content) 
        result = res.json() 
        max_id = result.get("data").get("max_id") 
        data = result.get('data').get('data') 
        for item in data: 
            db['comment'].insert_one(item) 
     
        if max_id: 
            time.sleep(1) 
            main(mid, max_id) 
     
    if __name__ == '__main__': 
        main("4477013081328252", None) 
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog