news 2026/10/14 3:13:42

Python爬虫必备:同步与异步HTTP库全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python爬虫必备:同步与异步HTTP库全解析

在进行数据分析以及竞品调研的时候, 首先需要明确, 最基础也是最关键的一个步骤, 就是必须把数据从网络上面抓取下来。而在整个过程中里最常用的两个 HTTP 库是同步的和异步的这两个(具体的库名称可能需要读者自行对应上下文填补空缺), 这两者加在一起就足以完美覆盖绝大部分的应用场景。

技术本身是一种中性的工具。你务必要遵守目标网站的规定, 处理.txt格式的内容, 控制请求的频率, 不要去爬取付费与私有的内容, 做到合规使用。

一、:最优雅的 HTTP 库

被称为 "HTTP for ",一行代码就能发起请求:

import requests

resp = requests.get('https://httpbin.org/get')

print(resp.json())

关于GET这种请求方式, 还有它所需要的那些参数。

# 基本请求

resp = requests.get('https://httpbin.org/get', timeout=10)

print(resp.status_code) # 200

# 带参数请求

params = {'page': 1, 'per_page': 5, 'search': 'python教程'}

resp = requests.get('https://httpbin.org/get', params=params)

用户使用的是 POST 这个方式来完成数据的提交操作。

# JSON

resp = requests.post('https://httpbin.org/post',

json={'username': 'test', 'action': 'login'})

# 表单

resp = requests.post('https://httpbin.org/post',

data={'username': 'test', 'password': 'secret'})

# 文件上传

resp = requests.post('https://httpbin.org/post',

files={'file': open('doc.pdf', 'rb')})

要维持那个登录的状态。

能够在多次的进行请求的这个过程当中, 保持那种状态, 因此它就相当于是适合需要那个登录状态的这种场景的。

session = requests.Session()

session.headers.update({'User-Agent': 'MyBot/1.0'})

session.get('https://httpbin.org/cookies/set/session_id/abc123')

resp = session.get('https://httpbin.org/cookies')

print(resp.json().get('cookies')) # {'session_id': 'abc123'}

超时、重试、异常处理

from requests.adapters import HTTPAdapter

from urllib3.util.retry import Retry

# 超时

resp = requests.get(url, timeout=(3, 10))

# 自动重试

session = requests.Session()

retry = Retry(total=3, backoff_factor=1,

status_forcelist=[500, 502, 503, 504])

adapter = HTTPAdapter(max_retries=retry)

session.mount('https://', adapter)

养成一个好习惯, 就是请求要统一来做异常捕获, 这里需要加上//, 遇到429这个状态码的时候要降频, 遇到5xx这类错误的时候要稍后重试, 这样可以避免程序崩溃。

二、把相关的请求同时安排出去, 让它们一起去发送。

同步请求的方式是逐个地、一个一个地按照顺序去发送, 所以说如果是执行 5 个 URL, 那么它整体所消耗的时间就是这 5 个 URL 各自的耗时加起来得到的总和。

异步并行的机制则完全不同, 整个流程处理完毕大概只需要花费的时间只和最慢那一个请求所需要的时间差不多, 因此在那些需要并发处理的场景下面, 这种方式所带来的加速效果通常能够达到好几倍的程度。

import aiohttp

import asyncio

async def fetch(session, url):

async with session.get(url) as resp:

return await resp.text()

async def fetch_all(urls):

async with aiohttp.ClientSession() as session:

tasks = [fetch(session, url) for url in urls]

return await asyncio.gather(*tasks)

urls = ['https://httpbin.org/get'] * 10

results = asyncio.run(fetch_all(urls))

选择方案的简明指南是, 对于请求数量较少或者属于普通水平的情况使用前者, 而对于并发请求数量达到成百上千的高强度使用情况则使用后者的方案。

三、小结

要是这篇内容能对你有所帮助的话, 那希望你能够去点赞和收藏, 并且继续关注我, 因为我会不断地进行输出, 来提供那些在实干中具有价值的内容与干货知识。而在接下来的这一篇文章当中呢, 主要会涉及到的主题是有关“+”这样的内容, 重点在于如何搞定网页解析方面的那些事儿。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 3:13:22

Coze智能体搭建实战:从零跑通工作流与Web应用

1. 这不是“又一个Coze教程”,而是一份能让你真正跑通第一个智能体的实操手记我带过不少刚接触Coze的朋友,从某高校实验室的研究生,到某公司转型做AI产品的运营同事,再到完全没写过代码的自由职业者。他们问得最多的问题从来不是“…

作者头像 李华
网站建设 2026/10/14 3:12:22

CSDN + AI:程序员的新生产力 (e 付费专栏)

1. 引言:AI 时代,程序员的生产力正在被重新定义 从代码补全到智能问答,从文档生成到代码审查,AI 正在以前所未有的速度渗透进程序员的日常工作流。作为国内最大的开发者社区,CSDN 也在积极拥抱这一趋势,将 AI 能力融入内容创作、技术学习和代码开发的全链路。本文将从多…

作者头像 李华
网站建设 2026/10/14 3:11:12

douyin-downloader 完整指南:一条命令下载抖音无水印视频

douyin-downloader 完整指南:一条命令下载抖音无水印视频 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

作者头像 李华
网站建设 2026/10/14 3:10:24

在任意 Linux 发行版免安装运行 LocalSend AppImage 的完整指南

在任意 Linux 发行版免安装运行 LocalSend AppImage 的完整指南 【免费下载链接】localsend An open-source cross-platform alternative to AirDrop 项目地址: https://gitcode.com/GitHub_Trending/lo/localsend LocalSend AppImage 把应用和全部运行库压进一个可执行…

作者头像 李华
网站建设 2026/10/14 3:09:38

虚拟电厂多时间尺度调度:储能衰减建模与灵活性平衡

上周和一个做园区微网的工程师朋友吃饭,他问我一个特别现实的问题:调度方案里储能电池到底能不能当成“免费调节池”来用?他那边分布式光伏占比超过一半,中午净负荷断崖式下跌,傍晚又直线飙升,只能靠储能顶…

作者头像 李华