导读
在现代网络爬虫开发中,面对 海量网页数据、慢速响应的网络接口,传统的同步爬虫方式已经不能满足高效抓取需求。本文将手把手带你构建一个 基于 aiohttp + asyncio 的异步爬虫系统,实战目标是抓取豆瓣电影 Top250 排行榜中的电影名称、评分和详情页地址。
目录
导读
一、项目目标与网站结构分析
二、依赖模块与环境准备
三、并发控制:Semaphore 机制
四、请求与解析核心逻辑(fetch 函数)
五、构建主控制器 main()
六、主程序入口与性能测量
七、运行结果示例(部分)
八、异步爬虫优势总结
九、可改进的方向
十、完整代码
一、项目目标与网站结构分析
目标网站:
豆瓣电影 Top 250
每页展示 25 部电影,共 10 页。
分页参数位于 URL 中:
https://movie.douban.com/top250?start=0
https://movie.douban.com/top250?start=25
...
https://movie.douban.com/top250?start=225
页面信息结构:
使用开发者工具查看,每一部电影的基本信息位于:
<ol class="grid_view"><li> <!-- 每部电影 --><div class="item"><div class="info"><span class="title">电影名称</span><span class="rating_num">评分</span><a href="电影链接">详情页</a></div></div></li>
</ol>
二、依赖模块与环境准备
所需库:
pip install aiohttp lxml
导入模块:
import asyncio
import aiohttp
from lxml import etree
import time
模块解释:
-
asyncio
:Python 的异步编程基础,负责事件循环和任务调度。 -
aiohttp
:异步 HTTP 请求客户端。 -
lxml.etree
:高性能 HTML 解析库,支持 XPath。 -
time
:用于性能测量。
三、并发控制:Semaphore 机制
CONCURRENCY = 2
semapho