爬虫进阶路程4——绕过ip反爬

概述

    如果走到了这里,算是到了爬虫的终极,因为这说明别人的服务器除了通过并发速度来识别出你是爬虫已经没有其他方式阻止你了,到了这里你也没有太多花里胡哨的招式,就一招:ip代理池。原理也很简单,既然别人通过识别你单台设备的频率来判断你是一个爬虫,那你就让你的爬虫脚本从许多个ip去爬取数据,从而降低单台服务器的频率。所谓ip代理池,理解起来其实就是类似一个正向代理池子,有很多个正向代理,然后你通过这些代理去请求目标url,就能拿到你要的数据了。
    我在开篇中讲到,自己通过阿里云去爬取数据,发现根本无法爬到,原因就是阿里云的网段都是相对固定的,别人直接将这个网段全部拦截了即可,所以虽然不是因为频率造成被拦截,但还是被禁止了访问,而不得不使用代理。但使用代理的时候,其实还是会遇到瓶颈,代理ip也被封了,或者用之前已经被封了,再或者因为代理ip属于某个特定网段无法使用,再或者因为代理ip不是高匿ip,而被目标服务器发现了你原始ip,总之一句话,就算使用代理ip也是不稳定的,充满着不确定性,所以这一切都要求你的ip池足够大,并且可以进行源源不断进行补充。
    这里会有一个问题,既然进行ip拦截效果如此好,为什么一开始不直接使用ip拦截,原因是,通过这个ip特征或者访问频率进行拦截是会有误杀的,不能保证准确拦截每一笔,因为公网ip是会不断动态分配的,而访问频率这件事,你也无法判断到底是你的爬虫,还是用户在无聊的狂点鼠标。而一旦误杀率高了,就会影响用户体验,所以一般这是反爬的最后一堵大门。当然我们从开篇到这一张,其实都一个前提,那就是我们需要爬取的内容是不需要登录验证这种操作的,如果我们爬取的数据需要登录,又会有一个新的征程,比如淘宝,知乎,甚至12306,为什么12306会有如此头疼的登录验证码机制,其实就是想拦截爬虫。

实现

    前面都是说的原理和概述,那承接前一章selenium如何实现代理池爬取呢,其实很简单,如果是按照我前一章的说法,通过启动一个现有的chrome浏览器,那就在启动浏览器的命令里加一个参数:–proxy-server=http://110.89.122.142:4216,其中http://110.89.122.142:4216就是代理地址,下面是我linux上一个完整的chrome启动脚本

echo "关闭老浏览器"
pid=$(ps -ef|grep /usr/bin/chrome |grep -v grep | awk '{print $2}')
echo pid=$pid
if [[ $pid != '' ]]
then
  kill -9 $pid
fi
echo "开启新服务"
/usr/bin/chrome --headless --proxy-server=http://110.89.122.142:4216  --disable-gpu --no-sandbox   --remote-debugging-port=9022 > chrome.log  2>&1  &

如果说你是通过selenium来启动一个浏览器,那就在selenium的webdriver中设置参数:–proxy-server=http://110.89.122.142:4216即可,两种方式其实很好理解,但是如果你是通过直接启动浏览器的,那你在启动webdriver时配置代理是无效的,必须通过在启动浏览器的脚本中去配置代理。也很好理解,代理是跟着浏览器走的,如果你手动启动了一个浏览器,再用selenium去控制,启动webdriver时的代理参数就没用作用了。

代理池来源

    既然知道如何配置代理了,那哪里有代理呢,淘宝肯定是一条出路,这里提供两个免费公开的代理源:

  1. 通过接口方式获取代理ip:https://github.com/jiangxianli/ProxyIpLib#%E5%85%8D%E8%B4%B9%E4%BB%A3%E7%90%86ip%E5%BA%93

  2. 通过网站手动获取代理ip:https://ip.jiangxianli.com/country/%E4%B8%AD%E5%9B%BD?country=%E4%B8%AD%E5%9B%BD

当然就像最上面说的,代理ip是具有不稳定性的,所以也不保证绝对可用。

注意点

  1. 选用代理的时候,尽可能使用高匿代理,因为高匿代理会隐藏请求的源ip,这样防止目标服务器通过获取你的原始ip来拦截你
  2. 尽可能选用常规的,看上去像人的ip,比如你使用国外的ip这种比较诡异的就容易被拦截,或者使用阿里云这种代理ip也容易别拦截,别人一眼就识别出你是个机器人了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值