urllib2使用及常见问题解决 - APT防御产品

urllib2使用及常见问题解决

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’字段的话,就可以很好的解决屏蔽的问题。

 

暂时总结了这几点,大家在实际工作中遇到了什么新的问题请补充,谢谢! 


转载请注明出处 APT防御产品 » urllib2使用及常见问题解决

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址