2024-04-24 17:08:13 发布
网友
在Python中,^{}、urllib2、^{}和^{}模块之间有什么区别?为什么有三个?他们似乎做了同样的事。。。
urllib2
urllib和urllib2都是Python模块,它们执行URL请求相关的内容,但提供不同的功能。
1)urllib2可以接受请求对象来设置URL请求的头,urllib只接受URL。
2)urllib提供用于生成GET查询字符串的urlencode方法,urllib2没有这样的函数。这就是为什么urllib经常与urllib2一起使用的原因之一。
Requests-Requests'是一个用Python编写的简单易用的HTTP库。
1)Python请求会自动对参数进行编码,因此您只需将它们作为简单参数传递,这与urllib的情况不同,在urllib的情况下,您需要在传递参数之前使用urllib.encode()方法对参数进行编码。
2)它自动将响应解码为Unicode。
3)请求也有更方便的错误处理。如果身份验证失败,urllib2将引发urllib2.URLError,而请求将按预期返回正常的响应对象。您只需通过布尔值响应查看请求是否成功即可。确定
urllib2提供了一些额外的功能,即urlopen()函数可以允许您指定头(通常您在过去必须使用httplib,这要详细得多。)更重要的是,urllib2提供了Request类,它允许执行请求的更声明性方法:
urlopen()
Request
r = Request(url='http://www.mysite.com') r.add_header('User-Agent', 'awesome fetcher') r.add_data(urllib.urlencode({'foo': 'bar'}) response = urlopen(r)
注意urlencode()只在urllib中,而不是urllib2中。
urlencode()
在urllib2中也有用于实现更高级URL支持的处理程序。简而言之,除非您使用的是遗留代码,否则您可能希望使用urllib2中的URL打开器,但对于某些实用程序函数,您仍然需要导入urllib。
奖励答案 使用Google App Engine,您可以使用httplib、urllib或urllib2中的任何一个,但它们都只是Google的URL获取API的包装器。也就是说,您仍然受到相同的限制,例如端口、协议和允许的响应长度。不过,您可以像检索HTTP url那样使用库的核心。
我知道已经说过了,但我强烈建议使用^{}Python包。
如果您使用过python以外的语言,您可能会认为urllib和urllib2易于使用,代码不多,而且功能强大,这就是我过去的想法。但是requests包是如此的有用和简短,以至于每个人都应该使用它。
urllib
requests
首先,它支持一个完全restful的API,并且非常简单:
import requests resp = requests.get('http://www.mywebsite.com/user') resp = requests.post('http://www.mywebsite.com/user') resp = requests.put('http://www.mywebsite.com/user/put') resp = requests.delete('http://www.mywebsite.com/user/delete')
不管GET/POST是不是,您再也不必对参数进行编码,它只需要一个字典作为参数就可以了:
userdata = {"firstname": "John", "lastname": "Doe", "password": "jdoe123"} resp = requests.post('http://www.mywebsite.com/user', data=userdata)
另外,它甚至还有一个内置的JSON解码器(同样,我知道json.loads()不太好写,但这确实很方便):
json.loads()
resp.json()
或者,如果您的响应数据只是文本,请使用:
resp.text
这只是冰山一角。这是来自请求站点的功能列表:
urllib和urllib2都是Python模块,它们执行URL请求相关的内容,但提供不同的功能。
1)urllib2可以接受请求对象来设置URL请求的头,urllib只接受URL。
2)urllib提供用于生成GET查询字符串的urlencode方法,urllib2没有这样的函数。这就是为什么urllib经常与urllib2一起使用的原因之一。
Requests-Requests'是一个用Python编写的简单易用的HTTP库。
1)Python请求会自动对参数进行编码,因此您只需将它们作为简单参数传递,这与urllib的情况不同,在urllib的情况下,您需要在传递参数之前使用urllib.encode()方法对参数进行编码。
2)它自动将响应解码为Unicode。
3)请求也有更方便的错误处理。如果身份验证失败,urllib2将引发urllib2.URLError,而请求将按预期返回正常的响应对象。您只需通过布尔值响应查看请求是否成功即可。确定
urllib2提供了一些额外的功能,即
urlopen()
函数可以允许您指定头(通常您在过去必须使用httplib,这要详细得多。)更重要的是,urllib2提供了Request
类,它允许执行请求的更声明性方法:注意
urlencode()
只在urllib中,而不是urllib2中。在urllib2中也有用于实现更高级URL支持的处理程序。简而言之,除非您使用的是遗留代码,否则您可能希望使用urllib2中的URL打开器,但对于某些实用程序函数,您仍然需要导入urllib。
奖励答案 使用Google App Engine,您可以使用httplib、urllib或urllib2中的任何一个,但它们都只是Google的URL获取API的包装器。也就是说,您仍然受到相同的限制,例如端口、协议和允许的响应长度。不过,您可以像检索HTTP url那样使用库的核心。
我知道已经说过了,但我强烈建议使用^{} Python包。
如果您使用过python以外的语言,您可能会认为
urllib
和urllib2
易于使用,代码不多,而且功能强大,这就是我过去的想法。但是requests
包是如此的有用和简短,以至于每个人都应该使用它。首先,它支持一个完全restful的API,并且非常简单:
不管GET/POST是不是,您再也不必对参数进行编码,它只需要一个字典作为参数就可以了:
另外,它甚至还有一个内置的JSON解码器(同样,我知道
json.loads()
不太好写,但这确实很方便):或者,如果您的响应数据只是文本,请使用:
这只是冰山一角。这是来自请求站点的功能列表:
相关问题 更多 >
编程相关推荐