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

Scrapy 基础介绍

Scrapy 基础介绍

Scrapy 是一个用于爬取网站数据并提取结构化信息的 Python 框架。它基于异步网络库 Twisted,支持高效的数据抓取、处理与存储。以下从安装、项目创建、核心组件到实际示例展开说明。


安装 Scrapy

通过 pip 安装 Scrapy:

pip install scrapy

验证安装是否成功:

scrapy version


创建 Scrapy 项目

使用命令行工具生成项目结构:

scrapy startproject project_name

生成的目录结构如下:

project_name/scrapy.cfgproject_name/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__init__.py


核心组件与配置

1. Items (items.py)
定义爬取数据的字段模板:

import scrapyclass ProductItem(scrapy.Item):name = scrapy.Field()price = scrapy.Field()

2. Spiders (spiders/)
编写爬虫逻辑,继承 scrapy.Spider

class ExampleSpider(scrapy.Spider):name = "example"start_urls = ["https://example.com"]def parse(self, response):item = ProductItem()item["name"] = response.css("h1::text").get()item["price"] = response.css(".price::text").get()yield item

3. Pipelines (pipelines.py)
处理爬取的数据(如存储到数据库):

class JsonWriterPipeline:def process_item(self, item, spider):with open("items.json", "a") as f:f.write(json.dumps(dict(item)) + "\n")return item

settings.py 中启用 Pipeline:

ITEM_PIPELINES = {"project_name.pipelines.JsonWriterPipeline": 300,
}

4. Middlewares (middlewares.py)
自定义请求/响应处理逻辑(如 User-Agent 轮换)。


运行爬虫

通过命令行启动爬虫:

scrapy crawl example -o output.json

参数说明:

  • -o:输出结果到文件(支持 JSON、CSV 等格式)。
  • -a:传递参数(如 -a category=electronics)。

进阶功能

1. 动态请求(Follow Links)
parse 方法中生成新请求:

yield scrapy.Request(url="https://example.com/page2", callback=self.parse_page2)

2. 使用 Item Loaders
标准化数据处理流程:

from scrapy.loader import ItemLoaderloader = ItemLoader(item=ProductItem(), response=response)
loader.add_css("name", "h1::text")
loader.add_value("price", 100)
yield loader.load_item()

3. 避免被屏蔽

  • settings.py 中配置 DOWNLOAD_DELAYUSER_AGENT
  • 使用 scrapy-fake-useragent 库动态切换 User-Agent。

调试与日志

  • 启用 Shell 快速测试选择器:
    scrapy shell "https://example.com"
    

  • 查看日志:
    scrapy crawl example --loglevel=INFO
    

通过结合上述模块与功能,Scrapy 可高效完成从简单到复杂的爬虫任务。

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

相关文章:

  • 安全运维——系统上线前安全检测:漏洞扫描、系统基线与应用基线的全面解析
  • lwIP MQTT 心跳 Bug 分析与修复
  • 边缘计算(Edge Computing)+ AI:未来智能世界的核心引擎
  • HarmonyOS 组件与页面生命周期:全面解析与实践
  • Paimon——官网阅读:Flink 引擎
  • 【秋招笔试】2025.08.27华为秋招研发岗真题
  • 【新启航】3D 逆向抄数效率提升:自动化拼接工具与智能建模能力如何缩短 50% 项目周期
  • 聚类准确率计算——标签映射(Kuhn-Munkres匈牙利算法)问题的解决(详细并附完整代码)
  • 大模型RAG(Retrieval-Augmented Generation)
  • Python日期计算完全指南:从上周五到任意日期的高效计算
  • Cubemx+Vscode安装与环境配置
  • 聚焦建筑能源革新!安科瑞 “光储直柔” 方案护航碳中和目标实现
  • 162.在 Vue 3 中使用 OpenLayers 解析 GeoJSON 并为每个 Feature 填充渐变色
  • 如何调试一个EVM合约:实战操作 + 常见报错说明
  • 2025年第五届电子信息工程与计算机科学国际会议(EIECS 2025)
  • IO的最大输出速度
  • Maven 项目单元测试实战指南:从环境搭建到问题排查全解析
  • 一天认识一个神经网络之--CNN卷积神经网络
  • Linux系统之----命名管道模拟实现客户端、服务器
  • ImageToPromptAI-AI图像转提示词生成器
  • ftp命令批量删除服务器上的文件
  • 关于我在一个优惠券系统中rocketMQ消息幂等性自定义注解的处理
  • 使用reCAPTCHA提升WordPress网站安全性
  • 驱动开发系列67 - NVIDIA 开源GPU驱动open-gpu-kernel-modules分析-驱动初始化
  • Java自定义程序使用Ollama实现本地ai调用
  • Java-反射机制
  • Java 多线程环境下的全局变量缓存实践指南
  • PyTorch 张量核心知识点
  • 【物联网】什么是 Arduino Nano 33 IoT?
  • 基于springboot的二手车交易系统