python : 免费代理IP获取,验证可用性,建立属于自己的代理ip池
在进行爬虫爬取网站时候总会面临着各种各样的反爬措施,最让人头疼的一般就是封IP地址了,这时候使用代理IP就是一个明智的选择了。
建立属于自己的代理IP池是进行爬虫的一个很高效的办法。
网上存在着大量的免费代理IP网站,以下选取一个较为好用的代理IP网站进行爬取,建立属于自己的代理IP池。(西祠代理、快代理等等)
对于可用的代理获取需要进行多步操作进行提取,毕竟免费给的,怎么可能都是好东西呢?
好东西都是藏在其中的,需要我们细心去提取,提取出来之后就是一个非常美好的事情了。
提取到可用的代理IP之后,就可以建立一个专属于自己的代理IP池了,这样子是不是非常美好呢。有了自己的代理IP池之后,从此爬虫就不再怕被封了。
1 、分析网站,提取高匿代理(只有高匿代理才是真正想要的,如果有需要其他的透明代理,或者普通代理可以自行更换网址) 高匿代理网址:https://www.xicidaili.com/nn
2、提取高匿代理的总页数
res = requests.get(url)
html = parsel.Selector(res.text)
pages = html.xpath('//div[@class="pagination"]/a[10]/text()').extract_first()
3.提取所有的IP地址以及端口号
ips = parsel.Selector(response.text).xpath('//table/tr/td[2]/text()').extract()
posts = parsel.Selector(response.text).xpath('//table/tr/td[3]/text()').extract()
4.对所有的IP地址以及端口号进行检测
for ip,post in zip(ips,posts):
id = (ip+":"+post).strip()
try:
telnetlib.Telnet(ip,post,timeout=3)
print(id) # 查看通过第一次检测的代理IP
except Exception as e:
pass
5.检测出的IP地址就是可用度较高的IP地址,如果还是想要最求可用度更高的IP地址,可以对上面检测过的IP地址进行二次检测
try:
res = requests.get(url,timeout=5,proxies={"https":(ip+":"+post).strip()})
if (res.status_code == 200):
id_list.append("通过第二次检测:",id) # 这里获取到的IP地址就是高质量的可用代理IP
except:
pass
6、实现翻页功能,重复运行以上2–5步骤,(使用第一步中提取的总页数进行翻页提取数据)
for i in range(1,int(pages)):
url = "https://www.xicidaili.com/nn/{}".format(i)
response = requests.get(url)
由以上步骤便可提取到大量的免费的高匿的代理IP了,一起行动起来吧。
当然这还不是最好的获取代理IP的方法,毕竟这只是一个单线程获取的方法,对代理IP的检测需要的时间较长,把检测代理IP的过程换成多线程检测才是一个更好的获取代理IP的方法。