本站承诺永不接任何虚假欺骗、联盟广告、弹窗广告、病毒广告、诱导充值等影响用户体验的广告,广告屏蔽插件会影响本站部分功能,还请不要屏蔽本站广告,感谢支持!

当前位置:首页 / 正文

2022-03-21 | 编程技术 | 2529 次阅读 | 等你评论 | 0 次点赞 | 繁体

经常有朋友问:为什么自己的爬虫明明设置了代理,但一访问网站就能被发现。我总结了几种常见的情况。

图片alt

实际上,网站要识别你是否使用了代理,并不一定非要什么高深的反爬虫机制,也不需要使用 AI 识别用户行为。下面这几种情况,要识别代理简直是易如反掌。

你根本没有使用代理

有一些初学者在使用 Requests 请求网站的时候,是这样写的代码:

import requests

resp = requests.get('https://httpbin.org/ip').text

print('不使用代理:', resp)

resp = requests.get('https://httpbin.org/ip', proxies={'http': 'http://IP:port'}).text
print('使用代理:', resp)

运行效果如下图所示:

图片alt

为什么使用了代理以后,IP 没有变呢?这是很多刚刚使用 Requests 的同学常常犯的错误。因为你根本没有给 https 网站使用代理,你的代理只会对 http 网站生效。要对 https 网站生效,需要给它指定代理:

resp = requests.get('https://httpbin.org/ip', proxies={'http': 'http://IP:port', 'https': 'http://IP:port'}).text

PS: 注意看上面的代码,给 https 网址设置代理的时候,key 是 https,但值依然是 http:// 开头。对一些代理供应商来说,如果你把这里设置成了 https:// 开头,就会报错。不过这个原理跟本文无关,就暂时不讲了。

你的代理 IP 是服务器 IP

有很多代理供应商,他们批量采购云服务器来搭建代理服务。例如国内的供应商会采购阿里云、腾讯云、华为云的服务器来搭建代理。海外的供应商会采购 AWS 或者 Google 云服务器。

如果你在云服务器上跑过不加代理的爬虫,你会发现,有时候一个爬虫,不加代理,在自己电脑上跑一点问题都没有,但是在云服务器上一跑就会被识别。这是因为云服务器的 IP 地址范围跟家用宽带是不一样的。

像 AWS 和 Google 云,他们的云服务器 IP 范围是公开的,只要网站提前把来自这个范围的所有请求全部禁掉,那么从 AWS、Google 云服务器上面发起的请求直接就会被当做爬虫请求。因此搭建在上面的代理服务自然就不会生效了。

国内的云服务供应商的服务器 IP 地址是否公布过我不太清楚,但他们的 IP 范围肯定是跟家用 IP 不一样的。网址遇到来自这些可疑 IP 范围的请求时,虽然不一定完全封禁,但是弹一个验证码出来测一测,还是可以挡住很多爬虫。

遇到这种情况,爬虫只有设法采购一些使用家用宽带搭建代理服务的供应商,才能解决问题。但这种代理价格肯定会翻好几倍。

你的代理 IP 不是高匿代理

代理 IP 有三种常见的类型,透明代理,匿名代理和高匿代理。

使用透明代理的时候,网站可以同时看到代理 IP 和你的真实 IP。用了等于白用。

使用匿名代理的时候,网站看不到你的真实 IP,但是在请求里面有一个特征,可以告诉网站,你正在使用代理访问。

而只有真正的高匿代理,才能把你的爬虫请求隐藏起来。

有一些同学可能会从网上搜索免费的代理 IP 来使用。但这里面很多代理并不是高匿代理。肯定会被发现。

服务器供应商的 IP 池被污染

有些人的爬虫写得非常垃圾,自以为有代理就无所畏惧,爬虫请求漏掉百出,网站即使不检查 IP 频率,也可以从其它特征知道这是爬虫请求,于是网站就会连带着这个代理 IP 一起封掉。而偏偏这种垃圾爬虫的请求速度又极快。哪怕代理供应商的 IP 池中有几百万个 IP,也会很快被这些垃圾爬虫全部害死。

国内头部网站每天都会被数以千万计的爬虫请求访问,而主流的代理供应商就那么几家。如果很多垃圾爬虫都选中了同一家供应商,而他们的代理池更新又不及时。那么你使用了这家供应商的代理 IP,自然一来就会被发现。

代理不支持 HTTP/2

有一些网站需要使用 HTTP/2 请求。在 Python 里面,已经有不少 HTTP 客户端库支持发起 HTTP/2 的请求了,例如 httpx。但是,现在很少有代理供应商能提供支持 HTTP/2 的代理,因为它搭建起来比较麻烦。于是,当你使用了支持 HTTP/2 的客户端,通过一个 HTTP/1.1 的代理 IP 访问一个 HTTP/2 的网站的时候,网站并不能正常返回内容。

总结

网站要检测爬虫有非常多的方法,要检测一个请求是不是使用了代理来发起,也有很多种方法。而且这些方法并不需要什么高深的技术,一个初级工程师都能写出来。

那些自以为给爬虫加了代理就可随便爬网站的人,你们不仅害了自己,还害了别的爬虫。

via:
一日一技:为什么网站知道我的爬虫使用了代理?
https://mp.weixin.qq.com/s/8umBERSnaw0AdwodQkElUg

标签: python异常爬虫代理

猜你喜欢
局域内网的服务器利用个人电脑做跳板机访问互联网
公司内网的服务器均不连公网(互联网),问题来了:现在服务器上需要安装一些软件怎么办?目前一般都是编译安装!先将软件在外网机器上下载好,然后再复制到服务器内,编译安装!这种方式缺点就是比较麻烦,编...
Python小技巧之不用GUI,照样实现图形界面
小王平常的工作是做数据处理的,手中自然握有大量的数据,在日常工作中经常需要根据业务的需求提取相应的数据,有些需求是固定的,写好脚本之后只要定期提取数据就行了。但是,像我这么懒的人,这种工作怎么可...
如何定位Mysql中CPU占用高的查询语句
今天 mysql 服务器突然 CPU 告警,记录一下问题查找的过程第一步查看具体是哪个线程占用CPU最高1、在 Linux 中使用 top 命令找到 mysql 进程 PID2、指定进程 PID...
python | 协程与多进程的完美结合
我们知道,协程本质上是单线程单进程,通过充分利用 IO 等待时间来实现高并发。在 IO 等待时间之外的代码,还是串行运行的。因此,如果协程非常多,多少每个协程内部的串行代码运行时间超过了 IO ...
反爬虫的极致手段,几行代码直接炸了爬虫服务器
作为一个站长,你是不是对爬虫不胜其烦?爬虫天天来爬,速度又快,频率又高,服务器的大量资源被白白浪费。看这篇文章的你有福了,我们今天一起来报复一下爬虫,直接把爬虫的服务器给干死机。本文有一个前提:...
如何找回微信已过期文件教程
现在基本人人都会使用微信,微信里面保存着很多文件。但是过段时间去看,你可能由于当时没有保存或者根本就没有点开过,微信文件名称显示红色,这表示已经过期了。难道我们要再问别人重发一遍吗?这可能会有点尴尬。
漫威宇宙时间线观看顺序(持续更新)
漫威宇宙是一个相当庞大的系列。 **单就漫威电影来说,按系列分,可分为:** 《钢铁侠》《无敌浩克》《美国队长》《雷神》《银河护卫队》《黑豹》《蚁人》《奇异博士》《蜘蛛侠》《惊奇队长》《复
(首次提交评论需审核通过才会显示,请勿重复提交)