|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
25 IP代理与IP代理池构建的两种方案实战
一、IP代理概述
IP代理就是让爬虫使用代理IP去爬取对方网站。
(1)什么是IP
百科的解释:IP地址(英语:Internet Protocol Address)是一种在Internet上的给主机编址的方式,也称为网际协议地址。常见的IP地址,分为IPv4与IPv6两大类。所谓IP地址就是给每个连接在Internet上的主机分配的一个32bit地址。按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节。例如一个采用二进制形式的IP地址是“00001010000000000000000000000001”,这么长的地址,人们处理起来也太费劲了。为了方便人们的使用,IP地址经常被写成十进制的形式,中间使用符号“.”分开不同的字节。于是,上面的IP地址可以表示为“10.0.0.1”,IP地址的这种表示法叫做“点分十进制表示法”。
简单地说,IP地址就是上网主机所获得的一个唯一的编号。
(2)如何获取代理IP
然后第二个问题就是如何获取代理IP。这可以在网上搜寻。免费的有,收费的也有。众所周知,收费的东西总是要好一点的。如果只是平时用做练习,用免费的就好。如果是公司或者个人专门获取数据,则需要选择优质的IP。
免费的代理IP:西刺代理(http://www.xicidaili.com/)等等。专业的代理IP:大象代理(http://www.daxiangdaili.com/)等等。
由于钱的问题,接下来的例子都是使用免费的代理。专业的代理IP主要是用接口来接收IP,比我们自己手动输入要方面。而且,其IP的质量也好,也就是稳定速度快。
二、IP代理池的第一种方式(适合代理IP稳定)
利用urllib.request.ProxyHandler添加代理IP。
(1)构建IP代理- <font size="3">ip = "61.191.41.130"
- #利用urllib.request.ProxyHandler添加代理IP
- proxy = urllib.request.ProxyHandler({"http":ip})
- opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
- urllib.request.install_opener(opener)
- url = "http://www.baidu.com"
- data = urllib.request.urlopen(url).read().decode('utf-8')
- print(len(data))</font>
复制代码 显然是成功的。如果访问不成功,应该是IP的问题。多次更换,应该就没问题了。
(2)构建IP代理池
与构建用户代理池相似,使用random模块。- import random
- import urllib.request
- ippools = [
- "61.191.41.130",
- "122.238.12.191",
- "222.161.56.166",
- ]
- def ip(ippools):
- thisip = random.choice(ippools)
- print("当前代理IP:"+thisip)
- proxy = urllib.request.ProxyHandler({"http":thisip})
- opener = urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
- urllib.request.install_opener(opener)
- for i in range(0,3):
- try:
- ip(ippools)
- url = "http://www.baidu.com"
- data1 = urllib.request.urlopen(url).read()
- print("访问成功"+str(len(data1)))
- except Exception as err:
- print(err)
复制代码 结果:- 当前代理IP:61.191.41.130
- 访问成功111457
- 当前代理IP:222.161.56.166
- <urlopen error [WinError 10061] 由于目标计算机积极拒绝,无法连接。>
- 当前代理IP:222.161.56.166
- <urlopen error [WinError 10061] 由于目标计算机积极拒绝,无法连接。>
复制代码 可以发现,有的可以成功,有的则不行。这完全是由于代理IP的问题。免费的东西,只有忍忍。
三、IP代理池的第二种方式(适合代理IP不稳定):接口调用
由于并没有购买,这里只是简单的用代码演示一下。接口就是你付费了之后,别人会发给你的一个链接。我的代码里用的是免费的(其实是爬取免费的IP代理网战,把IP地址提取出来)。付费的会有专门的接口调用文档。
完整代码:
由于接口的问题,会出现一些问题。但思路是相同的:- 调用了一次接口
- <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。>
- 当前用的IP:122.238.12.191
- <urlopen error [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。>
- 当前用的IP:222.161.56.166
- <urlopen error [WinError 10061] 由于目标计算机积极拒绝,无法连接。>
- list index out of range
- list index out of range
- list index out of range
- list index out of range
- list index out of range
- list index out of range
- list index out of range
- 调用了一次接口
- <urlopen error [WinError 10061] 由于目标计算机积极拒绝,无法连接。>
复制代码
总的来说,IP代理是比浏览器伪装较好的一种伪装技术。因为它利用的是别人上网的IP,因此就对己方上网IP进行的保护。如果你的可用IP足够多,并且有结合了浏览器伪装。那么,即使做大规模的爬取,对方也是很难发现是爬虫在访问网站。
|
评分
-
查看全部评分
|