跳转至

Python Scrapy 库

概念与用途

Scrapy 是事件驱动爬虫框架,内置调度器、下载器、Spider、Item Pipeline、中间件和去重。它适合多页面、并发和可恢复的数据采集任务。

核心 API

本教程建议 python -m pip install "Scrapy>=2.11",需要网络和目标站授权。使用 scrapy startproject 创建项目;Spider 的解析回调通过 CSS/XPath 提取并 yield 项目或请求。

import scrapy

class QuoteSpider(scrapy.Spider):
    name = "quote-demo"

    def start_requests(self):
        yield scrapy.Request("data:text/html,<h1>Python</h1>")

    def parse(self, response):
        yield {"title": response.css("h1::text").get()}

运行文件可用 scrapy runspider spider.py -O output.json。

核心组件

组件 职责 资源边界
Spider 生成请求和解析响应 不做阻塞 I/O
Scheduler 排队与去重 控制队列规模
Downloader 网络获取 超时、并发、重试
Pipeline 清洗和存储 关闭文件/数据库

示例:从本地 HTML 提取

from scrapy.http import HtmlResponse

response = HtmlResponse(
    url="https://example.com/",
    body=b"<ul><li>Python</li><li>Scrapy</li></ul>",
    encoding="utf-8",
)
print(response.css("li::text").getall())

配置 DOWNLOAD_TIMEOUT、CONCURRENT_REQUESTS_PER_DOMAIN 和重试次数,并让 Pipeline 在 close_spider 清理资源。不要重试永久 4xx 或非幂等写请求。

常见错误与安全注意

  • 下载延迟、并发和自动限速要匹配目标站承载能力。
  • Pipeline 中阻塞 I/O 会拖慢 reactor,应使用异步接口或线程池。
  • 日志与导出中避免保存 Cookie、令牌和个人敏感信息。