使用动态ip防止被反爬

爬虫和反爬虫的对抗并不激烈。今天我们主要讨论一个非常重要的对付反爬虫的手段,那就是IP代理。
 
通常,我们会访问如下网址:
 
动态IP模拟器

当客户端向URL所在的服务器发起请求时,会携带自己的IP地址,这样服务器就可以获得我们的IP地址。当这个IP地址在某段时间内过于频繁地发起请求时,它可能会在某段时间内限制其访问。
 
在编写爬虫程序的过程中,为了防止这种情况发生,有必要使用IP代理。IP代理的原理如下:
 
 
第一步:我们将向代理服务器发送请求,并告诉代理服务器我们想要访问https://www.zhihu.com。
 
第二步:代理服务器将代替我们向https://www.zhihu.com发送请求。
 
第三步:服务器收到代理服务器的请求后,将数据返回给代理服务器。
 
第四步:代理服务器收到服务器返回的数据后,将数据发送给客户端。
 
这样,通过代理服务器向网址所在的服务器发送请求,我们就可以完美地隐藏自己的IP,这样我们的IP就不会被限制访问。
 
不过,肯定会有代价的。我们需要通过IP代理转发我们想要的数据,这自然会导致爬行速度变慢。只有使用原生IP发起请求是最快的。
 
接下来,像往常一样,我们使用代码来演示如何通过IP代理发起请求:
 
导入请求
 
#自由代理可以从https://www.xicidaili.com/,获得,但自由ip代理的存活率很低。
 
代理= { 0
 
http:“”183 . 148 . 158 . 64:9999
 
}
 
RES = requests . get(' https://www . Baidu . com ',proxies = proxy)
 
打印(参考文本)
 
#如果可以正确返回结果,那么当前的ip代理是活动的、可用的,否则当前的ip代理无效。
 
仅有一个代理ip是不够的。我们应该维护自己的ip代理池。当ip代理失败时,它将被消除。那么如何维护一个可用的ip代理池呢?
 
#第一步:通过https://www.xicidaili.com/wt/.获取ip_list
 
导入请求
 
来自bs4导入美丽组
 
随机导入
 
def get_ip_list(url):
 
标题= { 0
 
用户代理“:”Mozilla/5.0(Windows NT 10.0;WOW64)applebwebkit/537.36(KHTML,像Gecko)Chrome/66 . 0 . 3359 . 139 Safari/537.36’
 
}
 
res = requests.get(url,headers = headers)
 
res =美化组(res.text,' html.parser ')
 
结果= RES . select(# IP _ list tr)
 
对于结果[1:]中的结果:
 
ip = result.select('td')[1]。文本
 
port = result.select('td')[2]。文本
 
法官(ip,端口)
 
#获取ip后,无法直接保存。首先,你应该判断它是否可用。
 
#第二步:确定获取的ip是否有效。
 
ip_list = []
 
def判断(ip、端口):
 
代理= { ' http ':IP+':'+端口}
 
尝试:
 
RES = requests . get(' https://www . Baidu . com ',proxies = proxy)
 
例外:
 
打印(此IP:“+IP+”无效)
 
返回False
 
否则:
 
if 200