首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 HTTP基本原理
1.2 Web 网页基础
1.3 爬虫的基本原理
1.4 Session和Cookie
1.5 代理的基本原理
1.6 多线程和多进程的基本原理
2.1 urllib的使用
2.2 requests的使用
2.3 正则表达式
2.4 httpx的使用
2.5 基础爬虫案例实战
3.1 XPath的使用
3.2 Beautiful Soup的使用
3.3 pyquery的使用
3.4 parsel 的使用
4.1 TXT 文本文件存储
4.2 JSON 文件存储
4.3 CSV 文件存储
4.4 MySQL 存储
4.5 MongoDB 文档存储
4.6 Redis缓存存储
4.7 Elasticsearch 搜索引擎存储
4.8 RabbitMQ 的使用
5.1 什么是 Ajax
5.2 Ajax分析方法
5.3 Ajax 分析与爬取实战
6.1 协程的基本原理
6.2 aiohttp的使用
6.3 aiohttp 异步爬取实战
7.1 Selenium 的使用
7.2 Splash 的使用
7.3 Pyppeteer 的使用
7.4 Playwright 的使用
7.5 Selenium 爬取实战
7.6 Pyppeteer 爬取实战
7.7 CSS 位置偏移反爬案例分析与爬取实战
7.8 字体反爬案例分析与爬取实战
8.1 使用 OCR 技术识别图形验证码
8.2 使用 OpenCV 识别滑动验证码的缺口
8.3 使用深度学习识别图形验证码
8.4 使用深度学习识别滑动验证码的缺口
8.5 使用打码平台识别验证码
8.6 手机验证码的自动化处理
9.1 代理的设置
9.2 代理池的维护
9.3 付费代理的使用
9.4 ADSL 拨号代理的搭建方法
9.5 代理反爬案例爬取实战
10.1 模拟登录的基本原理
10.2 基于Session和Cookie的模拟登录爬取实战
10.3 基于JWT的模拟登录爬取实战
10.4 大规模账号池的搭建
11.1 网站加密和混淆技术简介
11.2 浏览器调试常用技巧
11.3 JavaScript Hook 的使用
11.4 无限 debugger 的原理与绕过
11.5 使用 Python 模拟执行 JavaScript
11.6 使用 Node.js 模拟执行 JavaScript
11.7 浏览器环境下 JavaScript 的模拟执行
11.8 AST 技术简介
11.9 使用 AST 技术还原混淆代码
11.10 特殊混淆案例的还原
11.11 WebAssembly 案例分析和爬取实战
11.12 JavaScript 逆向技巧总结
11.13 JavaScript 逆向爬取实战
当前位置:
首页>>
技术小册>>
Python3网络爬虫开发实战(上)
小册名称:Python3网络爬虫开发实战(上)
### 2.4 httpx的使用 在Python网络爬虫开发中,`httpx` 是一个强大且易于使用的异步HTTP客户端库,它提供了同步和异步两种API,让开发者能够更加方便地执行HTTP请求,处理响应,以及管理HTTP连接。与Python标准库中的`requests`相比,`httpx` 天然支持异步,这使得在处理大量并发请求时效率更高,特别适用于构建高性能的网络爬虫或Web服务。本章将深入介绍`httpx` 的基本使用、高级特性以及在网络爬虫中的应用。 #### 2.4.1 安装与基础配置 首先,你需要安装`httpx`。在Python环境中,你可以通过pip命令轻松完成安装: ```bash pip install httpx ``` 安装完成后,你可以开始使用`httpx` 进行HTTP请求了。`httpx` 的API设计简洁直观,与`requests`类似,但更加强调异步支持。 #### 2.4.2 发起HTTP请求 ##### 同步请求 尽管`httpx`以异步为亮点,但它也完全支持同步请求。以下是使用`httpx`发起GET请求的示例: ```python import httpx # 发起GET请求 response = httpx.get('https://httpbin.org/get') # 访问响应内容 print(response.status_code) # 打印HTTP状态码 print(response.text) # 打印响应体文本 print(response.json()) # 尝试将响应体解析为JSON ``` 类似地,POST请求可以这样发起: ```python response = httpx.post('https://httpbin.org/post', json={'key': 'value'}) print(response.json()) ``` ##### 异步请求 `httpx`的异步功能通过`AsyncClient`类实现。使用异步请求前,需要确保你的环境支持异步编程(如使用`async`和`await`关键字)。 ```python import httpx import asyncio async def fetch_url(url): async with httpx.AsyncClient() as client: response = await client.get(url) return response.text # 运行异步函数 url = 'https://httpbin.org/get' loop = asyncio.get_event_loop() response_text = loop.run_until_complete(fetch_url(url)) print(response_text) # 在Python 3.7+中,更推荐使用asyncio.run() # result = asyncio.run(fetch_url(url)) # print(result) ``` #### 2.4.3 高级特性 ##### 超时与重试 `httpx`允许你自定义请求的超时时间和重试策略。这对于处理不稳定的网络连接或目标网站的暂时不可用非常有用。 ```python import httpx # 设置超时 try: response = httpx.get('https://example.com', timeout=5.0) # 5秒超时 print(response.status_code) except httpx.TimeoutException: print("请求超时") # 自定义重试策略 from httpx import RetryConfig retries = RetryConfig(total_retries=3, backoff_factor=0.5) try: response = httpx.get('https://example.com', retries=retries) print(response.status_code) except Exception as e: print(f"请求失败: {e}") ``` ##### HTTP代理 `httpx`支持通过HTTP代理发起请求,这对于绕过IP封锁或测试特定网络环境下的应用行为非常有用。 ```python proxies = { 'http': 'http://10.10.1.10:3128', 'https': 'http://10.10.1.10:1080', } response = httpx.get('https://httpbin.org/ip', proxies=proxies) print(response.json()) ``` ##### 自定义请求头与认证 你可以轻松地向请求中添加自定义的请求头,甚至执行基于HTTP的认证。 ```python headers = { 'User-Agent': 'Custom User-Agent', 'Authorization': 'Bearer YOUR_TOKEN_HERE' } response = httpx.get('https://api.example.com/data', headers=headers) print(response.json()) ``` #### 2.4.4 在网络爬虫中的应用 在网络爬虫中,`httpx`的异步能力尤为关键。它允许你同时向多个目标URL发起请求,从而显著提高数据采集的速度和效率。 假设你需要从一个网站上抓取多个页面的数据,可以使用`asyncio.gather`来并发执行多个异步请求: ```python import httpx import asyncio async def fetch_page(url): async with httpx.AsyncClient() as client: response = await client.get(url) return response.text async def main(): urls = ['https://example.com/page1', 'https://example.com/page2', 'https://example.com/page3'] tasks = [fetch_page(url) for url in urls] results = await asyncio.gather(*tasks) for result in results: print(result[:100] + '...') # 打印每页内容的前100个字符 # 运行主函数 asyncio.run(main()) ``` 此外,`httpx`的异步特性还能帮助你更好地管理爬虫资源,如连接池和会话,确保在长时间运行或高并发场景下系统的稳定性和性能。 #### 2.4.5 总结 `httpx`作为一个功能丰富、易于使用的HTTP客户端库,在网络爬虫开发中展现出了巨大的潜力。通过支持同步和异步请求、灵活的请求配置(如超时、重试、代理等)、以及便捷的异步编程接口,`httpx`使得构建高效、稳定的网络爬虫变得更加简单。在编写本书《Python3网络爬虫开发实战(上)》的后续章节中,我们将继续探索`httpx`的高级特性及其在网络爬虫领域的更多应用场景,助力读者成为网络爬虫开发的专家。
上一篇:
2.3 正则表达式
下一篇:
2.5 基础爬虫案例实战
该分类下的相关小册推荐:
Python编程轻松进阶(五)
Python合辑7-集合、列表与元组
Python合辑5-格式化字符串
Python高性能编程与实战
Python与办公-玩转PDF
Python合辑14-面向对象编程案例(下)
Python与办公-玩转Excel
Python面试指南
Python机器学习基础教程(下)
Python合辑4-130个字符串操作示例
机器学习算法原理与实战
Python合辑13-面向对象编程案例(上)