写点什么

你肯定听说过 requests,但你知道 2022 年有一个比 requests 还牛的爬虫库吗?

作者:梦想橡皮擦
  • 2022 年 5 月 13 日
  • 本文字数:1959 字

    阅读完需:约 6 分钟


⛳️ 准备工作

任何模块学习前,都需要执行下述两个步骤


  1. 模块简介

  2. 模块安装

  3. 帮助手册的准备


HTTPX 是最近接触到的一个 Python 请求模块,其特点如下所示


  1. 兼容 requests,语法类似

  2. 支持 HTTP/1.1 和 HTTP/2

  3. 严格超时设置

  4. 全类型注释

  5. ……


目前最新的版本是 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)
复制代码

⛳️ 支持异步调用

之前我们使用 asyncioaiohttp 实现异步调用,有了 httpx 之后,可以直接使用其自带的异步调用代码,具体如下所示


import asyncioimport 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 类实现,可以细致设置 connectreadwritepool 超时时间。


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()
复制代码


📣📣📣📣📣📣🌻本文如果发现错误,欢迎在评论区中指正哦💗<a href="#"><<<上一篇</a> 📖<a href="#">系列目录</a> <a href="#">下一篇>>></a>


发布于: 刚刚阅读数: 3
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
你肯定听说过requests,但你知道2022年有一个比 requests 还牛的爬虫库吗?_5月月更_梦想橡皮擦_InfoQ写作社区