赞
踩
虽然Python的标准库中 urllib2 模块已经包含了平常我们使用的大多数功能,但是它的 API 使用起来让人感觉不太好,而 Requests 自称 “HTTP for Humans”,说明使用更简洁方便。Requests 继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
代码如下(示例):
pip install requests
代码如下(示例):
response = requests.get("http://www.baidu.com/")
# 也可以这么写
response = requests.request("get", "http://www.baidu.com/")
添加参数以及请求头参数
一个HTTP接口组成部分包括:请求【请求方法、URL、请求头、请求体】、响应【响应数据】。Requests可以在内部封装的函数中设置HTTP接口所需要的请求数据。
import requests # 发送百度搜索接口的请求 response = requests.get(url="http://www.baidu.com/S", params={"wd":"我爱炸鸡腿"}) # 或者写成 # response = requests.get(url="http://www.baidu.com/S?wd=我爱炸鸡腿") # 打印请求的URL print("打印的URL为:", response.url) # 打印响应状态码 print("响应状态码为:", response.status_code) # 打印cookie print("百度接口返回的cookie为:", response.cookies) # 打印响应头 print("百度接口返回的响应头为:", response.headers) # 打印文本格式响应数据 print("百度接口返回的文本格式响应数据为:", response.text) #打印字节码响应数据 print("字节码数据为:", response.content) # 字节码数据编码,如果我们打印 text 文本 发现报错,此时需要用 decode 方法进行解码 print("给字节码数据进行编码操作:", response.content.decode("utf-8")) # 打印编码:假设互联网传输数据的格式是 iso-8859-1,用 utf-8 解析 iso-8859-1 的数据,是无法解析的 print("编码为:", response.encoding) # 打印json数据, # 打印规则:首先必须是 Json 数据结构才能够打印,如果不是 json 数据结构,会抛出 JsonDecodeError 错误 print(response.json()) # 访问百度接口返回的数据是 html 结构数据,并不是 json 结构
import json
# JSON格式字符串
json_data = '{"name": "Tom", "age": 18}'
# 使用json.loads()方法将json字符串转化为Python字典
data_dict = json.loads(json_data)
# 输出转换后的字典
print(data_dict)
# 输出:{'name': 'Tom', 'age': 18}
下面是一个从文件中读取JSON数据并转化为Python字典的示例:
import json
# 从文件中读取JSON数据
with open('data.json', 'r') as f:
json_data = json.load(f)
# 输出转换后的字典
print(json_data)
response = requests.post("http://www.baidu.com/", data = data)
如果需要使用代理,你可以通过为任意请求方法提供 proxies 参数来配置单个请求:
import requests
# 根据协议类型,选择不同的代理
proxies = {
"http": "http://xx.xx.xx.xx:10086",
"https": "http://xx.xx.xx.xx:10086",
}
response = requests.get("http://www.baidu.com", proxies = proxies)
print response.text
私密代理
import requests
# 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
proxy = { "http": "xx_xx:sry9r@61.xx.163.xx:10086" }
response = requests.get("http://www.baidu.com", proxies = proxy)
print response.text
HTTPS代理
import requests
url = 'https://www.example.com'
proxies = {'https': 'https://10.10.1.10:3128'}
response = requests.get(url, proxies=proxies)
print(response.text)
在上面的示例中,我们使用requests库发送了一个GET请求到https://www.example.com,并使用了一个HTTPS代理服务器,代理服务器的IP地址为10.10.1.10,端口号为3128,并打印了响应的文本内容。
使用Socks代理
import requests
url = 'https://www.example.com'
proxies = {'http': 'socks5://10.10.1.10:1080', 'https': 'socks5://10.10.1.10:1080'}
response = requests.get(url, proxies=proxies)
print(response.text)
如果一个响应中包含了cookie,那么我们可以利用 cookies参数拿到:
import requests
response = requests.get("http://www.baidu.com/")
# 7. 返回CookieJar对象:
cookiejar = response.cookies
# 8. 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print cookiejar
print cookiedict
在 requests 里,session对象是一个非常常用的对象,这个对象代表一次用户会话:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开。
会话能让我们在跨请求时候保持某些参数,比如在同一个 Session 实例发出的所有请求之间保持 cookie 。
import requests # 1. 创建session对象,可以保存Cookie值 ssion = requests.session() # 2. 处理 headers headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"} # 3. 需要登录的用户名和密码 data = {"email":"mr_mao_hacker@163.com", "password":"alarmchime"} # 4. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在ssion里 ssion.post("http://www.renren.com/PLogin.do", data = data) # 5. ssion包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面 response = ssion.get("http://www.renren.com/410043129/profile") # 6. 打印响应内容 print response.text
Requests也可以为HTTPS请求验证SSL证书:
要想检查某个主机的SSL证书,你可以使用 verify 参数(也可以不写)
import requests
response = requests.get("https://www.baidu.com/", verify=True)
# 也可以省略不写
# response = requests.get("https://www.baidu.com/")
print r.text
r = requests.get("https://www.12306.cn/mormhweb/", verify = False)
如果HTTP响应是JSON格式的,我们可以使用json库解析响应,并获取某个字段的值。以下是示例代码的步骤:
import requests
import json
# 发送HTTP请求并解析响应
response = requests.get('http://example.com/api')
data = json.loads(response.text)
field_value = data['field']
如果HTTP响应不是JSON格式的,我们可以使用正则表达式提取某个字段的值。以下是示例代码的步骤:
import requests
import json
# 发送HTTP请求并提取字段值
response = requests.get('http://example.com')
pattern = re.compile(r'<title>(.*?)</title>')
field_value = re.search(pattern, response.text).group(1)
在上面的示例中,我们使用requests库发送HTTP GET请求,并使用正则表达式提取某个字段的值。我们使用re.compile方法编译正则表达式,并使用re.search方法搜索响应文本。我们使用group方法获取匹配的字段值。
如果HTTP响应是HTML格式的,我们可以使用BeautifulSoup库解析响应,并获取某个字段的值。以下是示例代码的步骤:
import requests
import json
# 发送HTTP请求并解析响应
response = requests.get('http://example.com')
soup = BeautifulSoup(response.text, 'html.parser')
field_value = soup.find('title').text
在上面的示例中,我们使用requests库发送HTTP GET请求,并使用BeautifulSoup库解析响应。我们使用find方法查找HTML标签,并使用text属性获取标签文本。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。