1、urllib、urllib2、urllib3和requests 区别
在Python 2标准库中,同时存在两个HTTP库。尽管名称相似,但它们是不相关的:它们有不同的设计和不同的实现。
urllib是最初的Python HTTP客户端,添加到Python 1.2的标准库中。urllib的早期文档可以在Python 1.4中找到。
urllib2是一个更强大的HTTP客户端,在Python 1.6中添加,为了替代urllib:
Python 3标准库有一个新的urllib,它是旧模块的合并/重构/重写版本。
urllib3是一个第三方包(即不在CPython的标准库中)。尽管有这个名字,但它与标准库包无关,将来也不打算将它包括在标准库中。
requests内部使用urllib3,但它的目标是一个更容易使用的API。urllib和urllib2都是Python模块,处理URL请求相关的事情,但提供不同的功能。urllib2可以接受一个Request对象来设置URL请求的头部,urllib只接受一个URL。urllib提供了用于生成GET查询字符串的urlencode方法,但urllib2没有。也是urllib经常与urllib2一起使用的原因之一。
Requests是一个简单易用的用Python编写的HTTP库。Python请求自动编码参数,使用只需要将它们作为简单的参数传递,不需要在urllib的情况下,在传递参数之前,使用urllib.encode()方法来编码参数。自动将响应解码为Unicode。requests也有更方便的错误处理。如果身份验证失败,urllib2将引发一个urllib2. URLError,而请求将返回一个正常的响应对象。只需要通过 response.ok来判断请求是否成功。requests的底层实现是Python标准库中的urllib,requests从Python2.6一直到Python3的版本都可以使用,requests可以兼容Python2和Python3。
2、urllib 和 urllib2的使用
1)GET
# coding=utf-8import urllibimport urllib2 data = {} data['query'] = 'Python' values = urllib.urlencode(data)print values url = 'https://www.sogou.com/tx?'full_url = url + '?' + values response = urllib2.urlopen(full_url,timeout=30)page = response.read()print(page)
2)POST
# coding=utf-8import urllibimport urllib2import time url = 'https://fanyi.qq.com/api/translate'time_str = str(int(1000 * time.time()))user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0'values = { "source": "zh", "target": "en", "sourceText": "发送 POST 请求", "sessionUuid ": "translate_uuid" + time_str }headers = { 'User-Agent' : user_agent }data = urllib.urlencode(values)req = urllib2.Request(url, data, headers)response = urllib2.urlopen(req,timeout=30)page = response.read()print(page)
3、requests的使用
1)GET
# coding=utf-8import requests url = "https://www.sogou.com/tx?"key_dict = {"query": "python"}headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",}response = requests.get(url, params=key_dict, headers=headers, timeout=30)print(response.text)
2)POST
# coding=utf-8import requestsimport timeimport json url = "https://fanyi.qq.com/api/translate"headers = { "Origin": "https://fanyi.qq.com", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",}time_str = str(int(1000 * time.time()))key_dict = { "source": "zh", "target": "en", "sourceText": "发送 POST 请求", "sessionUuid ": "translate_uuid" + time_str }response = requests.post(url, data=key_dict, headers=headers)print(response.status_code)result = response.json()print(result['translate']['records'][0]['targetText'])