【月更19篇】2022年一个比requests更时髦的爬虫库,一学就会
【摘要】 📢📢📢📢📢📢哈喽!大家好,我是 【梦想橡皮擦】,10年产研经验,致力于 Python 相关技术栈传播💗🌻本文如果觉得不错,动动小手点个赞赞吧👍🌻本文如果发现错误,欢迎在评论区中指正哦💗👍 技术博客日更者,我喜欢写文章,如果任意一篇文章对你有帮助,就挺好的~ 👍📣📣📣📣📣📣📆 最近更新:2022年3月25日,橡皮擦的第 597 篇原创博客本篇博客是《Py...
📢📢📢📢📢📢
哈喽!大家好,我是 【梦想橡皮擦】,10年产研经验,致力于 Python 相关技术栈传播💗
🌻本文如果觉得不错,动动小手点个赞赞吧👍
🌻本文如果发现错误,欢迎在评论区中指正哦💗
👍 技术博客日更者,我喜欢写文章,如果任意一篇文章对你有帮助,就挺好的~ 👍
📣📣📣📣📣📣
📆 最近更新:2022年3月25日,橡皮擦的第 597 篇原创博客
本篇博客是《Python爬虫120》专栏中的模块篇,核心要进行展示的模块是 httpx
,本文将对其进行细致的拆分讲解。
⛳️ 准备工作
任何模块学习前,都需要执行下述两个步骤
- 模块简介
- 模块安装
- 帮助手册的准备
HTTPX 是最近接触到的一个 Python 请求模块,其特点如下所示
- 兼容 requests,语法类似
- 支持 HTTP/1.1 和 HTTP/2
- 严格超时设置
- 全类型注释
- ……
目前最新的版本是 0.22 版本,官方简介如下
HTTPX is a fully featured HTTP client library for Python 3. It includes an integrated command line client, has support for both HTTP/1.1 and HTTP/2, and provides both sync and async APIs.
模块安装使用如下命令即可
pip install httpx
官网与项目地址为
⛳️ 简单上手
接下来编写一个采集 example
网站的案例,代码如下所示
import httpx
r = httpx.get('https://www.example.org/')
print(r) # 响应对象
print(r.status_code) # 状态码
print(r.text) # 响应内容
print(r.content) # 响应二进制
# print(r.json()) # 响应JSON
这样看起来与 requests
模块用法非常类似。
接下来我们拿 `` 站点做一下 HTTP 动词相关测试
import httpx
r = httpx.put('https://httpbin.org/put', data={'name': '橡皮擦'})
print("*** put ***")
print(r.text)
r = httpx.delete('https://httpbin.org/delete')
print("*** delete ***")
print(r.text)
r = httpx.head('https://httpbin.org/get')
print("*** head ***")
print(r)
r = httpx.options('https://httpbin.org/get')
print("*** options ***")
print(r)
⛳️ get 请求携带参数
既然类似 requests,那我们直接模拟写一下基本使用,同时下述代码也增加了请求头配置。
import httpx
get_param_data = {'name': '梦想橡皮擦'}
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) ……'
}
response = httpx.get(url='http://www.httpbin.org/get', params=get_param_data, headers=headers)
print(response.text)
⛳️ 类 requests 的Session 用法
在 httpx
中也存在 Session 类似的用法,测试代码如下所示:
import httpx
client = httpx.Client() # 类 requests.Session()
try:
r = client.get(url='http://www.httpbin.org/get')
print(r.text)
finally:
client.close()
同样也可以使用 with 上下文语句进行展示
import httpx
client = httpx.Client() # 类 requests.Session()
with httpx.Client() as client:
r = client.get('https://example.com')
print(r)
⛳️ 支持异步调用
之前我们使用 asyncio
和 aiohttp
实现异步调用,有了 httpx
之后,可以直接使用其自带的异步调用代码,具体如下所示
import asyncio
import httpx
async def main():
async with httpx.AsyncClient() as client:
resp = await client.get('http://httpbin.org/get')
assert resp.status_code == 200
html = resp.text
print(html)
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(main())
finally:
loop.close()
异步请求的发送使用 httpx.AsyncClient()
。
⛳️ 请求中的其它参数
自定义 headers
在请求中增加头文件配置
headers = {"key":"value"}
r = httpx.get("http://httpbin.org/get", headers=header)
超时时间
httpx
默认超时时间为 5 秒,通过 timeout 可以进行修改
r = httpx.get("http://httpbin.org/get", timeout=3)
该时间还可以通过 httpx.Timeout
类实现,可以细致设置 connect
, read
, write
, pool
超时时间。
timeout = httpx.Timeout(5,read=10)
SSL证书
使用参数 verify
进行证书设置,也可以使用标准库 ssl
进行设置。
当然禁用SSL验证与 requests
一致,使用下述代码
httpx.get('http://httpbin.org/get', verify=False)
⛳️ 参数传递
查询参数
params = {"name":"橡皮擦", "age":18}
httpx.get('http://httpbin.org/get', params=params)
Form表单
data = {"name":"橡皮擦", "age":18}
httpx.get('http://httpbin.org/get', data = data)
文件上传
f = open('a.txt', 'rb')
files = {'file': f}
response = httpx.post('http://xxxxx', files=files)
f.close()
JSON传递
data = {"name":"橡皮擦", "age":18}
response = httpx.post('http://xxxxx', json=data )
二进制数据
content = b'橡皮擦'
response = httpx.post('http://xxxxx', content=content)
⛳️ 响应内容
httpx
模块返回的响应请求有
文本响应
response.text
二进制响应
response.content
JSON响应
response.json()
流式响应
迭代字节
response.iter_bytes()
迭代文本
response.iter_text()
迭代行
response.iter_lines()
原始字节
response.iter_raw()
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)