教程引言:
系统地讲解计算机基础知识,Python的基础知识, 高级知识。关注微信公众号[薯条编程],免费领取Python电子书以及视频课程。
10.2.1 频繁访问的IP
编写爬虫程序是用来自动快速地抓取目标站点的数据,当抓取速度过于频繁时,很容易被目标站点识别为爬虫。目标站点通常采取这样的反爬策略:在后台分析每个ip的请求次数,如果请求次数超出了指定的阈值,则将其封禁一段时间或永久封禁。这里的封禁不是说禁止爬虫对站点发起请求,而是当爬虫再次发起请求时,直接响应无效的数据,或者干脆不作响应。
10.2.2 使用HTTP代理
为应对这样的反爬策略,爬虫程序可使用HTTP代理,关于HTTP代理的介绍,同学们可复习4.3节中的内容。以下为在requests中使用代理的例子:
import requests """ (1) 字典类型变量headers,用来定义HTTP请求头。我们可以在headers变量中定义User-Agent,cookie等字段 """ headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36', } """ (1) 字典类型变量proxies,用来配置HTTP代理。 (2) 键名表示代理所使用的协议,常用的有http与https。https协议是HTTP加上 TLS/SSL 协议所构建的加密传输协议。 (3) 键值表示http代理的地址。 """ proxies = { # 以下代理并不存在,为薯条老师虚构的代理地址 "http":"http://119.138.33.28:8080" } url = "http://www.chipscoco.com" # 通过关键字参数proxies来传递http代理的配置信息 response = requests.get(url, headers = headers, proxies = proxies)
10.2.3 使用IP代理池
上小节中的代码仅使用一个代理,虽然可以避免爬虫的本地IP 被封禁,但这样做亦有很大的问题,一是代理本身会出现问题,二是目标服务器也会将代理的IP封禁。
透明代理和普通匿名代理都有被封禁的风险,为保证爬虫的工作效率,通常使用高匿代理。
如果代理不可用,又该做如何处理?为解决这样的问题,我们可以在爬虫程序中使用IP代理池。IP代理池很好理解,即,使用多个IP来发起请求,一旦当前代理不可用,就动态切换到其它的IP。市面上有不少企业提供了IP代理服务,免费的或收费的,如果不考虑稳定性,那么可选择免费的IP代理。如果是开发商业性质的爬虫,最好是使用收费的代理,直接利用平台提供的api来自动切换可用的高匿IP,以保证数据抓取的稳定性。
读者在考察收费的IP 代理服务时,可从可用性,稳定性,并发性,易用性等几个维度来进行考量。
(1) Python后端工程师高薪就业班,月薪10K-15K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪10K-20K, 免费领取课程大纲
(4) Python大数据工程师就业班,月薪12K-25K,免费领取课程大纲
扫码免费领取学习资料: