注册
登录
提问时间:2018/6/25 11:20:00    楼主:未知网友   阅读量:717

尽管知道免费代理IP有效率并不怎么好,但毕竟是天上掉下来的馅饼。还是有很多人去爬取免费代理IP用来做爬虫的,不过也得减缓爬取速度,避免影响人家网站的正常运行。

那么问题来了,如何抓取免费代理IP呢?又如何多线程验证代理IP是否有效呢?

一、抓取代理IP

首先找一个提供免费代理IP的网站,这个网上有很多,这里就不举例说明了。


import urllib.request

import urllib

import re

import time

import random

#抓取代理IP

ip_totle=[]  #所有页面的内容列表

for page in range(2,6):

    url='http:www.***.com/***/'+str(page)

    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)"}

    request=urllib.request.Request(url=url,headers=headers)

    response=urllib.request.urlopen(request)

    content=response.read().decode('utf-8')

    print('get page',page)

    pattern=re.compile('<td>(\d.*?)</td>')  #截取<td>与</td>之间第一个数为数字的内容

    ip_page=re.findall(pattern,str(content))

    ip_totle.extend(ip_page)

    time.sleep(random.choice(range(1,3)))

#打印抓取内容

print('代理IP地址     ','\t','端口','\t','速度','\t','验证时间')

for i in range(0,len(ip_totle),4):

    print(ip_totle[i],'    ','\t',ip_totle[i+1],'\t',ip_totle[i+2],'\t',ip_totle[i+3])


二、验证代理IP是否有效

免费代理IP的有效率很低,所以在使用前还是需要验证下代理IP是否有效比较好,这样比较节省时间。


import urllib.request

url = "http://www.***.com/***"  #打算抓取内容的网页

proxy_ip={'http': '37.27.32.42:80'}  #想验证的代理IP

proxy_support = urllib.request.ProxyHandler(proxy_ip)

opener = urllib.request.build_opener(proxy_support)

opener.addheaders=[("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64)")]

urllib.request.install_opener(opener)

print(urllib.request.urlopen(url).read())


三、多线程快速验证

       按顺序逐个验证代理IP的有效性速度比较慢,python中有多线程模块,多线程类似于同时执行多个不同程序,使用多线程可以把占据长时间的程序中的任务放到后台去处理,在一些需要等待的任务实现上线程就比较有用了,由于篇幅原因,这里就不贴多线程的代码了,各位自己琢磨下就明白了。

最后多嘴一句,免费代理IP虽然是免费,但时间成本更昂贵,为了提升工作效率,还是建议去付费,站大爷的短效优质代理IP和一手私密代理IP都很适合用来做爬虫不妨咨询一二。