这篇文章给大家分享的是有关Python2爬虫中Urllib的使用方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
<强> 1,设置标题强>
有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些头的属性。
首先,打开我们的浏览器,调试浏览器F12,我用的是Chrome,打开网络监听,示意如下,比如知乎,点登录之后,我们会发现登陆之后界面都变化了,出现一个新的界面,实质上这个页面包含了许许多多的内容,这些内容也不是一次性就加载完成的,实质上是执行了好多次请求,一般是首先请求HTML文件,然后加载JS, CSS等等,经过多次请求之后,网页的骨架和肌肉全了,整个网页的效果也就出来了。
拆分这些请求,我们只看一第一个请求,你可以看的到,有个请求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方法了,第三个参数就是超时的设置,可以设置等待多久超时,为了解决一些网站实在响应过慢而造成的影响。
例如下面的代码,如果第二个参数数据为空那么要特别指定是超时是多少,写明形参,如果数据已经传入,则不必声明。