爬虫框架快速入门——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)

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

相关推荐
青 春 记 忆13 小时前
Dify Docker Compose 通用无损升级指南:从备份、双版本预演到切换与回滚
运维·人工智能·python·docker·容器
GlueNa2SiO313 小时前
03-Flask模板引擎Jinja2详解
笔记·python·flask
临沂GEO15 小时前
GEO搜索优化科普|正规地理位置流量运营入门指南
大数据·人工智能·python·流量运营
大模型码小白15 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
深蓝电商API16 小时前
常见反爬策略全解析
爬虫·反爬策略
荷蒲16 小时前
【小白量化Qbuddy】利用AI学习中文Python
人工智能·python·学习
数据狐(Datafox)18 小时前
京东商品列表API技术解析与落地应用(含标准 JSON 示例)
java·大数据·前端·人工智能·python·数据分析·json
量化吞吐机18 小时前
2026年下半年手工交易规则走向量化表达,产品该先接住哪一步
人工智能·python
Metaphor69219 小时前
使用 Python 读取和删除 Excel 文件属性
python·excel
迷迭香yy19 小时前
Python构建转融券多空识别系统从接口到因子的全流程 IG50免费开源股票数据API接口
开发语言·python·开源