爬虫框架快速入门——Scrapy

适用人群:零基础、对网络爬虫有兴趣但不知道从何开始的小白。


什么是 Scrapy?

Scrapy 是一个基于 Python 的网络爬虫框架,它能帮助你快速爬取网站上的数据,并将数据保存到文件或数据库中。

特点

  • 高效:支持高并发爬取,性能强悍。
  • 易用:模块化设计,代码清晰,易于上手。
  • 灵活:支持爬取静态页面,还可以结合其他工具爬取动态页面。

准备工作
  1. 安装 Python

    下载并安装 Python 3.x,建议从 Python 官网 获取最新版。

  2. 安装 Scrapy

    在命令行中运行以下命令安装 Scrapy:

    bash 复制代码
    pip install scrapy
  3. 验证安装

    输入以下命令检查是否安装成功:

    bash 复制代码
    scrapy version

    如果显示版本号,说明安装成功!


第一步:创建 Scrapy 项目
  1. 创建项目

    在命令行进入你想保存项目的目录,运行以下命令:

    bash 复制代码
    scrapy startproject myproject

    这会创建一个名为 myproject 的文件夹,结构如下:

    复制代码
    myproject/
        scrapy.cfg          # 项目配置文件
        myproject/
            __init__.py     # 标识包的文件
            items.py        # 定义数据结构
            middlewares.py  # 中间件
            pipelines.py    # 数据处理管道
            settings.py     # 项目配置
            spiders/        # 存放爬虫的目录
                __init__.py
  2. 进入项目目录

    bash 复制代码
    cd myproject

第二步:创建爬虫

我们以一个简单的网站为例: Quotes to Scrape

目标:爬取网站上的名言和作者。

  1. 生成爬虫文件

    运行以下命令生成爬虫模板:

    bash 复制代码
    scrapy genspider quotes quotes.toscrape.com

    这会在 spiders 文件夹下生成一个 quotes.py 文件。

  2. 编辑爬虫代码

    打开 quotes.py,替换为以下代码:

    python 复制代码
    import scrapy
    
    class QuotesSpider(scrapy.Spider):
        name = "quotes"
        start_urls = [
            'http://quotes.toscrape.com/'
        ]
    
        def parse(self, response):
            for quote in response.css("div.quote"):
                yield {
                    'text': quote.css("span.text::text").get(),
                    'author': quote.css("span small.author::text").get(),
                }
    
            # 继续爬取下一页
            next_page = response.css("li.next a::attr(href)").get()
            if next_page:
                yield response.follow(next_page, self.parse)

第三步:运行爬虫
  1. 运行爬虫

    在命令行运行以下命令:

    bash 复制代码
    scrapy crawl quotes
  2. 保存数据

    如果想将爬取的数据保存为 JSON 文件:

    bash 复制代码
    scrapy crawl quotes -o quotes.json

    数据会被保存到 quotes.json 文件中。


第四步:分析代码
  1. start_urls

    定义起始 URL,即爬虫开始爬取的网站。

  2. parse 方法

    负责处理 HTTP 响应,提取数据和下一页链接。

    • response.css 是 CSS 选择器,用于提取网页内容。
    • yield 返回一个字典,保存爬取到的数据。
  3. next_page

    爬取下一页的链接并继续调用 parse 方法。


第五步:进阶功能
  1. 清洗数据

    pipelines.py 中清洗和格式化数据。例如,将作者名统一大小写。

  2. 存储到数据库

    修改 pipelines.py,将数据存储到 MySQL 或 MongoDB。

  3. 添加 User-Agent

    settings.py 中添加自定义 User-Agent,避免被网站屏蔽:

    python 复制代码
    USER_AGENT = 'my-scrapy-bot (http://mywebsite.com)'

常见问题
  1. 爬虫被屏蔽

    使用随机 User-Agent 或代理 IP。

  2. 动态页面爬取

    Scrapy 对静态页面支持很好,但对动态加载的内容可能无效。可结合 Selenium 或 Playwright。


总结

恭喜你完成了第一个 Scrapy 爬虫!通过 Scrapy,你可以轻松爬取各种网站的数据。接下来,你可以:

  • 尝试爬取不同类型的网站。
  • 深入学习 Scrapy 的高级功能,如自定义中间件、多线程优化等。

完整代码

项目目录中的爬虫代码最终如下:

python 复制代码
import scrapy

class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/'
    ]

    def parse(self, response):
        for quote in response.css("div.quote"):
            yield {
                'text': quote.css("span.text::text").get(),
                'author': quote.css("span small.author::text").get(),
            }

        next_page = response.css("li.next a::attr(href)").get()
        if next_page:
            yield response.follow(next_page, self.parse)

动手实践是学习的最好方式!希望这篇文章对你有帮助。如果喜欢,请点赞、评论支持!如果有任何疑问,欢迎留言讨论! 😊

相关推荐
亿牛云爬虫专家3 小时前
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
分布式·python·架构·kubernetes·爬虫代理·监测·采集
蹦蹦跳跳真可爱5897 小时前
Python----OpenCV(图像増强——高通滤波(索贝尔算子、沙尔算子、拉普拉斯算子),图像浮雕与特效处理)
人工智能·python·opencv·计算机视觉
nananaij7 小时前
【Python进阶篇 面向对象程序设计(3) 继承】
开发语言·python·神经网络·pycharm
雷羿 LexChien7 小时前
从 Prompt 管理到人格稳定:探索 Cursor AI 编辑器如何赋能 Prompt 工程与人格风格设计(上)
人工智能·python·llm·编辑器·prompt
敲键盘的小夜猫8 小时前
LLM复杂记忆存储-多会话隔离案例实战
人工智能·python·langchain
高压锅_12208 小时前
Django Channels WebSocket实时通信实战:从聊天功能到消息推送
python·websocket·django
胖达不服输10 小时前
「日拱一码」020 机器学习——数据处理
人工智能·python·机器学习·数据处理
吴佳浩10 小时前
Python入门指南-番外-LLM-Fingerprint(大语言模型指纹):从技术视角看AI开源生态的边界与挑战
python·llm·mcp
吴佳浩10 小时前
Python入门指南-AI模型相似性检测方法:技术原理与实现
人工智能·python·llm
叶 落11 小时前
计算阶梯电费
python·python 基础·python 入门