专注是一种工匠精神

Python爬虫批量访问突破访问限制封禁的方法

数据采集​​常用的方法是写一个爬虫程序向网络服务器请求数据(通常是用HTML表单或其他网页文件),然后对数据进行解析,提取需要的信息。

然而批量访问时会有访问限制,更会认为频繁访问是恶意攻击,对ip进行封禁导致我们的爬虫程序被终止,timeout httperror等等。

爬虫被封禁常见原因

  1. 从网络服务器收到的页面是空白的,缺少信息,或其遇到他不符合你预期的情况(或者不是你在浏览器上看到的内容),有可能是因为网站创建页面的JavaScript执行有问题。
  2. 检查正常浏览器提交的参数。如果你准备向网站提交表单或发出POST请求,记得检查一下页面的内容,看看你想提交的每个字段是不是都已经填好,而且格式也正确。用Chrome浏览器的网络面板(快捷键F12打开开发者控制台,然后点击“Network”即可看到)查看发送到网站的POST命令,确认你的每个参数都是正确的。
  3. 是否有合法的Cookie?如果你已经登录网站却不能保持登录状态,或者网站上出现了其他的“登录状态”异常,请检查你的cookie。确认在加载每个页面时cookie都被正确调用,而且你的cookie在每次发起请求时都发送到了网站上。
  4. 在客户端遇到了HTTP错误,尤其是403禁止访问错误,这可能说明网站已经把你的IP当作机器人了,不再接受你的任何请求。你要么等待你的IP地址从网站黑名单里移除,要么就换个IP地址(可以去星巴克上网)。如果你确定自己并没有被封杀,那么再检查下面的内容。
  5. 快速采集是一种恶习,会对网管的服务器造成沉重的负担,还会让你陷入违法境地,也是IP被网站列入黑名单的首要原因。给你的爬虫增加延迟,让它们在夜深人静的时候运行。切记:匆匆忙忙写程序或收集数据都是拙劣项目管理的表现;应该提前做好计划,避免临阵慌乱。
  6. 有些网站会封杀任何声称自己是爬虫的访问者。如果你不确定请求头的值怎样才算合适,就用你自己浏览器的请求头吧。

爬虫如何做到破防采集?

网站防采集的前提就是要正确地区分人类访问用户和网络机器人。虽然网站可以使用很多识别技术(比如验证码)来防止爬虫,但还是有一些十分简单的方法,可以让你的网络机器人看起来更像人类访问用户。

  1. 构造合理的HTTP请求头,设置agent
  2. 正常的时间访问间隔,不要在极短的短时间内访问
  3. 使用泛代理IP,让服务器认为是不同的用户在访问
  4. 申请多个key,各个key轮流使用,突破QPS限制和访问次数限额。

HTTP请求头

HTTP的请求头是在你每次向网络服务器发送请求时,传递的一组属性和配置信息。
requests模块是一个设置请求头的利器。

 

安装requests模块(pip install requests)

爬虫的正常时间访问路径

用一个比普通人快很多的速度从一个网站下载大量信息也可能让自己被网站封杀。
因此,虽然多线程程序可能是一个快速加载页面的好办法——在一个线程中处理数据,另一个线程中加载页面——但是这对编写好的爬虫来说是恐怖的策略。还是应该尽量保证一次加载页面加载且数据请求最小化。如果条件允许,尽量为每个页面访问增加一点儿时间间隔。

点击展开

伪装IP

建立网络爬虫的第一原则是:所有信息都可以伪造。你可以用非本人的邮箱发送邮件,通过命令行自动化鼠标的行为,或者通过IE 5.0浏览器耗费网站流量来吓唬网管。

但是有一件事情是不能作假的,那就是你的IP地址。任何人都可以用这个地址给你写信:“美国华盛顿特区宾夕法尼亚大道西北1600号,总统,邮编20500。”但是,如果这封信是从新墨西哥州的阿尔伯克基市发来的,那么你肯定可以确信给你写信的不是美国总统。

从技术上说,IP地址是可以通过发送数据包进行伪装的,就是分布式拒绝服务攻击技术(Distributed Denial of Service,DDoS),攻击者不需要关心接收的数据包(这样发送请求的时候就可以使用假IP地址)。

随便找一个代理IP商去购买,站长我这边推荐『芝麻代理』,它还有高匿名动态IP,效果还不错。

找好IP列表之后,上代码:

点击展开

结语

网络上的数据量越来越大,单靠浏览网页获取信息越来越困难,如何有效地提取并利用信息已成为一个巨大的挑战。 本书采用简洁强大的Python语言,介绍了网络数据采集,并为采集新式网络中的各种数据类型提供了全面的指导。第一部分重点介绍网络数据采集的基本原理:如何用Python从网络服务器请求信息,如何对服务器的响应进行基本处理,以及如何以自动化手段与网站进行交互。第二部分介绍如何用网络爬虫测试网站,自动化处理,以及如何通过更多的方式接入网络。

赞(0)
未经允许不得转载:伦客网 » Python爬虫批量访问突破访问限制封禁的方法

评论 抢沙发

7 + 6 =