python爬虫如何获取ip代理池?

最新资讯发布日期:2021-03-09

image.png

因为以前一直在开发爬虫类,所以这个过程和代理IP交往是必不可少的。记录这篇文章,如何实现爬虫类代理服务,本文主要以说明构想为中心。

起源:

做爬虫类的人应该知道,抓住的网站和数据变多了,爬虫类抓住速度过快的话,不可避免地会触发网站的防爬机制。这些网站应对爬虫类的方法,几乎使用同样的手段封印IP。那么,我们想稳定、持续地抓住这些网站的数据,怎么解决呢?一般的解决办法有两个

1、使用相同的服务器IP捕获网站数据,但速度很慢。

2、使用多个代理IP抓取数据。

第一个方案牺牲的是时间和速度,但一般来说我们的时间是宝贵的,理想的是在最短的时间内获得最多的数据。所以,第二个方案是推荐的,从哪里可以找到这么多代理IP呢?

第一种、找代理商。

最直接,使用搜索引擎索。

第二种、测试代理。

很简单,写HTTP程序,挂上这些代理,访问某个稳定的网站,看是否能正常访问,如果能正常访问,代理IP就可以使用,如果访问失败,代理IP就会失效。

最简单的是,可以使用curl命令来测试代理是否真的可用

#使用代理48.139.133.93:3128访问网易主页。
curl-x"48.139.133.93:3128"http://www.163.com"

当然,这种方式只是为了方便演示,实际上最好的方法是制作多线程的代理测试程序,分别使用这些代理访问某个网站,根据访问的结果,最终可以输出可用的代理IP。

第三种、使用代理商。

通过编写测试代理IP的程序,可以找到可用的代理。其次,如何使用变得简单了。

例如,我们将刚才得到的可用代理IP输出到文件中,每行都是IP,所以我们的程序可以这样使用,程序读取代理文件,并将代理列表载入数组。从数组中随机选择代理IP,开始HTTP请求。

这样,如果可用的代理知识产权稳定在数百或数千个,它基本上可以保持一段时间来捕捉网站的数据。一般来说,捕捉数千万个数据不是问题。

然而,如果我想继续从一个网站上收集数据,或者抓住数百万甚至数亿的网页数据,这些代理知识产权可能会逐渐失效。这种情况怎么办?

第四种、持续供应代理商。

使用刚才的方式,抓住代理网站,通过测试程序输出可用的代理IP列表,这只是一次性的,代理IP的数量很少,在我们的持续收集需求中,一定不能满足需求。那么,如何继续找到可用的代理IP呢?

根据上述方法,我们可以这样优化,收集更多代理IP网站(数据基础),定时监控这些网站,收集代理IP列表。程序自动检测代理IP的可用性,输出代理IP(文件或数据库),程序加载文件和数据库,随机选择代理IP开始HTTP请求。

我们继续优化,在使用代理IP的时候,可以限制某个短时间内同一个IP的使用次数。例如,5分钟内同一个代理IP只允许使用10次,超过使用次数后,可以随机选择其他代理IP。

这样既能保证我们的抓取质量,又能保证代理IP在短时间内不会因大量使用而被封禁。

服务化。

通常使用代理时:爬虫类服务器a,通过设置代理IPD/E/F,请求站点服务器c。

使用squid时:爬虫类服务器a,通过配置在服务器b中的squidcache_peer机制,自动调度代理IPD/E/F,最终访问站点服务器c。

可以看出,使用squid的优点是爬虫端不需要考虑如何加载和选择代理商。只要将代理知识产权列表按照配置文件的规则配置在squid中,squid就可以帮助我们管理和选择代理商。最重要的是,爬虫使用代理只需配置squid这个端口即可!

整合

1、尽可能多地收集代理站点,使用收集代理IP程序定期收集代理站点(30分/1小时),分析所有代理IP,并填写数据库。

2、代运营测试程序从数据库中取出所有代运营IP,然后挂机代运营,访问一个稳定的网站,根据访问结果,在数据库中标记代运营是否可用,同时也在数据库中记录访问网站的响应时间。

3、写程序,从数据库中加载所有可用代理,根据代理响应时间,计算使用权重和设定最大使用次数,以cache_peer格式写入squid的配置文件。

4、编写程序或脚本,触发自动重载squid配置文件,让squid加载最新的代理IP列表5、定时重复1-4,不断输出可用的代理。

6、爬虫指定squid服务IP和端口,进行纯网站采集操作。

通过以上方式,完整的代理服务可以完成,该代理服务可以定期输出保证质量的代理IP。爬虫端无需关心代理商的采集和测试,只需使用squid统一服务入口爬取数据即可。

挂件 关闭
客服
二维码
客服二维码

加微信 领流量

大客户经理二维码

售前咨询,企业定制

专属客服竭诚为您服务