Scrapy介绍

Scrapy是一个基于Twisted的Python爬虫框架,其特点包括异步处理、结构清晰和可扩展性强。框架由Engine、Item、Scheduler、Downloader、Spiders、Item Pipeline和中间件组成。Engine负责数据流处理,Item定义爬取结果,Scheduler管理请求队列,Downloader下载内容,Spider解析网页,Item Pipeline处理提取结果,中间件则作为钩子框架。创建Scrapy项目涉及配置、Item定义、Pipeline设置、Spider编写及结果保存等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Scrapy基本介绍

Scrapy是一个基于Twisted的异步处理框架,是纯python实现的爬虫框架,具有架构清晰,模块间耦合度低,可扩展性强等特点。

整个框架由Engine(引擎)、Item(项目)、Scheduler(调度器)、Downloader(下载器)、Spiders(蜘蛛)、Item Pipeline(项目管道)、Downloader Middlewares(下载中间件)、Spider Middlewares(蜘蛛中间件)组成。
其中每个组件的作用简要描述为:

Engine:处理整个系统的数据流、事务,框架的核心。

Item:定义爬取结果的数据结果,爬取数据构建程该类型对象。

Schduler:接受引擎发过来的请求并加入队列中,并在引擎再次请求时提供给引擎。

Downloader:下载网页内容,并将网页内容返回给Spider。

Item Pipeline:负责处理Spider从网页中抽取的项目,负责解析响应并生成提取结果和新的请求。

Spider:定义爬取的逻辑和网页的解析规则,解析响应并提取新的请求。

Downloader Middlewares:位于引擎和下载器之间的钩子框架,处理引擎与下载器之间的请求及响应。

Spider Middlewares:位于引擎和蜘蛛蜘蛛之间的钩子框架,处理蜘蛛输入的响应和输出的结果及新的请求。

2.框架文件结构

scrapy.cfg
project/
	__init__.py
	items.py
	pipelines.py
	settings.py
	middlewares.py
	spiders/
		__init__.py
		spiderRequest.py
		...

其中:

scrapy.cfg:配置Scrapy项目,定义了项目的配置路径。部署相关信息等内容。

items.py:定义Item数据结构。

pipelines.py:定义Item Pipeline的实现。

settings.py:定义项目的全局配置。

middleware:定义Spider middleware和Downloader Middleware的实现。

spiders:包含具体Spider的实现。

3.创建Scrapy项目

1.使用命令行行方式安装Scrapy,命令如下:

pip install scrapy

2.创建一个Scrapy项目,格式如下:

scrapy startproject 'ProjectName'

3.创建一个‘Spider’爬取网站并提取数据;

cd ProjectName
scrapy genspider Test

4.重写"items.py"中“ProjectNameItem"类,打开项目中’TestSpider.py’文件,重写"TestSpider"类即可:

#version 1.0 修改items.py文件,获取当前网页中文本、作者、标签内容
	#items.py
	import scrapy
	
	class TestItem(scrapy.Item):
	    # define the fields for your item here like:
	    text = scrapy.Field()
	    author = scrapy.Field()
	    tags = scrapy.Field()

	#TestSpider.py
	import scrapy
	
	class TestSpider(scrapy.Spider):
	    name = 'test'
	    allowed_domains = ['quotes.toscrape.com']
	    start_urls = ['http://quotes.toscrape.com/']
	
	    def parse(self, response):
	        quotes = response.css('.quote')
	        for quote in quotes:
	            item = TutorialItem()
	
	            text = quote.css('.text::text').extract_first()
	            author = quote.css('.author::text').extract_first()
	            tags = quote.css('.tags .tags::text').extract()

5.并修改"TestSpider.py"文件中的"TestSpider"类型,修改支持递归调用下一页,代码如下:

#version 2.0 并修改"TestSpider.py"文件
	#TestSpider.py
	import scrapy
	from ProjectName.items import ProjectNameItem
	
	class TestSpider(scrapy.Spider):
	    name = 'test'
	    allowed_domains = ['quotes.toscrape.com']
	    start_urls = ['http://quotes.toscrape.com/']
	
	    def parse(self, response):
	        quotes = response.css('.quote')
	        for quote in quotes:
	            item = TutorialItem()
	
	            item['text'] = quote.css('.text::text').extract_first()
	            item['author'] = quote.css('.author::text').extract_first()
	            item['tags'] = quote.css('.tags .tags::text').extract()
	            yield item
	            next = response.css('.paper .next a::attr(href)').extract_first()
	            url = response.urljoin(next)
	            yield scrapy.Request(url=url,callback=self.parse)

6.将运行结果保存到指定类型的对应文件中,常见类型文件如csv、xml、jason、jsonlines等。

scrapy crawl Test -o Test.csv
scrapy crawl Test -o Test.jason
scrapy crawl Test -o Test.xml
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值