Python

urllib2使用及常见问题解决

字号+ 作者:www.aptno1.com 来源:转载 2016-12-13 15:57 我要评论( )

urllib2是python提供的一个模块,该模块提供了一个高级的Web交流库。除非你希望写一个更加底层的网络客户端,那么urllib2提供了所 有你需要的功能。该模块支持Web......

urllib2是python提供的一个模块,该模块提供了一个高级的Web交流库。除非你希望写一个更加底层的网络客户端,那么urllib2提供了所 有你需要的功能。该模块支持Web协议,HTTP,FTP和Gopher协议,同时也支持对本地文件的访问。urllib2模块的特殊功能是利用上述协议 下载数据(从因特网,局域网,主机上下载)。urllib2提供了再给定的URL地址下载数据的功能,同时也可以通过字符串的编码、解码来确保它们是有效 URL字符串的一部分。下面说明一下该模块的基本功能。
Urllib2提供了一个基础的函数:urlopen,将你需要请求的url作为参数传入即可获取数据,最简单的形式就是:
import urllib2
response = urllib2.urlopen("http://www.baidu.com")
html_string = response.read()
这样简单的一个函数当然没办法将千奇百怪的网页们一网打尽,下面我总结了一些比较复杂的场景,看看有什么方法可以得到比较好的解决。
 
1. 有基本认证(登陆名和密码)需求的Web站点,为了响应服务器发送的WWW-Authenticate头,我们可以建立一个基础认证处理器 (urllib2.HTTPBasicAuthHandler),同时在基本url或者域上注册一个登陆密码,这就意味着我们在Web站点上定义了一个安 全区域。一旦完成这些,我们可以安装url打开器,通过它打开所有的url。
图片1.png 
2. 某些服务器会过滤掉脚本提交提交的请求,我们可以在请求中加入header字段,伪装成浏览器提交的请求,以字典的形式构建一个header,利用 urllib2.Request()函数构建一个request,然后再用urllib2.urlopen()函数打开。示例如下:
图片2.png 
 
3. 需要提交cookie的情况,这种情况下需要用cookielib模块与urllib2模块配合使用,cookielib模块的主要作用是提供可存 储cookie的对象,可以利用该模块的CookieJar类的对象来捕获cookie并在后续连接请求时重新发送。即先利用cookielib与 urllib2模块配合访问一次网站的主页,获得cookie。再次请求该网站的其他页面是,脚本就可以自动带上该站点的cookie了。示例如下:
图片3.png 
 
4. 需要提交表单的情况,脚本中用一个字典接收需要post提交的数据,且该字典需要经过urllib模块中的urlencode()函数进行处理。示例如下:
图片4.png 
 
5. 页面经过gzip压缩的情况,很多时候我们发现,利用urllib2得到的页面写到本地以后打开发现都是乱码。这时可以看一下http头中 的’ Accept-Encoding’字段后面是不是跟着‘gzip’。这种情况下,需要导入‘StringIO’和‘gzip’模块进行解压处理,示 例代码如下:
图片5.png 
 
6. 如果由于实际需求,需要用脚本频繁的获取某个页面,某些网站会屏蔽你的IP。这里提供一个可能有效的解决方法,是否有效需要具体取决于站点脚本的实 现方法。可以在http的请求头中加入‘X-Forwarded-For’字段,并且按一定频率改变该字段后面跟着的ip值,如果站点的脚本认‘X- Forwarded-For’字段的话,就可以很好的解决屏蔽的问题。
 
暂时总结了这几点,大家在实际工作中遇到了什么新的问题请补充,谢谢!

本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/Python/393.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
暂时未开启评论功能~