urllib和urllib2的区别和使用
2016-10-10 13:11
120 查看
Python的urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。他们两个最显著的差异如下:
urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL。这意味着,你不能伪装你的用户代理字符串等。
urllib模块可以提供进行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具有这样的功能。这就是urllib与urllib2经常在一起使用的原因。
常用方法和类
urllib2.urlopen(url[, data][, timeout])
url参数可以是一个字符串url,也可以是一个Request对象。
对于可选的参数timeout,阻塞操作以秒为单位,如尝试连接(如果没有指定,将使用设置的全局默认timeout值)。实际上这仅适用于HTTP,HTTPS和FTP连接。
timeout参数在urlopen中传入。
Timeout 设置
urlopen 方法第三个参数就是 timeout 的设置,可以设置等待多久超时,为了解决一些网站实在响应过慢而造成的影响。
例如下面的代码,如果第二个参数 data 为空那么要特别指定是 timeout 是多少,写明形参,如果data已经传入,则不必声明。
urllib2.Request类
class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
URL——是一个字符串,其中包含一个有效的URL。
data——是一个字符串,指定额外的数据发送到服务器,如果没有data需要发送可以为“None”。目前使用data的HTTP请求是唯一的。当请求含有data参数时,HTTP的请求为POST,而不是GET。数据应该是缓存在一个标准的application/x-www-form-urlencoded格式中。urllib.urlencode()函数用映射或2元组,返回一个这种格式的字符串。
headers——是字典类型,头字典可以作为参数在request时直接传入,也可以把每个键和值作为参数调用add_header()方法来添加。
origin_req_host——是RFC2965定义的源交互的request-host。默认的取值是cookielib.request_host(self)。这是由用户发起的原始请求的主机名或IP地址。例如,如果请求的是一个HTML文档中的图像,这应该是包含该图像的页面请求的request-host。
unverifiable ——代表请求是否是无法验证的,它也是由RFC2965定义的。默认值为false。一个无法验证的请求是,其用户的URL没有足够的权限来被接受。例如,如果请求的是在HTML文档中的图像,但是用户没有自动抓取图像的权限,unverifiable的值就应该是true。
urllib2可以接受一个Request对象,并以此可以来设置一个URL的headers,但是urllib只接收一个URL。这意味着,你不能伪装你的用户代理字符串等。
urllib模块可以提供进行urlencode的方法,该方法用于GET查询字符串的生成,urllib2的不具有这样的功能。这就是urllib与urllib2经常在一起使用的原因。
常用方法和类
urllib2.urlopen(url[, data][, timeout])
url参数可以是一个字符串url,也可以是一个Request对象。
对于可选的参数timeout,阻塞操作以秒为单位,如尝试连接(如果没有指定,将使用设置的全局默认timeout值)。实际上这仅适用于HTTP,HTTPS和FTP连接。
timeout参数在urlopen中传入。
Timeout 设置
urlopen 方法第三个参数就是 timeout 的设置,可以设置等待多久超时,为了解决一些网站实在响应过慢而造成的影响。
例如下面的代码,如果第二个参数 data 为空那么要特别指定是 timeout 是多少,写明形参,如果data已经传入,则不必声明。
import urllib2 response = urllib2.urlopen('http://www.baidu.com', timeout=10)
import urllib2 response = urllib2.urlopen('http://www.baidu.com',data, 10)
urllib2.Request类
class urllib2.Request(url[, data][, headers][, origin_req_host][, unverifiable])
URL——是一个字符串,其中包含一个有效的URL。
data——是一个字符串,指定额外的数据发送到服务器,如果没有data需要发送可以为“None”。目前使用data的HTTP请求是唯一的。当请求含有data参数时,HTTP的请求为POST,而不是GET。数据应该是缓存在一个标准的application/x-www-form-urlencoded格式中。urllib.urlencode()函数用映射或2元组,返回一个这种格式的字符串。
import urllib import urllib2 url = 'http://www.someserver.com/cgi-bin/register.cgi' values = {'name' : 'Michael Foord', 'location' : 'Northampton', 'language' : 'Python' }#values字典 data = urllib.urlencode(values)#urrllib.urlencode()函数用映射或二元组,返回标准格式的字符串 req = urllib2.Request(url, data)#传入data response = urllib2.urlopen(req) the_page = response.read()
headers——是字典类型,头字典可以作为参数在request时直接传入,也可以把每个键和值作为参数调用add_header()方法来添加。
import urllib import urllib2 url = 'http://www.someserver.com/cgi-bin/register.cgi' user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' values = {'name' : 'Michael Foord', 'location' : 'Northampton', 'language' : 'Python' } headers = { 'User-Agent' : user_agent }##伪装主机的headers data = urllib.urlencode(values) req = urllib2.Request(url, data, headers)#headers传入Request类 response = urllib2.urlopen(req) the_page = response.read()
origin_req_host——是RFC2965定义的源交互的request-host。默认的取值是cookielib.request_host(self)。这是由用户发起的原始请求的主机名或IP地址。例如,如果请求的是一个HTML文档中的图像,这应该是包含该图像的页面请求的request-host。
unverifiable ——代表请求是否是无法验证的,它也是由RFC2965定义的。默认值为false。一个无法验证的请求是,其用户的URL没有足够的权限来被接受。例如,如果请求的是在HTML文档中的图像,但是用户没有自动抓取图像的权限,unverifiable的值就应该是true。
相关文章推荐
- httplib、urllib和urllib2的区别及用法
- python urllib 和urllib2的区别
- Python模块之urllib和urllib2结合使用
- urllib和urllib2之间的区别
- urllib,urllib2和 urllib3的区别
- Python:urllib和urllib2的区别
- urllib和urllib2的区别
- Python库urllib与urllib2主要区别分析
- Python中urllib和urllib2的区别与联系
- python的httplib、urllib和urllib2的区别及应用
- python urllib和urllib2 区别
- python爬虫--urllib2和urllib区别
- python的httplib、urllib和urllib2的区别及用
- 从0开始学python:urllib和urllib2的区别
- [python]-urllib2和urllib模块使用
- Request和Urllib2使用代理ip的区别
- urllib,urllib2和 urllib3的区别
- python的httplib、urllib和urllib2的区别及用
- Python――深入理解urllib、urllib2及requests(requests不建议使用?)
- urllib和urllib2的区别