1.概述:
有些网站强制使用了HTTP/2.0,而urllib和requests库都只支持HTTP/1.1,不支持HTTP/2.0,此时使用这两个库都无法抓取数据。
就需要使用支持HTTP/2.0的请求库,例如httpx库、hyper库。
使用以下命令,这样既安装了httpx库,又安装了httpx库中对HTTP/2.0的支持模块。pip install httpx[http2]
更多内容可以查看官方文档。
2.基本用法:
httpx库中一些基本用法与requests库非常相似,因此很多API的也很相似。
属性或方法 | 说明 |
---|---|
status_code | 状态码 |
text | 响应体的文本内容 |
content | 响应体的二进制内容 |
headers | 请求头 |
json | 调用该方法可以将文本结果转化为json对象 |
import httpx
r = httpx.get('https://httpbin.org/get')
print(r.status_code)
print('-------------')
print(r.headers)
print('-------------')
print(r.text)
运行结果如下:
200
-------------
Headers({'date': 'Thu, 21 Apr 2022 12:57:56 GMT', 'content-type': 'application/json', 'content-length': '309', 'connection': 'keep-alive', 'server': 'gunicorn/19.9.0', 'access-control-allow-origin': '*', 'access-control-allow-credentials': 'true'})
-------------
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Host": "httpbin.org",
"User-Agent": "python-httpx/0.22.0",
"X-Amzn-Trace-Id": "Root=1-626154d4-69a77c474b9ac4bd254c493e"
},
"origin": "101.86.213.228",
"url": "https://httpbin.org/get"
}
params
参数:将字典或字节序列,作为参数增加到url中
import httpx
# 字典对象
params_1 = {'key1':'value1' , 'key2':'value2'}
# value值也可以是列表格式
params_2 = {'key1': 'value1', 'key2': ['value2', 'value3']}
r_1 = httpx.get('https://httpbin.org/get' , params=params_1)
print(r_1.url)
print('-------------')
r_2 = httpx.get('https://httpbin.org/get' , params=params_2)
print(r_2.url)
运行结果如下:
https://httpbin.org/get?key1=value1&key2=value2
-------------
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
- json()方法将文本结果转化为json对象
import httpx
r = httpx.get('https://httpbin.org/get')
print(r.json())
更多内容可以查看官方文档
3.开启对HTTP/2.0的支持:
http默认是不开启对HTTP/2.0的支持,默认使用的是HTTP/1.1,需要手动声明才可以。
需要先声明一个Client对象,然后将http2参数设置为True,这样便开启了对HTTP/2.0的支持。
import httpx
client = httpx.Client(http2=True)
r = client.get(url)
4.Client对象
开启对HTTP/2.0的支持时,使用到了Client对象,官方比较推荐使用with as
语句的方式。
import httpx
with httpx.Client() as client:
r = client.get(url)
print(r.text)
在声明Client对象时,可以指定一些参数,这样发起请求时会默认带上这些参数信息。
import httpx
url = 'https://httpbin.org/get'
headers = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
with httpx.Client(headers=headers) as client:
r = client.get(url)
print(r.text)
运行结果如下:
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate, br",
"Host": "httpbin.org",
"User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)",
"X-Amzn-Trace-Id": "Root=1-62615aa4-7a798daa607ad3903747bdde"
},
"origin": "101.86.213.228",
"url": "https://httpbin.org/get"
}
可以看到,headers已经赋值成功。
更多关于Client对象的用法可以参考官方文档