有一个词叫“三月爬虫”,指的是一些即将毕业的同学,需要收集资料写毕业论文,于是在网上随便找了几个教程,学习了一些requests甚至urllib和正则表达式有了皮毛,我开始写爬虫疯狂的从网上爬取数据。这些爬行动物几乎不做任何事来隐藏自己。它们不会更改IP地址、设置标头或限制速度。它们很容易被有反爬的网站屏蔽,也很容易对没有反爬的小网站造成流量压力。后来不知道看了哪篇文章,才知道需要使用代理IP,修改UserAgent。所以,他们真的只是在headers中设置了UserAgent,其他的项目根本就没有设置。你给他指出来,他振振有词:你看,我这样爬到数据就可以了,headers里的其他item都没用。真的是这样吗?我们来做个实验,先用Chrome访问http://httpbin.org/headers这个网站可以显示你当前的headers。运行效果如下图:然后使用requests去请求这个URL,不设置headers,运行效果如下图:最后我们只设置一个UserAgent看看效果:可以看到只设置一个UserAgent和使用浏览器是一样的,访问的headers还是有很多区别的。许多物品丢失。网站只需要检测这些缺失项,就可以判断你是用程序还是浏览器发出请求。再来说说微信网页版。很多人使用wxpy或者itchat等第三方库,通过Python来控制自己的微信账号,实现很多自动化操作。但不久之后,我反映说我被限制登录网页版微信,认为我的行为被微信发现了,比如一秒发几十条消息,或者同时回复几个人的消息。但我想说的是,你们太高估自己了。微信要找你,就不用那么麻烦了。它只是直接检查标题。我们看一下wxpy的源码,这里涉及到网络请求:wxpy是基于itchat开发的,通过itchat实现登录功能。我们看一下itchat中发起网络请求的地方:self.core.s是requests的一个Session,如下图:看到了吗?这两个库只把UserAgent放在了headers中,其他字段都没有释放。所以在你登录的那一刻,微信就已经知道你的账号没有用浏览器登录过!所以,使用wxpy或者itchat后被限制登录网页版微信的小伙伴,不要怀疑你是这两个库给的。伤害了。这两个库里面的网络请求相关的代码都是学了两三天爬虫的人写的代码。你用这两个库让你的微信号死掉。不仅是这两个库,我们再来看看很多人用的Python弹幕包。更夸张的是。在获取斗鱼的直播信息时,直接使用requests请求url,连headers都没有设置,如下图:这纯粹是作死。现在大型网站的机器行为反制团队一般将爬虫检测和禁止爬虫分开。因为反爬虫策略比较多,难免会有误伤。为了尽可能降低误伤率,在检查爬虫时会对请求的可疑性进行打分。当您有怀疑爬虫行为时,请在您的请求中添加一些点,有些行为得分高,有些行为得分低。当您的总积分达到一定水平时,将调用禁止程序。由于HTTP是无状态的,如果你要爬的网站不需要登录,那么经常换IP可能对你有用(阿布云的代理池就是这样污染的)。但是对于需要登录的微信,你所有可疑行为的积分都会直接链接到你的账户。所以,一开始你用wxpy登录网页版微信可能没有问题。这时候你的怀疑度还不够高。也许确实有一些旧浏览器的Headers缺少很多项目?但是你已经在嫌疑人名单中了。一旦你有其他可疑行为,可疑点不断增加,那么当微信可以100%确定你使用的是自动化程序登录网页版微信时,自然而然会封禁你。