Python爬虫实例九州动态IP使用HTTP的urllib2中的ProxyHandler设置。
2018-11-20 14:38
656 查看
例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会会禁止这个IP的访问。一些网站会有相应的反爬虫措施,所以我们需要设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。
在Python中,可以使用urllib2中的ProxyHandler来设置使用代理服务器,下面通过代码说明如何来使用代理:
[code]import urllib2 # 构建了两个代理Handler,一个有代理IP,一个没有代理IP httpproxy_handler = urllib2.ProxyHandler({"http" : "124.88.67.81:80"}) nullproxy_handler = urllib2.ProxyHandler({}) #定义一个代理开关 proxySwitch = True # 通过 urllib2.build_opener()方法使用这些代理Handler对象,创建自定义opener对象 # 根据代理开关是否打开,使用不同的代理模式 if proxySwitch: opener = urllib2.build_opener(httpproxy_handler) else: opener = urllib2.build_opener(nullproxy_handler) request = urllib2.Request("http://www.baidu.com/") # 使用opener.open()方法发送请求才使用自定义的代理,而urlopen()则不使用自定义代理。 response = opener.open(request) # 就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。 # urllib2.install_opener(opener) # response = urlopen(request) print response.read()
上面使用的是免费的开放代理,我们可以在一些代理网站上收集这些免费代理,测试后如果可以用,就把它收集起来用在爬虫上面。
免费代理网站:
如果你有足够多的代理,可以放在一个列表中,随机选择一个代理去访问网站。如下:
[code]import urllib2 import random proxy_list = [ {"http" : "124.88.67.81:80"}, {"http" : "124.88.67.81:80"}, {"http" : "124.88.67.81:80"}, {"http" : "124.88.67.81:80"}, {"http" : "124.88.67.81:80"} ] # 随机选择一个代理 proxy = random.choice(proxy_list) # 使用选择的代理构建代理处理器对象 httpproxy_handler = urllib2.ProxyHandler(proxy) opener = urllib2.build_opener(httpproxy_handler) request = urllib2.Request("http://www.baidu.com/") response = opener.open(request) print response.read()
上面使用的都是免费代理,不是很稳定,很多时候会出现无法使用的情况,这时候可以考虑使用私密代理。也就是向代理供应商购买代理,供应商会提供一个有效代理,并且有自己的用户名和密码,具体使用和免费代理一样,这是多了一个账户认证,如下:
[code]# 构建具有一个私密代理IP的Handler,其中user为账户,passwd为密码 httpproxy_handler = urllib2.ProxyHandler({"http" : "user:passwd@124.88.67.81:80"})
上面就是使用urllib2设置代理的方法,不过看起来有些麻烦,下面我们看看如何使用reqursts来使用代理。
使用免费代理:
[code]import requests # 根据协议类型,选择不同的代理 proxies = { "http": "http://12.34.56.79:9527", "https": "http://12.34.56.79:9527", } response = requests.get("http://www.baidu.com", proxies = proxies) print response.text
使用私密代理:
[code]import requests # 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式: proxy = { "http": "mr_mao_hacker:sffqry9r@61.158.163.130:16816" } response = requests.get("http://www.baidu.com", proxies = proxy) print response.text
这样看起来简单不少。
注:可以将账户密码写入环境变量以免泄露
阅读更多相关文章推荐
- Python 爬虫使用动态切换ip防止封杀
- 简单动态代理实例(使用jdk的proxy)
- python中使用urllib2伪造HTTP报头的2个方法
- python使用在线API查询IP对应的地理位置信息实例
- 零基础写python爬虫之使用urllib2组件抓取网页内容
- Python使用urllib2获取网络资源实例讲解
- ashx中使用HttpContext.Current.Session ,出现未将对象引用设置到实例上
- python 爬虫(4)urllib2的使用细节与抓站技巧
- python使用urllib2提交http post请求的方法
- python中使用urllib2伪造HTTP报头的2个方法
- python中使用urllib2伪造HTTP报头的2个方法
- 使用JAVA中的动态代理实现数据库连接池(载自:http://www.ibm.com/developerworks/cn/java/l-connpoolproxy/)
- 使用python 编写 抓取内涵段子动态图的简单爬虫
- 零基础写python爬虫之使用urllib2组件抓取网页内容
- c#中HttpWebRequest使用Proxy实现指定IP的域名请求
- python使用在线API查询IP对应的地理位置信息实例
- 【转】Python使用urllib2写爬虫抓站的一些技巧
- ashx中使用HttpContext.Current.Session ,出现未将对象引用设置到实例
- Python httplib模块使用实例
- ashx中使用HttpContext.Current.Session ,出现未将对象引用设置到实例上[转]