Scrapy 网络爬虫框架

Scrapy 是Python 开发的开源、异步网页爬虫框架,专门用于批量抓取网页数据,自带请求调度、下载、解析、数据持久化、反爬基础处理,不用手写大量请求、队列逻辑,适合大规模爬虫项目。

  1. 核心五大组件(架构)
组件 作用
Spider(爬虫) 写解析逻辑,定义爬取规则、url,提取需要的数据
Item(数据容器) 定义要抓取的数据字段,类似数据模型,规范输出格式
Item Pipeline(管道) 拿到解析后的数据,做保存:存 json/csv、存数据库、清洗过滤数据
Downloader(下载器) 负责发送 http 请求,下载网页源码,处理请求头、代理、重试
Scheduler(调度器) 管理待爬取 url 队列,去重、调度请求顺序,实现异步并发

中间件:

Downloader Middleware:处理请求 / 响应,设置代理、Cookie、UA、处理异常

Spider Middleware:处理 spider 输出的数据、请求

  1. 安装

pip install scrapy

  1. 基础命令

创建爬虫项目

scrapy startproject myspider

#进入项目文件夹

cd myspider

#生成爬虫文件 爬虫名 爬取域名

scrapy genspider demo_spider example.com

#运行爬虫

scrapy crawl demo_spider

#导出数据

scrapy crawl demo_spider -o data.json

scrapy crawl demo_spider -o data.csv

  1. 项目目录结构

plaintext

myspider/

├─myspider/

│ ├─init.py

├─items.py #定义数据字段

├─middlewares.py #中间件

├─pipelines.py #数据处理管道

├─settings.py #爬虫全局配置

│ └─spiders/ #存放各个爬虫文件

│ └─demo_spider.py

└─scrapy.cfg

  1. 最简示例

spiders/demo_spider.py

import scrapy

class DemoSpider(scrapy.Spider):

name = "demo_spider" #爬虫唯一名字,crawl命令用这个

allowed_domains = "example.com"

start_urls = "https://example.com" #初始url

def parse(self, response):

response 网页响应对象

title = response.xpath("//title/text()").get() #xpath提取

yield {"title":title} #产出数据交给pipeline

parse():默认回调函数,拿到网页 response,做 xpath/css 选择器解析,yield产出数据 / 新请求。

yield scrapy.Request(url,callback=xxx) 生成下一页请求。

xpath /css 选择器

python

运行

#xpath

response.xpath('//div@class="title"/text()').get() #取第一条

response.xpath('//div@class="title"/text()').getall() #全部结果

#css选择器

response.css('div.title::text').get()

  1. settings.py 常用配置

是否遵守robots协议,正式爬虫关闭

ROBOTSTXT_OBEY = False

#并发请求数,调大爬的快,容易封IP

CONCURRENT_REQUESTS = 16

#请求间隔,防反爬,单位秒

DOWNLOAD_DELAY = 1

#请求头,伪装浏览器

DEFAULT_REQUEST_HEADERS = {

"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0 Safari/537.36"

}

#开启pipeline

ITEM_PIPELINES = {

'myspider.pipelines.MyspiderPipeline': 300, #数字代表执行优先级,越小越先执行

}

  1. Item & Pipeline 示例

items.py

python

运行

import scrapy

class DemoItem(scrapy.Item):

title = scrapy.Field()

pipelines.py

python

运行

class MyspiderPipeline:

def process_item(self, item, spider):

#每条数据进来执行,可以写入库逻辑

print(item)

return item

  1. 优缺点

✅优点

异步架构,并发高,速度远高于 requests 循环

自带 url 去重、重试、调度队列,不用自己写队列

xpath/css 解析开箱即用,完整组件化,适合大批量爬虫

支持导出 json、csv,对接数据库方便

❌缺点

JS 渲染动态页面拿不到数据(需要搭配 Selenium/Playwright)

学习成本高于简单 requests 脚本

调试不如普通脚本直观

如果页面是 JS 渲染:使用 scrapy‑playwright 插件,集成浏览器渲染。

  1. 常见坑

403 被拦截:需要设置 UA、Cookie、代理、加大 DOWNLOAD_DELAY

中文乱码:scrapy 内部自动处理编码,输出文件乱码在导出时设置编码

url 没有被爬取:检查allowed_domains会过滤域外链接;url 去重机制导致重复 url 不会再次请求

动态网页拿不到内容:scrapy 默认不执行 JS,需要浏览器渲染组件。

相关推荐
API快乐传递者1 小时前
电商竞品分析接口实战指南:从数据采集到决策洞察的全链路方案
java·python
2401_868534781 小时前
集中式存储和分布式存储
python·pygame
卷无止境1 小时前
FastAPI 权限管理实战:从 ACL 到 RBAC 的那些门道
后端·python·fastapi
卷无止境1 小时前
软件文档写作中,Agent最常用的十种skill拆解
python·agent·claude
2603_9651481110 小时前
如何解析JSON数据?API返回的商品信息处理教程
开发语言·数据库·python·自动化·json·api
jufeng130711 小时前
【系列:手搓自主 AI Agent:Hermes 架构原理剖析 · 第 8 篇】
python·ai agent·配置系统
circuitsosk11 小时前
跨境电商智能化实战:AI如何赋能客服自动回复、广告智能投放与供应链预测
大数据·人工智能·python·langchain·智能客服
2601_9563198812 小时前
2026年零基础学量化:从看懂示例到写清条件和动作
人工智能·python
过期的秋刀鱼!13 小时前
LangChain-D1-模型的工作流程
人工智能·python·langchain
萤火工厂目视化设计13 小时前
智能制造与企业文化目视化浪潮下:中小工厂的机遇与挑战
python·制造