2022年一个比requests更时髦的爬虫库,一学就会

Posted 梦想橡皮擦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022年一个比requests更时髦的爬虫库,一学就会相关的知识,希望对你有一定的参考价值。

📢📢📢📢📢📢
哈喽!大家好,我是 【梦想橡皮擦】,10年产研经验,致力于 Python 相关技术栈传播💗
🌻本文如果觉得不错,动动小手点个赞赞吧👍
🌻本文如果发现错误,欢迎在评论区中指正哦💗
👍 技术博客日更者,我喜欢写文章,如果任意一篇文章对你有帮助,就挺好的~ 👍
📣📣📣📣📣📣

欢迎大家订阅专栏 ⭐️ ⭐️ 《Python爬虫120》⭐️ ⭐️

📆 最近更新:2022年3月25日,橡皮擦的第 597 篇原创博客

文章目录


本篇博客是《Python爬虫120》专栏中的模块篇,核心要进行展示的模块是 httpx ,本文将对其进行细致的拆分讲解。

⛳️ 准备工作

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

  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 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 类实现,可以细致设置 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()

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

欢迎大家订阅专栏 ⭐️ ⭐️ 《Python爬虫120》⭐️ ⭐️

以上是关于2022年一个比requests更时髦的爬虫库,一学就会的主要内容,如果未能解决你的问题,请参考以下文章

比 requests 更强大 Python 库,让你的爬虫效率提高一倍

比 requests 更强大 Python 库,让你的爬虫效率提高一倍

python爬虫之reuqests库,及基本使用

python爬虫之reuqests库,及基本使用

python爬虫之reuqests库,及基本使用

「2022 年」崔庆才 Python3 爬虫教程 - 代理的使用方法有哪些?