Python2爬虫中Urllib的使用方法

  介绍

这篇文章给大家分享的是有关Python2爬虫中Urllib的使用方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

<强> 1,设置标题

有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些头的属性。

首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文件,然后加载JS, CSS等等,经过多次请求之后,网页的骨架和肌肉全了,整个网页的效果也就出来了。

 Python2爬虫中Urllib的使用方法

拆分这些请求,我们只看一第一个请求,你可以看的到,有个请求URL,还有头、下面便是反应,图片显示得不全,小伙伴们可以亲身实验一下。那么这个头中包含了许许多多是信息,有文件编码啦,压缩方式啦,请求的代理啦等等。

其中,代理就是请求的身份,如果没有写入请求身份,那么服务器不一定会响应,所以可以在页眉中设置代理,例如下面的例子,这个例子只是说明了怎样设置的头,小伙伴们看一下设置格式就好。

import  urllib ,   import  urllib2 ,   时间=url  & # 39; http://www.server.com/login& # 39;   时间=user_agent  & # 39; Mozilla/4.0,(兼容;,MSIE  5.5;, Windows  NT) & # 39;,,   values =,{& # 39;用户名# 39;,:,& # 39;cqc # 39;,,, & # 39;密码# 39;,:,& # 39;xxxx # 39;,},,   headers =,{, & # 39;用户代理# 39;,:,user_agent },,   时间=data  urllib.urlencode(值),,   request =, urllib2.Request (url,数据,标题),,   时间=response  urllib2.urlopen(请求),,   page =, response.read ()

这样,我们设置了一个头,在构建请求时传入,在请求时,就加入了头传送,服务器若识别了是浏览器发来的请求,就会得到响应。

另外,我们还有对付“反盗链”的方式,对付防盗链,服务器会识别头中的推荐人是不是它自己,如果不是,有的服务器不会响应,所以我们还可以在标题中加入推荐人。

例如我们可以构建下面的标题

headers =,{, & # 39;用户代理# 39;,:,& # 39;Mozilla/4.0,(兼容;,MSIE  5.5;, Windows  NT) & # 39;,,,   ,,,,,,,& # 39;推荐人# 39;:& # 39;http://www.zhihu.com/articles& # 39;,}

同上面的方法,在传送请求时把标题传参入请求数里,这样就能应付防盗链了。

另外标头的一些属性,下面的需要特别注意一下:

user - agent:有些服务器或代理会通过该值来判断是否是浏览器发出的请求

内容类型:在使用其他接口时,服务器会检查该值,用来确定HTTP中身体的内容该怎样解析。

application/xml: xml RPC在,如RESTful/SOAP调用时使用

application/json:在json RPC调用时使用

应用程序/x-www-form-urlencoded:浏览器提Web表交单时使用

在使用服务器提供的REST或SOAP服务时,内容类型设置错误会导致服务器拒绝服务

其他的有必要的可以审查浏览器的头部内容,在构建时写入同样的数据即可。

<强> 2,代理(代理)的设置

urllib2默认会使用环境变量http_proxy来设置HTTP代理。假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过的多,它会禁止你的访问。所以你可以设置一些代理服务器来帮助你做工作,每隔一段时间换一个代理,网站君都不知道是谁在捣鬼了,这酸爽!

下面一段代码说明了代理的设置用法

import  urllib2   enable_proxy =,真的   时间=proxy_handler  urllib2.ProxyHandler ({“http",:, & # 39; http://some-proxy.com: 8080 & # 39;})   时间=null_proxy_handler  urllib2.ProxyHandler ({})   if  enable_proxy:   ,,,opener =, urllib2.build_opener (proxy_handler)   其他:   ,,,opener =, urllib2.build_opener (null_proxy_handler)   urllib2.install_opener(刀)

<强> 3,超时设置

上一节已经说过urlopen方法了,第三个参数就是超时的设置,可以设置等待多久超时,为了解决一些网站实在响应过慢而造成的影响。

例如下面的代码,如果第二个参数数据为空那么要特别指定是超时是多少,写明形参,如果数据已经传入,则不必声明。

Python2爬虫中Urllib的使用方法