微博爬虫出错竟然还和网络运营商有关

    点击上方 月小水长 并 设为星标,第一时间接收干货推送

这是 月小水长 的第  52  篇原创干货

若是你们使用了微博评论超级爬虫 WeiboSuperCommentScrapy,可能会碰到下面的问题:
前端

ticket = ticket_js["ticket"]
KeyError: 'ticket'
web

在几个月之前,这个问题的解决办法是由于登陆的微博开启了双重登陆验证,只须要在微博 app 或者 web 的设置、帐号安全、关闭双重登陆验证便可,可是近期这个解决办法也失效了,我调试程序发现,com 微博登陆的充分必要条件是手机微博扫码登陆,能够直接扫码登录,输入帐号密码和验证码以后,跳转的仍是那个扫码登陆界面,能够说是很是智障的设计了,这不是强迫人下一个微博 app 吗。(此处有看不见的脏话)ajax

而后我在想有没有能够绕过这个登陆保护,强制扫码登陆的流程,巧的是在知乎上看到同一个问题,并且是 8月27日 开始提问的,目前无解,问题地址:https://www.zhihu.com/question/417862407chrome

改为扫码登录后,以前获取 cookie 的工做流程所有都变了,我研究了半个下午,完成了自动化获取实时二维码扫码登陆的工做,剩下的就是破解扫码以后前端经过 ajax 和后台进行加密解密的工做流程,而后获取 cookie,可是是明天又要上班了,都是后话了。浏览器

我常常在想一个问题,微博所作的愈来愈多的限制,就是为了保护本身的数据,事实上,微博想让咱们拿到的数据,就是没加限制的那部分数据,好比,每一个微博评论的前 100 页,而这,就是我以前的 WeiboCommentScrapy.py,也就是 cn 微博的评论爬虫。安全

因而我又运行起了 WeiboCommentScrapy,因为很久没有更换这里的 cookie,因此须要从新在浏览器登陆,复制 cookie 到代码中,可是当我在浏览器中输完帐号和密码并点击登陆时,意外出现了。服务器

在 chrome 中是这样:微信

在 FireFox 中又是这样:
cookie

能够肯定的是,不是没有连上 Internet 的问题,我开始只是觉得微博后台的 bug,而后隔了一天仍是这样,不对劲,若是真是 bug 一天了还不上热搜吗?我灵性地把电脑连的 wifi 改为我手机的移动热点,它竟然成功了。
网络

    

获取到电脑链接 wifi 和个人移动热点时的分别的 公网 ip 和运营商以下:

连着房间wifi时个人电脑公网ip


连着移动热点时个人电脑公网ip

cn 微博登陆时,登陆页面是 weibo.cn,点击登陆按钮后跳转到了 security.weibo.com,大几率不是微博登陆的服务器的分发策略拒绝了北京移动而接收了北京联通,毕竟用户量那么大,我怀疑是微博对某些 IP 频段的微博爬虫做了限制,具体哪些,我也不知道,因此遇到 cn 微博站没法登陆时,或者换个网络就行了。

还有一个问题是,我手机是移动的卡,为什么电脑连热点时公网 IP 成了联通的了,我又断开又重连,发现是联通电信随机切换,又陷入了思考,上网查阅资料得知:

一般出现这种状况的宽带是非电信、联通的(拐着弯说移动),分两种 case:

  1. IP 库没有及时更新,此时应该你电脑得到的 IP 地址和网站得到的 IP 老是一致的(最好不用带 CDN 的网站,那些通常 CDN 服务器和你同运营商就没法准确判断,好比 IP138 这类就不行)
  2. 小宽带运营商,移动(铁通)也在此列,因为众所周知的缘由目前不少国内资源都存放在电信\联通的网络中,小宽带运营商不可避免的须要和它们互联互通,同时由于处于弱势地位必定是小宽带运营商交钱给电信\联通。

第一种状况是说,IP 是移动的 IP,只不过 IP 查询网站没有及时更新 IP 的归属形成的混淆,第二种就是说是移动是小宽带运营商。(逃)

总而言之,com 站已经强制须要扫码登陆了,微博的策略应该是会对 com 站的爬虫做更多的限制;而 cn 微博站登不上,致使没法获取 cn 微博的 cookie,致使评论/用户/话题爬虫没法运行,换个网就行。

本文分享自微信公众号 - 月小水长(inspurer)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。