dataabc / weibo-crawler

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

API 抓取失败,返回结构不符合预期(账号风控) #461

Closed FruityMaxine closed 1 week ago

FruityMaxine commented 3 weeks ago

在使用 weibo-crawler 进行微博数据抓取时,遇到如下错误,返回的 JSON 结构中缺少 data 键,导致程序抛出 KeyError:

> 'data'
> Traceback (most recent call last):
>   File "F:\bbb\weibo-crawler\weibo.py", line 1989, in get_pages
>     if self.get_user_info() != 0:
>        ^^^^^^^^^^^^^^^^^^^^
>   File "F:\bbb\weibo-crawler\weibo.py", line 391, in get_user_info
>     info = js["data"]["userInfo"]
>            ~~^^^^^^^^
> KeyError: 'data'
> 信息抓取完毕

调试细节 为了定位问题,我在 get_user_info 方法中直接发送了一个 GET 请求,观察到返回结果结构如下:

> {
>   "ok": -100,
>   "errno": "-100",
>   "msg": "",
>   "url": "https://m.weibo.cn/captcha?scene=limit&referer=/",
>   "extra": ""
> }

我已尝试以下方法,但问题依然存在:

更新 Cookie:使用最新登录的微博 Cookie。 切换 IP:通过代理更换不同地区的 IP 地址。 增加请求间隔:降低请求频率至 30 秒以上。

FruityMaxine commented 3 weeks ago

发现去除Cookie后可以正常爬取,怀疑账号被风控,这种情况怎么处理?

dataabc commented 3 weeks ago

这个账号过一段时间再使用吧,或者换个账号。

FruityMaxine commented 3 weeks ago

这个账号过一段时间再使用吧,或者换个账号。 谢谢

FruityMaxine commented 3 weeks ago

这个账号过一段时间再使用吧,或者换个账号。

发现一个解决方法,触发风控后,GET 请求返回的内容:

{ "ok": -100, "errno": "-100", "msg": "", "url": "https://m.weibo.cn/captcha?scene=limit&referer=/", "extra": "" }

内容中的url指向一个微博验证码,打开链接并完成验证码后,再次发送GET请求,此时返回值正常,此过程中不需要更新Cookie。 短时间内未再次触发验证。