dataabc / weibo-crawler

新浪微博爬虫,用python爬取新浪微博数据,并下载微博图片和微博视频
3.33k stars 744 forks source link

关于获取长微博时截取json字符串部分内容 #305

Closed a1bum closed 2 years ago

a1bum commented 2 years ago

目前看了最新版本代码如下:

def get_long_weibo(self, id):
        """获取长微博"""
        for i in range(5):
            url = 'https://m.weibo.cn/detail/%s' % id
            html = requests.get(url, headers=self.headers, verify=False).text
            html = html[html.find('"status":'):]
            html = html[:html.rfind('"hotScheme"')]
            html = html[:html.rfind(',')]
            html = '{' + html + '}'
            print(html)
            js = json.loads(html, strict=False)
            weibo_info = js.get('status')
            if weibo_info:
                weibo = self.parse_weibo(weibo_info)
                return weibo
            sleep(random.randint(6, 10))

今日获取时,发现异常报错 json.decoder.JSONDecodeError: Extra data: line 107 column 2 (char 4002),print最新的html变量,发现截取html网页后并未形成json字符串导致,大致内容如下:

{"status":{
    .....
    "call": 1
}][0] || {};
  var __wb_performance_data={v:"v8",m:"mainsite",pwa:1}

添加了两行去除了下面的js部分代码,暂时不清楚是否所有长微博都有这样的问题:

html = html[:html.rfind('"call": 1')]
html = html[:html.rfind(',')]

最后是调整之后的完整代码:

def get_long_weibo(self, id):
        """获取长微博"""
        for i in range(5):
            url = 'https://m.weibo.cn/detail/%s' % id
            html = requests.get(url, headers=self.headers, verify=False).text
            html = html[html.find('"status":'):]
            html = html[:html.rfind('"hotScheme"')]
            html = html[:html.rfind(',')]
            html = html[:html.rfind('"call":')]
            html = html[:html.rfind(',')]
            html = '{' + html + '}'
            print(html)
            js = json.loads(html, strict=False)
            weibo_info = js.get('status')
            if weibo_info:
                weibo = self.parse_weibo(weibo_info)
                return weibo
            sleep(random.randint(6, 10))
dataabc commented 2 years ago

感谢反馈,并给出修复方法。我最近不方便调试代码,能否请您已pull request的方式提交修改,这样您还可以成为本项目的contributor,这不是强制的,如果您不方便,我会在合适的时候修复它。再次感谢。

a1bum commented 2 years ago

感谢反馈,并给出修复方法。我最近不方便调试代码,能否请您已pull request的方式提交修改,这样您还可以成为本项目的contributor,这不是强制的,如果您不方便,我会在合适的时候修复它。再次感谢。

感谢,可能昨天没有仔细看,再次翻了下issue,发现#297 已经提到,且最新代码已经修复,感谢您的回复,您可合并该2个issue,并close。