网络爬虫学习之httpx的使用

news2025/5/24 7:11:00

开篇

本文整理自《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)
        break
    except httpx.RequestError as e:
        print(f"请求失败,第 {i + 1} 次重试,错误信息: {e}")
else:
    print("多次重试后仍然失败,请检查网络或服务器状态。")

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

import httpx

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

在这里插入图片描述

其他

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

import httpx

r = 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 httpx

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

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

import httpx

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

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

import httpx

url = '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 httpx

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

在这里插入图片描述

支持异步请求

import httpx
import asyncio

async 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.coloradmin.cn/o/2384437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无人机桥梁检测效率问题-高精度3D建模及航线规划

无人机桥梁检测效率问题-高精度3D建模及航线规划 无人机桥梁检测的效率分析 结论-并没有提升效率 飞行任务制定步骤繁琐且续航限制 需要首先对大桥建立高精度的3D建模,根据任务制定无人机的飞行路径以及动作,商用无人机续航通常仅30-40分钟&#xff0c…

想免费使用 AWS 云服务器?注册、验证及开通全攻略

拥有一台 AWS 免费云服务器,可以轻松搭建个人网站、博客或部署 ChatGPT 等 AI 服务。本文详解如何 注册 AWS 账号、完成 信用卡验证,并在 AWS 控制台中 开通 EC2 实例,享受长达 12 个月的免费额度。 提示: 国内信用卡及银联借记卡…

Pandas:数据分析中的缺失值检测、加载、设置、可视化与处理

本文目录: 一、检测数据集中的缺失值(一)缺失值的判断规则:(二)代码如下: 二、缺失值加载处理&缺失值设置(一)缺失值加载处理(二)缺失值设置 …

【Linux系列】EVS 与 VBD 的对比

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

56 在standby待机打通uart调试的方法

修改点如下: 一,进入standby保证uart通 1, 去掉串口进入休眠RT_DEVICE_CTRL_SUSPEND:关闭uart,保证BSP_IO_Power_Down函数执行完前,串口都可以打印,和通过SifliUsartServer工具串口连接,并debug死机问题&…

OceanBase 共享存储:云原生数据库的存储

目录 探会——第三届 OceanBase 开发者大会 重磅发布:OceanBase 4.3 开发者生态全面升级 实战演讲:用户案例与行业落地 OceanBase 共享存储架构解析 什么是共享存储架构? 云原生数据库的架构 性能、弹性与多云的统一 为何OceanBase能…

安卓新建项目时,Gradle下载慢下载如何用国内的镜像

方法 1:修改 gradle-wrapper.properties 使用国内镜像 Gradle 的下载地址可以在 gradle-wrapper.properties 中修改,替换为国内镜像地址(如阿里云、腾讯云等)。 步骤 打开项目中的 gradle-wrapper.properties 文件(路…

讯联文库开发日志(五)登录拦截校验

零 在此之前,由于主播一直缺乏session,这次两个小时的寻找bug之旅也让我受益颇多 罪魁祸首:key值写错了,导致一直报错,不过这也让我了解了更多关于session的k-v结构 参数校验 我们需要在全局拦截器注解里面加两个方…

PCB设计教程【入门篇】——电路分析基础-读懂原理图

前言 本教程基于B站Expert电子实验室的PCB设计教学的整理,为个人学习记录,旨在帮助PCB设计新手入门。所有内容仅作学习交流使用,无任何商业目的。若涉及侵权,请随时联系,将会立即处理 目录 前言 一、原理图核心要素…

C语言数据结构

单链表 头文件&#xff1a;lin.h #ifndef __LINK_H__ #define __LINK_H__ #include <stdio.h> #include <stdlib.h> typedef int DataType; /*节点数据类型*/ typedef struct node { DataType data; //数据域 struct node *pNext; …

精度再升级,可到微米!单位自动换算平米和米

CAD图纸单位怎么看&#xff1f;精度怎么调&#xff1f; 长度测出来是什么单位&#xff1f; 面积一大串怎么回事&#xff1f; 坐标小数点位置不对怎么办&#xff1f; 点击直接获取CAD快速看图 首先说原理 CAD图纸在绘制时&#xff0c;一般情况下单位是&#xff1a; 长度---…

常见算法题目2 - 给定一个字符串,找出其中最长的不重复子串

算法题目2 - 给定一个字符串&#xff0c;找出其中最长的不重复子串 1. 问题描述 给定一个字符串&#xff0c;输出其最长的不重复子串&#xff0c;例如&#xff1a; String str "ababc"; 输出&#xff1a; abc以下根据两种搜索算法。 2. 算法解决 2.1 暴力循环法…

如何配置jmeter做分布式压测

问&#xff1a;为何需要做分布式 答&#xff1a;当我们本地机器jmeter进行压测时&#xff0c;单台JMeter机器通常无法稳定生成2000 QPS&#xff08;受限于CPU、内存、网络带宽&#xff09;&#xff0c;本地端口耗尽&#xff1a;操作系统可用的临时端口&#xff08;Ephemeral P…

Django 中的 ORM 基础语法

深入剖析 Django 中的 ORM 语法&#xff1a;从基础到实战进阶 在 Django 开发领域&#xff0c;ORM&#xff08;对象关系映射&#xff09;是开发者高效操作数据库的得力工具。它以简洁直观的 Python 代码&#xff0c;替代繁琐的 SQL 语句&#xff0c;极大提升了开发效率。本文将…

【计算机网络】TCP如何保障传输可靠性_笔记

文章目录 一、传输可靠性的6方面保障二、分段机制三、超时重传机制四、流量控制五、拥塞控制 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 源网站 按TCP/IP 4层体系&#xff0c;TCP位于传输层&#xff0c;为应用层提供服务 一、传输可靠性的6方面保障…

html主题切换小demo

主题切换功能为网页和应用程序提供了多样化的视觉风格与使用体验。实现多主题切换的技术方案丰富多样&#xff0c;其中 CSS 变量和 JavaScript 样式控制是较为常见的实现方式。 以下是一个简洁的多主题切换示例&#xff0c;愿它能为您的编程之旅增添一份趣味。 代码展示 <…

AI架构职责分配——支持AI模块的职责边界设计

职责分配——支持AI模块的职责边界设计 在传统系统中&#xff0c;职责分配通常围绕“控制层处理逻辑、服务层执行业务、数据层持久化”进行划分。这种分工逻辑在纯业务系统中足以支撑高效协作与系统演进。然而&#xff0c;随着AI模块的引入&#xff0c;系统中新增了如模型推理…

CARIS HIPS and SIPS 12.1是专业的多波束水深数据和声呐图像处理软件

CARIS HIPS 和 SIPS 是一套综合水文处理软件&#xff0c;主要用于海洋水道处理和测量领域‌。该软件集成了测深、水柱和海底图像处理功能&#xff0c;能够提高业务处理的精确度和效率‌。 主要功能和应用场景 ‌测深数据处理‌&#xff1a;HIPS主要用于处理大型测深数据。 ‌…

在 Ubuntu 24.04 LTS 上 Docker 部署 DB-GPT

一、DB-GPT 简介 DB-GPT 是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。目的是构建大模型领域的基础设施&#xff0c;通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及…

Axure高保真CRM客户关系管理系统原型

一套出色的CRM&#xff08;客户关系管理&#xff09;系统&#xff0c;无疑是企业管理者掌控客户动态、提升销售业绩的得力助手。今天&#xff0c;就为大家介绍一款精心打造的Axure高保真CRM客户关系管理系统原型模板&#xff0c;助你轻松开启高效客户管理之旅。 这款CRM原型模…