技术分享|Python爬虫代理

2018-11-09 16:53:07

一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会会禁止这个IP的访问。所以我们需要设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。

Python中,可以使用urllib2中的ProxyHandler来设置使用代理服务器,下面,西安中软卓越的老师通过代码说明如何来使用代理:

爬虫代理.jpg

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()

上面使用的是免费的开放代理,我们可以在一些代理网站上收集这些免费代理,测试后如果可以用,就把它收集起来用在爬虫上面。

如果你有足够多的代理,可以放在一个列表中,随机选择一个代理去访问网站。如下:

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()

上面使用的都是免费代理,不是很稳定,很多时候会出现无法使用的情况,这时候可以考虑使用私密代理。也就是向代理供应商购买代理,供应商会提供一个有效代理,并且有自己的用户名和密码,具体使用和免费代理一样,这是多了一个账户认证,如下:

# 构建具有一个私密代理IPHandler,其中user为账户,passwd为密码

httpproxy_handler = urllib2.ProxyHandler({"http" : "userpasswd@124.88.67.81:80"})

上面就是使用urllib2设置代理的方法,不过看起来有些麻烦,下面我们看看如何使用reqursts来使用代理。

使用免费代理:

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

使用私密代理:

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

这样看起来简单不少。

注:可以将账户密码写入环境变量以免泄露

作为一名开发人员,技术是立身的根本,是拴马桩的尊严;对于一个做教育机构,口碑如水是生命之源,是长盛不衰的根本。13年历经风雨依然昂首前行,未来的西安中软卓越同样会恪守初心,以技术立身,培养IT精英,捍卫教育本质。

 

本文由中软卓越(西安)汇集整理,转载请注明作者及出处。

如需学习java、UI设计、软件测试、Python、大数据、嵌入式、Linxu云计算,请点击咨询,加入我们让你的未来不再迷茫。

关于我们

【中软卓越】-中软国际旗下高端教育品牌,是中软国际有限公司投资的大型人才服务机构,是中软国际人才战略的核心组成部分之一,承担集团发展过程中人才储备和培养的任务;专注IT培训37年,国内高端IT培训品牌,教育部指定官方IT人才培训机构。专注java培训、UI设计培训、软件测试培训、Python培训、大数据培训、嵌入式培训、Linxu云计算培训等培训课程。217家合作院校,880家合作企业,真实项目实战,素质拓展,职业规划。零首付,100%保障就业,先就业,后付款。

最牛逼的毕业学员入职名企享受高薪就业。880家合作企业,年培育学员人数逾6000人,毕业学员就职于中软国际、百度、腾讯、阿里巴巴、IBM、华为科技、中兴通讯、软通动力等知名企业。

还有什么疑问?我们全面为你解答!为您提供一对一专人服务,请点击下方咨询

  • 卓越资讯
  • 猜你想看
  • 常见问题

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。[详细课程]

    软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程;软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。[详细课程]

    软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。[详细课程]

    Python是一种面向对象的解释型计算机程序设计语言,语法简洁清晰,特色之一是强制用空白符作为语句缩进,它常被昵称为胶水语言,能够把用其他语言制作的各种模块。[详细课程]

    UI设计分为实体UI和虚拟UI,互联网说的UI设计是虚拟UI,一般是指对软件的人机交互、操作逻辑、界面美观的整体设计。[详细课程]

    大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。[详细课程]

    云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。[详细课程]

    西安市长安北路8号高速大厦三楼

    电话:029-61876930