当前位置: 首页 > article >正文

网络爬虫学习之httpx的使用

开篇

本文整理自《Python3 网络爬虫实战》,主要是httpx的使用。

笔记整理

使用urllib库requests库的使用,已经可以爬取绝大多数网站的数据,但对于某些网站依然无能为力。
这是因为这些网站强制使用HTTP/2.0协议访问,这时urllib和requests是无法爬取数据的,因为它们只支持HTTP/1.1,不支持HTTP/2.0。

安装

  • 使用下面命令安装httpx
 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package httpx[http2]

基本使用

get

import httpx# 定义重试次数
retry_count = 3
for i in range(retry_count):try:# 设置超时时间为 10 秒response = httpx.get('https://www.httpbin.org/get', timeout=10)print(response.status_code)print(response.headers)print(response.text)breakexcept httpx.RequestError as e:print(f"请求失败,第 {i + 1} 次重试,错误信息: {e}")
else:print("多次重试后仍然失败,请检查网络或服务器状态。")

在这里插入图片描述
如果想要开启对HTTP/2.0的支持,需要手动声明一下:

import httpxclient = httpx.Client(http2=True) 
response = client.get('https://spa16.scrape.center/')
print(response.text)

在这里插入图片描述

其他

上面实现的是GET请求,对于POST请求、PUT请求和DELETE请求来说,实现方式是类似的:

import httpxr = httpx.get('https://www.httpbin.org/get',params={'name': 'germey'})
r = httpx.post('https://www.httpbin.org/post',data={'name': 'germey'})
r = httpx.put('https://www.httpbin.org/put')
r = httpx.delete('https://www.httpbin.org/delete')
r = httpx.patch('https://www.httpbin.org/patch')

Client对象

httpx中的Client对象,可以和requests中的Session对象类比学习。
官方比较推荐的是with as 语句,示例如下:

import httpxwith httpx.Client() as client:response = client.get('https://www.httpbin.org/get')print(response)

这个用法等同于下面这种:

import httpxclient = httpx.Client()
try:response = client.get('https://www.httpbin.org/get')print(response)
finally:client.close()

另外,在声明Client对象时可以指定一些参数,例如headers,这样使用该对象发起的所有请求都会默认带上这些参数配置:

import httpxurl = 'https://www.httpbin.org/headers'
headers = {'User-Agent': 'my-app/0.0.1'}
with httpx.Client(headers=headers) as client:response = client.get(url)print(response.json()['headers']['User-Agent'])

在这里插入图片描述

支持HTTP/2.0

要想开启对HTTP/2.0的支持,需要将http2设置为true

import httpxclient = httpx.Client(http2=True)
response = client.get('https://www.httpbin.org/get')
print(response.text)
print(response.http_version)

在这里插入图片描述

支持异步请求

import httpx
import asyncioasync def fetch(url):async with httpx.AsyncClient(http2=True) as client:response = await client.get(url)print(response.text)if __name__ == '__main__':asyncio.get_event_loop().run_until_complete(fetch('https://www.httpbin.org/get'))

在这里插入图片描述

以上便是本篇笔记的所有整理,希望对您能有所帮助~
感谢阅读!

http://www.lryc.cn/news/2384437.html

相关文章:

  • 无人机桥梁检测效率问题-高精度3D建模及航线规划
  • 想免费使用 AWS 云服务器?注册、验证及开通全攻略
  • 以太联 - Intellinet 闪耀台北 SecuTech 国际安全科技应用博览会
  • Pandas:数据分析中的缺失值检测、加载、设置、可视化与处理
  • 【Linux系列】EVS 与 VBD 的对比
  • 56 在standby待机打通uart调试的方法
  • OceanBase 共享存储:云原生数据库的存储
  • 安卓新建项目时,Gradle下载慢下载如何用国内的镜像
  • 讯联文库开发日志(五)登录拦截校验
  • PCB设计教程【入门篇】——电路分析基础-读懂原理图
  • C语言数据结构
  • 湖北理元理律师事务所债务优化方案:让还款与生活平衡成为可能
  • Java对象内存分配优化教学
  • 精度再升级,可到微米!单位自动换算平米和米
  • 【学习笔记】Sophus (Python) 使用文档
  • 常见算法题目2 - 给定一个字符串,找出其中最长的不重复子串
  • 如何配置jmeter做分布式压测
  • Django 中的 ORM 基础语法
  • C#对象初始化语句:优雅创建对象的黑科技
  • 【计算机网络】TCP如何保障传输可靠性_笔记
  • Robust Kernel Estimation with Outliers Handling for Image Deblurring论文阅读
  • Android Studio 开发环境兼容性检索(AGP / Gradle / Kotlin / JDK)
  • html主题切换小demo
  • AI架构职责分配——支持AI模块的职责边界设计
  • git@gitee.com: Permission denied (publickey). fatal: 无法读取远程仓库
  • CARIS HIPS and SIPS 12.1是专业的多波束水深数据和声呐图像处理软件
  • Docker端口映射与容器互联
  • 在 Ubuntu 24.04 LTS 上 Docker 部署 DB-GPT
  • 使用 Docker 搭建 PyWPS 2.0 服务全流程详解
  • Axure高保真CRM客户关系管理系统原型