当前位置: 首页 > news >正文

快速上手 Scrapy:5 分钟创建一个可扩展的爬虫项目

Scrapy 是 Python 生态中最强大的爬虫框架之一 —— 它自带异步请求、数据解析、数据存储、反爬配置等 “全家桶” 功能,而且天生支持扩展。对新手来说,无需从零搭建爬虫架构,5 分钟就能实现一个能后续迭代的爬虫项目。本文将以 “爬取技术博客文章信息” 为例,带你一步到位掌握 Scrapy 的核心流程。

前置准备:1 分钟搞定环境

首先确保你的电脑已安装Python 3.8+(Scrapy 对 Python 版本有最低要求),然后通过 pip 快速安装 Scrapy:

  1. 打开终端(Windows 用 CMD/PowerShell,Mac/Linux 用 Terminal),执行安装命令:

    bash

    pip install scrapy
    
  2. 验证安装成功:输入scrapy version,若显示类似Scrapy 2.11.0的版本号,说明环境已就绪。

Step 1:30 秒创建 Scrapy 项目

Scrapy 提供了命令行工具,能自动生成标准项目结构(这是 “可扩展” 的基础,后续代码按规范存放,便于维护)。

  1. 终端进入你想存放项目的文件夹(比如cd ~/projects),执行创建命令:

    bash

    scrapy startproject blog_spider
    
    • blog_spider是项目名,可自定义(比如爬取电商就叫ecommerce_spider)。
  2. 进入项目目录:

    bash

    cd blog_spider
    

此时项目结构已自动生成,核心文件夹 / 文件的作用如下(重点记 3 个):

  • spiders/:存放爬虫核心代码(后续写的爬取逻辑放这)
  • items.py:定义数据结构(比如要爬 “标题、链接、发布时间”,在这里规范字段)
  • pipelines.py:处理爬取到的数据(比如存 CSV、数据库,或数据清洗)

Step 2:30 秒定义数据结构(Item)

Item 相当于 “数据容器”,提前定义字段能避免后续数据混乱,也方便后续扩展(比如新增 “作者” 字段只需加一行代码)。

  1. 用文本编辑器(VS Code、PyCharm 均可)打开items.py,替换默认代码为:

    python

    import scrapyclass BlogItem(scrapy.Item):# 文章标题(必须爬取的核心字段)title = scrapy.Field()# 文章详情页链接url = scrapy.Field()# 发布时间(后续可扩展,当前先定义)publish_time = scrapy.Field()
    
  • scrapy.Field()表示这是一个数据字段,无需指定类型(Scrapy 会自动适配字符串、日期等)。

Step 3:1 分钟编写核心爬虫(Spider)

Spider 是爬虫的 “大脑”,负责定义爬取目标(哪些 URL)、如何解析页面数据。我们以 “爬取示例博客https://example-blog.com” 为例(实际使用时替换为合法目标网站)。

  1. spiders/文件夹下新建文件blog_spider.py(文件名与爬虫名对应,便于识别),写入代码:

    python

    import scrapy
    from blog_spider.items import BlogItem  # 导入定义的Itemclass BlogSpider(scrapy.Spider):# 爬虫唯一名称(运行时需指定,不能重复)name = "blog_crawler"# 初始爬取URL(可填多个,比如分页URL)start_urls = ["https://example-blog.com/page/1"]def parse(self, response):"""解析列表页:提取文章标题、链接,并存入Item"""# 1. 用XPath选择器定位文章节点(需根据目标网站HTML结构调整)article_nodes = response.xpath('//div[@class="article-item"]')for node in article_nodes:item = BlogItem()  # 实例化Item# 2. 提取字段(XPath语法:text()取文本,@href取链接)item["title"] = node.xpath('.//h2[@class="article-title"]/text()').get().strip()item["url"] = node.xpath('.//a[@class="article-link"]/@href').get()# 3. 发布时间暂不提取,后续可在详情页补充(体现可扩展)item["publish_time"] = "待补充"# 4. yield Item:将数据传给Pipeline处理yield item# 【可扩展】自动爬取下一页(实现分页爬取)next_page = response.xpath('//a[@class="next-page"]/@href').get()if next_page:# 递归调用parse方法,爬取下一页yield scrapy.Request(url=next_page, callback=self.parse)
    
  • 关键说明:
    • response是 Scrapy 返回的页面响应,包含 HTML 内容;
    • XPath选择器需根据目标网站的 HTML 结构调整(可在浏览器 F12 开发者工具中 “复制 XPath” 快速获取);
    • yield item会自动将数据传递到后续的 Pipeline,无需手动处理异步;
    • 分页逻辑(next_page)是 “可扩展” 的核心 —— 新增分页只需改 XPath,无需重构爬虫。

Step 4:30 秒配置数据存储(Pipeline)

Pipeline 负责处理 Item 数据,比如存 CSV(新手友好)、MySQL、MongoDB。这里以 “存 CSV” 为例,简单易验证。

  1. 打开pipelines.py,添加 CSV 存储逻辑:

    python

    import csvclass BlogCsvPipeline:def open_spider(self, spider):"""爬虫启动时执行:创建CSV文件并写入表头"""self.file = open("blog_data.csv", "w", encoding="utf-8", newline="")self.writer = csv.DictWriter(self.file, fieldnames=["title", "url", "publish_time"])self.writer.writeheader()  # 写入表头def process_item(self, item, spider):"""每爬取一个Item执行:写入CSV行"""self.writer.writerow(dict(item))  # Item转字典后写入return item  # 若有多个Pipeline,需返回Item传递给下一个def close_spider(self, spider):"""爬虫结束时执行:关闭文件"""self.file.close()
    
  2. 启用 Pipeline:打开settings.py,找到ITEM_PIPELINES配置项,取消注释并修改为:

    python

    ITEM_PIPELINES = {"blog_spider.pipelines.BlogCsvPipeline": 300,  # 300是优先级(越小越先执行)
    }
    
  • 额外优化(避免被封):在settings.py中添加 User-Agent(模拟浏览器请求):

    python

    USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
    ROBOTSTXT_OBEY = False  # 关闭 robots.txt 协议(部分网站禁止爬虫,需注意合法性)
    

Step 5:30 秒运行爬虫,查看结果

所有配置完成后,回到终端(确保当前在blog_spider项目目录下),执行运行命令:

bash

scrapy crawl blog_crawler
  • blog_crawler是之前在BlogSpider类中定义的name

爬虫运行后,会在项目根目录生成blog_data.csv文件,用 Excel 或文本编辑器打开,就能看到爬取的 “标题、链接、发布时间” 数据 —— 一个可运行、可扩展的爬虫就此完成!

可扩展设计:从 “能用” 到 “好用”

5 分钟实现的基础爬虫,后续可通过以下方式扩展,满足更复杂需求:

  1. 新增字段:在items.py中加author = scrapy.Field(),在 Spider 的parse方法中补充 XPath 提取;
  2. 多源数据存储:在pipelines.py中新增BlogMongoPipeline,同时存 CSV 和 MongoDB;
  3. 反爬增强:在settings.py中配置DOWNLOAD_DELAY = 1(每 1 秒爬一次),或添加代理 IP;
  4. 详情页解析:在 Spider 中新增parse_detail方法,通过scrapy.Request跟进文章 URL,提取正文、标签等详细信息。

结语

Scrapy 的强大之处在于 “规范的架构” 和 “低代码扩展”—— 新手无需关注异步、并发等底层逻辑,只需按 “定义 Item→写 Spider→配 Pipeline” 的流程,5 分钟就能落地项目;后续迭代时,也能基于现有结构轻松扩展。赶紧找一个合法的目标网站(比如开源项目文档、公开博客),动手实践吧!

http://www.dtcms.com/a/495275.html

相关文章:

  • 青岛网站设计公司在哪找网店代运营什么意思
  • 数字图像处理-图像增强(2)
  • JPA 用 List 入参在 @Query中报错 unexpected AST node: {vector}
  • 国外网站顶部菜单设计电子商务 网站设计
  • 南城县建设局网站北京vi设计公司哪
  • spark性能优化1:通过依赖关系重组优化Spark性能:宽窄依赖集中处理实践
  • 工程师的烹饪 - 空气炸锅菜谱
  • 如何在腾讯云上建设网站手机必备网站
  • Linux:12.线程同步与互斥
  • 泰安网站建设哪家强wordpress m1
  • el-table中控制单列内容多行超出省略及tooltip
  • 构建企业级跨境电商(Temu)财务数据自动化采集系统
  • B-tree索引像字典查词一样工作?那哪些数据库查询它能加速,哪些不能?
  • C++实现二叉树搜索树
  • 网站开发和美工的区别手机域名注册被骗
  • 做模特的网站python语言编程入门
  • GeeLark 9月功能更新回顾
  • C++---ref-qualifier( / )函数的左右值调用的界定
  • vue3:数组的.includes方法怎么使用
  • 网站建设及网页设计企业宣传片公司
  • 132.MIG IP核中没有512M16的只有512M8的如何解决
  • SwiftUI 布局之美:Padding 让界面呼吸感拉满
  • RHCSA-08文本处理工具
  • JSP XML 数据处理
  • “String到Date转换失败”:深挖@RequestBody的日期坑
  • 分布式事务以及Seata(XA、AT模式)
  • 做网站的 简历标识设计网
  • 平台网站建设意见征求表社区类网站开发
  • 电脑零配件行业MES系统:快速实现全过程信息溯源
  • 基于单片机与上位机的智能宠物喂食管理系统设计