Python urllib、urllib2、urllib3、requests 区别及使用

Python后台执行Get和Post请求,Python2中使用urllib、urllib2模块,Python3中使用urllib3和requests模块,本文主要介绍Python urllib、urllib2、urllib3和requests 之间区别及使用,以及相关的示例代码。

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-8
import urllib
import 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-8
import urllib
import urllib2
import 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-8
import 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-8
import requests
import time
import 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'])

推荐阅读
cjavapy编程之路首页