Python 爬虫入门(二)—— IP代理使用

摘要:
在上一节中,我们简要描述了Python爬虫的编写过程。从本节开始,我们主要解决了如何突破爬行过程中的限制。对于公司,购买代理IP。具有http://ip.chinaz.com/getip.aspx作为目标网站的示例,代码如下:#encoding=utf8importurllimportsocketsocket。setdefaulttimeoutf=openlines=f。readlines()proxys=[]foriinrange:ip=lines[i]。跳闸(“”)。split(“”)proxy_host=“http://”+ip[0]+“:”+ip[1]proxy_temp={“http”:proxy_host}proxys.appendurl=“http://ip.chinaz.com/getip.aspx“对于proxyproxys:try:res=urllib.urlopen.read()printresexceptionException,e:printproxyprintcontinueCode description:a).ip=lines[i].trip(”“).split(”“”“)这是为了删除每行末尾的换行符,然后使用tab b将字符串拆分为字符串数组。proxy_temp={”http“:proxy_host}”其中,http代表代理的类型。除了http之外,还有https、套接字等等。以http为例。c) 。urlib.urlopen,其中代理是代理。此时,IP代理的使用已经结束。

上一节,大概讲述了Python 爬虫的编写流程, 从这节开始主要解决如何突破在爬取的过程中限制。比如,IP、JS、验证码等。这节主要讲利用IP代理突破。

  1.关于代理

  简单的说,代理就是换个身份。网络中的身份之一就是IP。比如,我们身在墙内,想要访问google、u2b、fb等,直接访问是404,所以要换个不会被墙的IP,比如国外的IP等。这个就是简单的代理。

  在爬虫中,有些网站可能为了防止爬虫或者DDOS等,会记录每个IP的访问次数,比如,有些网站允许一个IP在1s(或者别的)只能访问10次等,那么我们就需要访问一次换一个IP(具体什么策略,自己决定)。

  那么问题来了,这些代理从哪得到?对于公司来讲,买代理IP。但是对于个人的话,可能会有浪费。那么怎么办呢?网上有很多免费的代理IP网站,但是手动更改的话,很浪费时间,并且免费的IP有很多不可用。所以,我们可以用爬虫爬那么IP。用上一节的代码,完全可以做到。这里我们用http://www.xicidaili.com/nn/1测试,声明:仅学习交流,切勿用作商业用途等

  2.获取代理IP,代码如下:

  

复制代码
#encoding=utf8
import urllib2
import BeautifulSoup

User_Agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'
header = {}
header['User-Agent'] = User_Agent

url = 'http://www.xicidaili.com/nn/1'
req = urllib2.Request(url,headers=header)
res = urllib2.urlopen(req).read()

soup = BeautifulSoup.BeautifulSoup(res)
ips = soup.findAll('tr')
f = open("../src/proxy","w")

for x in range(1,len(ips)):
    ip = ips[x]
    tds = ip.findAll("td")
    ip_temp = tds[2].contents[0]+"	"+tds[3].contents[0]+"
"
    # print tds[2].contents[0]+"	"+tds[3].contents[0]
    f.write(ip_temp)
复制代码

  代码说明:

    a).这里我们使用的urllib2模块,因为,这个请求有点特殊,服务器会验证请求中的header(如有疑问,可参考http的相关资料)

    b).urllib2与urllib的区别在于,urllib2发送请求的时候可携带参数(我现在只用到这点区别)

    c).open()用于打开文件,第一个参数是文件的路径可以填绝对路径,例如E:\proxy(""在编程中是特殊字符,要用"\"代表实际的"")。也可以是相对路径,比    如"../src/proxy",就是文件相对于代码的位置。第二个参数"w",代表打开文件的权限,w代表写权限,r代表读权限。这个在很多系统中都通用。比如,linux等

    d).for循环,如果之前学过java或者其他高级语言,可能不太习惯,因为他们用的是for(;;)这样的。python中的for循环,in 表示X的取值,按顺序取到in后面的参数

 特别注意:别忘了for语句后面的冒号(":")

    c).range函数,代表生成一系列数,如果range(0,6,1),意思就是从0开始,到6结束(不包括6),每次增加1(也就是步长为1),生成一个数组,结果就是[0, 1, 2, 3, 4, 5]

    e).f.write()就是往文件里面写数据,如果打开文件的时候,没有"w"权限,则无法写入。

  页面截图:

Python 爬虫入门(二)—— IP代理使用第3张

  运行结果:

  Python 爬虫入门(二)—— IP代理使用第4张

  3.并不是所有的代理都能用,原因有很多,可能是我们所处的网络连不到这个代理,也有可能是这个代理,连不到我们的目标网址,所以,我们要验证一下。以http://ip.chinaz.com/getip.aspx作为目标网址为例(这个是测试ip地址的网址)代码如下:

  

复制代码
#encoding=utf8
import urllib
import socket
socket.setdefaulttimeout(3)
f = open("../src/proxy")
lines = f.readlines()
proxys = []
for i in range(0,len(lines)):
    ip = lines[i].strip("
").split("	")
    proxy_host = "http://"+ip[0]+":"+ip[1]
    proxy_temp = {"http":proxy_host}
    proxys.append(proxy_temp)
url = "http://ip.chinaz.com/getip.aspx"
for proxy in proxys:
    try:
        res = urllib.urlopen(url,proxies=proxy).read()
        print res
    except Exception,e:
        print proxy
        print e
        continue
复制代码

  代码说明:

    a).ip = lines[i].strip(" ").split(" ") 这个是去掉每行末尾的换行符(也就是" "),然后以制表符(也就是" ")分割字符串为字符串数组

    b).proxy_temp = {"http":proxy_host}其中http代表代理的类型,除了http之外还有https,socket等这里就以http为例

    c).urllib.urlopen(url,proxies=proxy) 其中proxies就是代理。以代理模式访问目标网址

    d).socket.setdefaulttimeout(3)设置全局超时时间为3s,也就是说,如果一个请求3s内还没有响应,就结束访问,并返回timeout(超时)

  运行结果如图:

  Python 爬虫入门(二)—— IP代理使用第7张

  从结果看可用的并不是很多。但是也够个人用了。

  至此,IP代理的使用就结束了。

  备注:

  1.代码仅供学习交流,切勿用作商业用途

  2.代码如有问题,多多指教

  3.转载请注明出处

原网址:http://www.cnblogs.com/hearzeus/p/5157016.html

免责声明:文章转载自《Python 爬虫入门(二)—— IP代理使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇这里介绍个arp攻击工具.net 客户端调用java或.net webservice进行soapheader验证下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SNMP的工作原理&软件开发

  SNMP(Simple Network Management Protocol,简单网络管理协议)首先是由IETF的研究小组为了解决Internet上的路由器管理问题而提出的。SNMP的设计原则是简单 性和扩展性。简单性是通过信息类型限制、请求响应或协议而取得。扩展性是通过将管理信息模型与协议、被管理对象的详细规定(MIB)分离而实现的。     网络...

彻底搞懂Scrapy的中间件(一)

中间件是Scrapy里面的一个核心概念。使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫。 “中间件”这个中文名字和前面章节讲到的“中间人”只有一字之差。它们做的事情确实也非常相似。中间件和中间人都能在中途劫持数据,做一些修改再把数据传递出去。不同点在于,中间件是开发者主动加进去的组件,而中间人是被动的,...

【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理

这篇博文,我们主要以类图和代码的形式来对照学习一下静态代理和动态代理。重点解析各自的优缺点。 定义 代理模式(Proxy Pattern)是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并由代理对象控制对原对象的引用。 代理模式不会改变原来的接口和行为,仅仅是转由代理干某件事,代理能够控制原来的目标,比如:代理商,代理商仅仅会买东西,但并不会...

Creating Your First Mac AppAdding a Track Object 添加一个 Track 对象

Adding a Track Object 添加一个Track对象 In this app, there are two custom classes that contain application logic. The Xcode template provided anAppDelegate class and created an instance...

鲜为人知的maven标签解说

目录 localRepository interactiveMode offline pluginGroups proxies servers使用方法 mirrors profiles 使用场景 出现位置 激活方式 maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码...

反爬虫

一、前置知识 1. 动态网页和网页源码 在爬虫领域中,静态网页与动态网页的定义与传统定义是完全不同的。 静态网页指的是网页主体内容的渲染工作在服务器端完成,并通过响应正文返回的网页。 动态网页指的是主体内容或者全部内容都需要客户端执行 JavaScript 代码来计算或渲染的网页。 网页源码,是指未经过浏览器解释和 JavaScript 引擎渲染的文本...