导读
在现代网络爬虫开发中,面对 海量网页数据、慢速响应的网络接口,传统的同步爬虫方式已经不能满足高效抓取需求。本文将手把手带你构建一个 基于 aiohttp + asyncio 的异步爬虫系统,实战目标是抓取豆瓣电影 Top250 排行榜中的电影名称、评分和详情页地址。
目录
一、项目目标与网站结构分析
目标网站:
每页展示 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