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

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • hjue 多鱼的夏天 2月前

    虽然数据不再是通过接口的方法返回的,但是老接口还能用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) 
    点赞 1 评论 复制链接分享

为你推荐