2022年一个比requests更时髦的爬虫库,一学就会
Posted 梦想橡皮擦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022年一个比requests更时髦的爬虫库,一学就会相关的知识,希望对你有一定的参考价值。
📢📢📢📢📢📢
哈喽!大家好,我是 【梦想橡皮擦】,10年产研经验,致力于 Python 相关技术栈传播💗
🌻本文如果觉得不错,动动小手点个赞赞吧👍
🌻本文如果发现错误,欢迎在评论区中指正哦💗
👍 技术博客日更者,我喜欢写文章,如果任意一篇文章对你有帮助,就挺好的~ 👍
📣📣📣📣📣📣
欢迎大家订阅专栏 ⭐️ ⭐️ 《Python爬虫120》⭐️ ⭐️
📆 最近更新: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()
欢迎大家订阅专栏 ⭐️ ⭐️ 《Python爬虫120》⭐️ ⭐️
以上是关于2022年一个比requests更时髦的爬虫库,一学就会的主要内容,如果未能解决你的问题,请参考以下文章
比 requests 更强大 Python 库,让你的爬虫效率提高一倍