有什么好用的高匿代理 使用方法IP适合爬虫用的?

&&&&&& 上回说到,突破反爬虫限制的方法之一就是多用几个代理IP,但前提是我们得拥有有效的代理IP,下面我们来介绍抓取代理IP并多线程快速验证其有效性的过程。
&&&&& &一、抓取代理IP
&&&&& &提供免费代理IP的网站还挺多的,我在‘西刺代理’上一阵猛抓后自己的IP就被其屏蔽了。只好换‘IP巴士’并乖乖的减缓抓取速度了。贴上抓取代码
import urllib.request
import urllib
import time
import random
#抓取代理IP
ip_totle=[]
#所有页面的内容列表
for page in range(2,6):
url='http://ip84.com/dlgn/'+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了,其他地区或类型的可自行改URL,可能是网站内容在实时更新的原因,若从第一页开始抓取不怎么稳定,所以我从第二页开始抓取,打印部分结果如下
&&&&&&&二、验证代理IP的有效性
&&&&&& 由于所处的网络可能连不上此代理或该代理连不上目标网址等原因,我们抓取的代理有可能是无效的,我们有必要验证所抓取代理IP的有效性。在urllib.request包中的ProxyHandler类可以设置代理访问网页,代码如下
import urllib.request
url = "http://quote.stockstar.com/stock"
#打算抓取内容的网页
proxy_ip={'http': '<span style="color: #.17.32.142: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是有效的,则可打印出网页源码,否则会出现错误。所以我们可以通过以上代码对所抓取的代理IP逐个进行验证。
&&&&&& 三、多线程快速验证
&&&&&& 按顺序逐个验证代理IP的有效性速度比较慢,python中有多线程模块,多线程类似于同时执行多个不同程序,使用多线程可以把占据长时间的程序中的任务放到后台去处理,在一些需要等待的任务实现上线程就比较有用了。
&&&&&& Python通过两个标准库thread和threading提供对线程的支持。thread模块提供了低级别的、原始的线程以及一个简单的锁。threading&是我们常用的用于python&多线程的模块,其功能更加丰富。threading&模块中提供了一个Thread&类,这个类可以实例化一个对象,每个对象代表一个线程。下面我们介绍下本文使用threading模块中的类。
&&&&&& 我们先介绍线程锁,如果有多个线程同时操作一个对象,如果没有很好地保护该对象,会造成程序结果的不可预期,比如我们的一个print语句只打印出一半的字符,这个线程就被暂停,执行另一个去了,所以我们看到的结果会很乱,这种现象叫做“线程不安全”。Threading模块为我们提供了Threading.Lock类,我们创建一个该类对象,在线程函数执行前,“抢占”该锁,执行完成后,“释放”该锁,则我们确保了每次只有一个线程占有该锁。这时候对一个公共的对象进行操作,则不会发生线程不安全的现象了。我们先建立了一个threading.Lock类对象lock,使用lock.acquire()获得了这个锁。此时,其他的线程就无法再获得该锁了,他们就会阻塞在“if lock.acquire()”这里,直到锁被另一个线程释放:lock.release()。
&&&&&& 然后我们来介绍threading模块中的Thread&类。class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *,daemon=None),&这个构造函数通常会用一些关键字参数,下面我们了解下这些关键字:&&&&&& group :这个变量作为保留变量,是为了以后扩展用的,暂时可以不用考虑。&&&&&& target: 是通过run()方法调用的可调用对象。默认为无,这意味着什么都不做。&&&&&& name:线程的名字。默认情况下,一个唯一的名称是”thread-n”的形式,其中n是一个小的十进制数。&&&&&& args:元组参数,为target所调用的。&&&&&& kwargs:关键字参数的字典,为target所调用的。&&&&&& daemon: 设置daemon是否daemon 如果没有显示设置,daemon的属性时从当前线程继承。&&&&&& 如果子类重写此构造函数,它必须确保在做别的事情之前调用基类的构造函数thread.__init__()。本文所用到Thread 类的方法有:&&&&&&&&&&&& start(self)&&&&&&&&&&&&& 开始线程的运行,每个线程对象只有调用最多一次。它将调用被调用对象的run()方法,并控制各个对象独立运行。也就是说被调用的对象必要要有run()&方法,在使用Thread&类来实例化对象的时候,因为Thread&中已经有了run()&方法了,所以可以不用理。但是,在基础Thread&创建子类的时候,一般我们要重写子类的run()方法。&&&&&& join(self,&timeout=None)&&&&&& 阻塞主线程,直到调用该方法的子线程运行完毕或者超时。timeout 表示超时时间,可以是一个数,例如整数,小数,分数,表示超时的时间,单位是秒。返回值为 None,可以在 join 超时之后调用 isAlive 确认线程是否结束。如果线程还活动,说明 join 触发了超时,此时你可以继续调用 join 或者做其他处理。当 timeout 没有给或者为 None 的时候,将阻塞直到调用此方法的子线程结束。一个线程可以调用多次 join 方法。
&&&&&& 多线程验证的主要程序如下
#多线程验证
threads=[]
for i in range(len(proxys)):
thread=threading.Thread(target=test,args=[i])
threads.append(thread)
thread.start()
#阻塞主进程,等待所有子线程结束
for thread in threads:
thread.join()
&&&&&&&一开始我我令元组参数args=(i),结果报‘test() argument after * must be an iterable, not int’的错误,误打误撞把小括号改为中括号后就有用了,暂时不解中其缘由,望知情者能告知。程序部分运行结果如下
&&&&&&& 亲测多线程验证比单线程验证快了好几倍,所以以后在爬取网页量比较大时就可以先用此程序抓一些有效的代理IP,这样就可以解决IP被屏蔽的问题啦。python3抓取代理IP并用多线程快速验证的完整代码如下
import urllib.request
import urllib
import time
import random
import socket
import threading
#抓取代理IP
ip_totle=[]
for page in range(2,6):
url='http://ip84.com/dlgn/'+str(page)
#url='http://www.xicidaili.com/nn/'+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格式
proxys = []
for i in range(0,len(ip_totle),4):
proxy_host = ip_totle[i]+':'+ip_totle[i+1]
proxy_temp = {"http":proxy_host}
proxys.append(proxy_temp)
proxy_ip=open('proxy_ip.txt','w')
#新建一个储存有效IP的文档
lock=threading.Lock()
#建立一个锁
#验证代理IP有效性的方法
def test(i):
socket.setdefaulttimeout(5)
#设置全局超时时间
url = "http://quote.stockstar.com/stock"
#打算爬取的网址
proxy_support = urllib.request.ProxyHandler(proxys[i])
opener = urllib.request.build_opener(proxy_support)
opener.addheaders=[("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64)")]
urllib.request.install_opener(opener)
res = urllib.request.urlopen(url).read()
lock.acquire()
print(proxys[i],'is OK')
proxy_ip.write('%s\n' %str(proxys[i]))
#写入该代理IP
lock.release()
except Exception as e:
lock.acquire()
print(proxys[i],e)
lock.release()
#单线程验证
'''for i in range(len(proxys)):
test(i)'''
#多线程验证
threads=[]
for i in range(len(proxys)):
thread=threading.Thread(target=test,args=[i])
threads.append(thread)
thread.start()
#阻塞主进程,等待所有子线程结束
for thread in threads:
thread.join()
proxy_ip.close()
阅读(...) 评论()爬虫代理ip,有什么好用的爬虫代理IP推荐吗,百变IP不错
百变IP,企业级高速、高匿代理IP,可以让爬虫抓数据像吃饭一样简单。千万IP出口池,1分钟接入。主要是给爬虫设计的。支持多种接入方式,支持免提取接入,也支持先获取IP:Port
列表后使用,支持高并发,支持Keep-Alive。
无论使用何种编程语言,只需稍微改造发送HTTP请求的函数,加几行代码,在百变IP后台设置一下您机器的IP白名单,即可使用。
1分钟接入:无论您使用何种编程语言,只需稍微改造发送HTTP请求的函数,加几行代码,在百变IP后台设置一下您机器的IP白名单,即可使用。
稳定、高速、高匿:动态私密非全网扫描而来,百变IP在全国数个地区机房租有实体服务器或云服务器,专为客户搭建代理通道,支持HTTPS,支持POST。开放代理是由全网扫描而来,实时验证,但稳定性相比私密代理差很多。
千万级IP出口池:千万量级一手IP池,是数据爬虫的不二之选,抓取成功率高。
我们使用的动态代理,接入简单,很快,我们用PHP做的爬虫,只需要改造一下发送cURL请求的地方就好了,也不需要事先提取IP列表,复杂的东西百变IP都帮我们封装好了。
只能说太赞了,我们通过动态代理抓取目标站,成功率在98%左右,很稳定,可以满足我们的需求。
我们使用的是独享代理和动态代理,很不错,独享代理可以自己控制IP的切换频率,并且提供了接口,很棒。
百变IP,企业级高速、高匿代理IP,让爬虫抓数据像吃饭一样简单。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。利用Python爬取可用的代理IP
转载 &更新时间:日 15:47:18 & 投稿:daisy
我们平时在用Python爬虫时,有时会要用到IP代理。网上有很多的免费代理IP网站,但不是所有的ip都能用,所以这篇文章教大家如何爬取可用的代理IP。
就以最近发现的一个免费代理IP网站为例:http://www.xicidaili.com/nn/。在使用的时候发现很多IP都用不了。
所以用Python写了个脚本,该脚本可以把能用的代理IP检测出来。
脚本如下:
#encoding=utf8
import urllib2
from bs4 import BeautifulSoup
import urllib
import socket
User_Agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/ Firefox/43.0'
header = {}
header['User-Agent'] = User_Agent
获取所有代理IP地址
def getProxyIp():
proxy = []
for i in range(1,2):
url = 'http://www.xicidaili.com/nn/'+str(i)
req = urllib2.Request(url,headers=header)
res = urllib2.urlopen(req).read()
soup = BeautifulSoup(res)
ips = soup.findAll('tr')
for x in range(1,len(ips)):
ip = ips[x]
tds = ip.findAll("td")
ip_temp = tds[1].contents[0]+"\t"+tds[2].contents[0]
proxy.append(ip_temp)
return proxy
验证获得的代理IP地址是否可用
def validateIp(proxy):
url = "http://ip.chinaz.com/getip.aspx"
f = open("E:\ip.txt","w")
socket.setdefaulttimeout(3)
for i in range(0,len(proxy)):
ip = proxy[i].strip().split("\t")
proxy_host = "http://"+ip[0]+":"+ip[1]
proxy_temp = {"http":proxy_host}
res = urllib.urlopen(url,proxies=proxy_temp).read()
f.write(proxy[i]+'\n')
print proxy[i]
except Exception,e:
if __name__ == '__main__':
proxy = getProxyIp()
validateIp(proxy)
&运行成功后,打开E盘下的文件,可以看到如下可用的代理IP地址和端口:
这只是爬取的第一页的IP地址,如有需要,可以多爬取几页。同时,该网站是时时更新的,建议爬取时只爬取前几页的即可。以上就是本文的全部内容,希望对大家学习使用Python能有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具急求好用的爬虫代理,需要高匿的_百度知道
急求好用的爬虫代理,需要高匿的
急求爬虫动态代理,高匿的,速度稳定的, 在百度搜的 就不用了 完全是不能使用, 要个速度快的 还好用的
我有更好的答案
阿里云动态ip的ecs了解下?nginx负载均衡转发了解下?
为您推荐:
其他类似问题
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。爬虫代理IP(支持Https/Http,适用于爬虫抓数据、流量提升、扫号等项目)
服务器分布于国内200多个城市,A段超过80个,IP池总量超过6000万个,而且会不定期增加新IP.无需安装额外客户端,100%兼容任何爬虫。
注一:爬虫代理IP所有IP均为高匿名,可用率高达95%,使用API接口获取IP,可以定制返回IP个数;
注二:IP有效期包括1分钟、2分钟、5分钟三个时段,适用于爬虫项目、刷流量业务、电商业务、SEO业务等。
无流量限制
爬虫代理·包天
全部为国内高匿名代理
可用率高达 95%
每次调用API返回 1 个高匿IP
支持HTTP、HTTPS
IP地区为中国内地
不限制调用次数
支持多线程调用
免费技术支持
没有价格优惠
爬虫代理·包月
¥ 160每月
全部为国内高匿名代理
可用率高达 95%
每次调用API返回 1 个高匿IP
支持HTTP、HTTPS
IP地区为中国内地
不限制调用次数
支持多线程调用
免费技术支持
价格优惠50%, 5元/天
爬虫代理·包半年
¥ 700半年
全部为国内高匿名代理
可用率高达 95%
每次调用API返回 1 个高匿IP
支持HTTP、HTTPS
IP地区为中国内地
不限制调用次数
支持多线程调用
免费技术支持
价格优惠67%, 3.3元/天
爬虫代理·包年
¥ 1250每年
全部为国内高匿名代理
可用率高达 95%
每次调用API返回 1 个高匿IP
支持HTTP、HTTPS
IP地区为中国内地
不限制调用次数
支持多线程调用
免费技术支持
价格优惠73%, 2.7元/天
说明:以上价格为每次调用API返回1个高匿IP的价格,点击查看详情按钮,可以调整每次调用API返回IP的个数。
1. 爬虫(动态)代理IP是什么?适用范围有哪些?
① 爬虫(动态)代理IP是无忧代理IP提供的切换速度快、100%有效、高度可匿的代理IP,具体参考。
② 爬虫(动态)代理IP,IP有效期有1分钟、2分钟、5分钟三种,具体时间请在购买的时候选择好,购买后无法修改。
③ 爬虫(动态)代理IP适用于做数据爬虫、刷流量、广告点击、软件自动注册等业务。
④ 爬虫(动态)代理IP服务器分布于国内多个省市,A段IP超过80个,IP池总量超过6000万,获取到的IP基本不会重复,100%兼容任何爬虫。
2. 刷单代理IP是什么?做啥用的?
① 刷单代理IP是我们公司自己搭建的服务器IP(机房自营产品),IP可用时长最长30分钟,适用于刷单、注册小号、发帖等。
② 所有IP均通过用户名、密码加密,保证IP安全性,支持API接口和软件。
3. 你们的普通代理IP是怎么获取到的?
① 无忧代理IP使用自营机房50台4核云服务器,运行分布式IP与端口扫描系统,每天扫描IP量至少两百多万条,今日已经扫描 101900(3分钟前更新) 条。
② 我们不间断的运行着IP验证系统,精确地检测每一个代理IP的匿名度、响应时间、数据传输速度、地域、运营商,每秒钟都在验证,保证网站的IP都是高度可用的。
③ 我们提供了极其丰富的代理筛选和API接口,每次提取的IP不相同,只为更便捷地提取、更便捷的开发。
④ 本代理IP平台每天流水25万左右高质量有效代理IP,时时刻刻分分秒秒都在不停地在更新,绝无水分,行内信誉最高,本页可看到验证过程,看得见的放心,看得见的信誉!
4. 独享代理IP是什么?
① 独享代理IP是无忧代理IP为需要长期有效、高匿名、支持HTTPS、支持Sockt5、速度快的IP的用户提供的特殊代理IP。
② 独享代理IP地区包括河南郑州、陕西宝鸡,具体可以参考 。
5. 普通代理、爬虫(动态)代理、独享代理、刷单代理这四者有什么区别?
① IP来源:普通代理通过互联网扫描而来;爬虫(动态)代理、独享代理、刷单代理是我们公司自己搭建的服务器IP(机房自营产品)。
② 可用率:普通代理可用率在30%-50%;爬虫(动态)代理IP可用率在95%以上(通过http://2018.ip138.com/ic.asp验证);独享代理100%可以使用;刷单代理99%可用率。
&官方客服电话&&&&&&
为了避免 QQ 丢消息,请尽量添加客服为 QQ 好友。
客服工作时间08:30──17:30
&官方客服电话&&&&&&
为了避免 QQ 丢消息,请尽量添加客服为 QQ 好友。
客服工作时间08:30──17:30
周一至周日8:30-18:00 技术部电话热线

我要回帖

更多关于 高匿代理 使用方法 的文章

 

随机推荐