在 Python 爬虫时,在一段时间内请求数量过多,有时由于防爬机制,可能会出现不能继续爬取的问题。解决问题的方法可以是加长请求的间隔,或者从根本上使用动态 IP ,即将大量请求分散到大量的 IP 地址上来请求,从而使防爬机制不会注意。
一个比较好用的高匿名 IP 的网站:http://www.xicidaili.com/nn/
普遍的认识是这样的:
透明代理,即服务器知道请求方的代理 IP 和真实 IP
匿名代理,服务器知道使用了代理,但不知道真实的 IP
高匿代理,服务器不知道使用了代理,也就不会知道真实的 IP
其实使用高匿代理也只是增加了查询的难度,并不是查不到真实 IP 的。
对于爬虫的话,利用大量的高匿 IP ,并且加大请求间隔,是可以不被防爬机制注意的。
我们可以通过简单的代码来取到这个网站的所有 IP 地址来方便使用:
import requests
import random
import re
url = 'http://www.xicidaili.com/nn/'
html = requests.get(url=url, headers=headers).text
regip = r'<td>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</td>\s*?<td>(\d*)</td>'
matcher = re.compile(regip)
ipstr = re.findall(matcher, html)
ip_list = []
for ipport in ipstr:
ip_list.append(ipport[0<