str 网页 内容 post 标准 handle default font
本文通过摘取 http://blog.csdn.net/howeblue/article/details/47426265 博客上的内容整理而成,有兴趣的可以去看看原文。
urllib 和 urllib2 模块都做与请求 URL 相关的操作,但他们提供不同的功能。本文主要是描述 urllib2。
urllib2 是 Python 的一个获取 URL 的组件,它常用的方法及类如下:
1, urllib2.urlopen (url [, data] [, timeout] )
它打开 URL 网址,url 参数可以是一个字符串 url 或者是一个 Request 对象。可选的参数 timeout,阻塞操作以秒为单位,如尝试连接(如果没有指定,将使用设置的全局默认 timeout 值)。实际上这仅适用于 HTTP,HTTPS 和 FTP 连接。
- url = 'http://m.sohu.com/?v=3&_once_=000025_v2tov3&_smuid\=ICvXXapq5EfTpQTVq6Tpz'
- req = urllib2.Request(url)
- resp = urllib2.urlopen(req)
- page = resp.read()
urlopen 方法也可通过建立了一个 Request 对象来明确指明想要获取的 url。调用 urlopen 函数对请求的 url 返回一个 response 对象。这个 response 类似于一个 file 对象,所以用. read() 函数可以操作这个 response 对象。
2, class urllib2.Request(url [, data] [, headers] [, originreqhost] [, unverifiable] )
Request 类是一个抽象的 URL 请求。
URL——是一个字符串,其中包含一个有效的 URL。
data——是一个字符串,指定额外的数据发送到服务器,如果没有 data 需要发送可以为 "None"。目前使用 data 的 HTTP 请求是唯一的。当请求含有 data 参数时,HTTP 的请求为 POST,而不是 GET。
headers——是字典类型,头字典可以作为参数在 request 时直接传入,也可以把每个键和值作为参数调用 add_header() 方法来添加。作为辨别浏览器身份的 User-Agent header 是经常被用来恶搞和伪装的,因为一些 HTTP 服务只允许某些请求来自常见的浏览器而不是脚本,或是针对不同的浏览器返回不同的版本。标准的 headers 组成是 (Content-Length, Content-Type and Host)。
3, urllib2.installopener(opener) 和 urllib2.buildopener([handler, …])
installopener 和 buildopener 这两个方法通常都是在一起用, 也有时候 buildopener 单独使用来得到 OpenerDirector 对象。
installopener 实例化会得到 OpenerDirector 对象用来赋予全局变量 opener。如果想用这个 opener 来调用 urlopen,那么就必须实例化得到 OpenerDirector;这样就可以简单的调用 OpenerDirector.open() 来代替 urlopen()。 build_opener 实例化也会得到 OpenerDirector 对象,其中参数 handlers 可以被 BaseHandler 或他的子类实例化。子类中可以通过以下实例化:ProxyHandler (如果检测代理设置用) 扫描代理会用到,很重要, UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler,HTTPRedirectHandler,FTPHandler,FileHandler,HTTPErrorProcessor。
- import urllib2
- req = urllib2.Request('http://www.python.org/')
- opener=urllib2.build_opener()
- urllib2.install_opener(opener)
- f = opener.open(req)
- 如上使用 urllib2.install_opener()设置 urllib2 的全局 opener。这样后面的使用会很方便,但不能做更细粒度的控制,比如想在程序中使用两个不同的 Proxy 设置等。比较好的做法是不使用 install_opener 去更改全局的设置,而只是直接调用 opener的open 方法代替全局的 urlopen 方法。先写到这,前两个方法还能看懂点,最后一个有点蒙,等以后再研究研究。
Python 之爬取网页时到的问题——urllib2
来源: http://www.bubuko.com/infodetail-2121129.html