千家信息网

Python的Scrapy框架简单介绍和实例用法

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容介绍了"Python的Scrapy框架简单介绍和实例用法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够
千家信息网最后更新 2026年11月04日Python的Scrapy框架简单介绍和实例用法

本篇内容介绍了"Python的Scrapy框架简单介绍和实例用法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

目录
  • Scrapy框架简单介绍

  • 创建Scrapy项目

  • 创建Spider爬虫

  • Spider爬虫提取数据

  • items.py代码定义字段

  • fiction.py代码提取数据

  • pipelines.py代码保存数据

  • settings.py代码启动爬虫

  • 结果展示

Scrapy框架简单介绍

Scrapy框架是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,是提取结构性数据而编写的应用框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,我们只需要少量的代码就能够快速抓取数据。

其框架如下图所示:

Scrapy Engine是整个框架的核心,而涉及到我们编写代码的模块一般只有Item Pipeline模块和Spiders模块。

创建Scrapy项目

首先我们通过以下代码来创建Scrapy项目,执行代码如下图所示:

Scrapy startproject Fiction

运行结果如下图所示:

通过上图可知,我们在C盘创建了一个新的Scrapy项目,项目名为Fiction,而且还提示我们可以通过以下命令创建第一个Spider爬虫,命令如下所示:

cd Fiction          #进入目录scrapy genspider example example.com    #创建spider爬虫

其中example是我们爬虫名,example.com是爬虫爬取的范围,也就是网站的域名。

Fiction文件夹内容如下图所示:

创建Spider爬虫

在上面的步骤我们成功创建了一个Scrapy项目,而且知道如何创建Spider爬虫,接下来我们创建名为fiction的Spider爬虫,其域名为www.17k.com,代码如下所示:

scrapy genspider fiction www.17k.com

运行后,spiders文件夹中多了我们刚才创建fiction.py,这个就是我们创建的Spider爬虫。

如下图所示:

看到这么多py文件是不是慌了,其实不用慌,一般情况我们主要在刚创建的spider爬虫文件、items.py和pipelines.py进行编写代码,其中:

  • fiction.py:主要编写代码定义爬取的逻辑,解析响应并生成提取结果和新的请求;

  • items.py:主要先定义好爬取数据的字段,避免拼写错误或者定义字段错误,当然我们可以不先定义好字段,而在fiction.py中直接定义;

  • pipelines.py:主要是编写数据清洗、验证和存储数据的代码,当我们把数据存储在csv、xml、pickle、marshal、json等文件时,就不需要在pipelines.py中编写代码了,只需要执行以下代码即可:

scrapy crawl fiction 文件名.后缀

当数据需要保存在MongoDB数据库时,则编写以下代码即可:

from pymongo import  MongoClientclient=MongoClient()collection=client["Fiction"]["fiction"]class Test1Pipeline:    def process_item(self, item, spider):        collection.insert(item)        return item

Spider爬虫提取数据

在提取数据前,首先我们进入要爬取小说网站并打开开发者工具,如下图所示:

我们通过上图可以发现,

存放着我们所有小说章节名,点击该章节就可以跳转到对应的章节页面,所以可以使用Xpath来通过这个div作为我们的xpath爬取范围,通过for循环来遍历获取每个章节的名和URL链接。

跳转章节内容页面后,打开开发者工具,如下图所示:

通过上图可以发现,小说内容存储在

里面,我们可以通过for循环来遍历该dl中的
获取到章节的全部内容,当然也是通过使用Xpath来获取。

items.py代码定义字段

细心的小伙伴就发现了,我们所需要提前的字段有章节名、章节URL链接和章节内容,其中章节名和章节内容是需要进行数据保存的,所以可以先在items.py文件中定义好字段名,具体代码如下所示:

import scrapyclass FictionItem(scrapy.Item):    # define the fields for your item here like:    name = scrapy.Field()    text = scrapy.Field()

定义字段很简单,字段名=scrapy.Field()即可。

对了,在items.py定义好字段有个最好的好处是当我们在获取到数据的时候,使用不同的item来存放不同的数据,在把数据交给pipeline的时候,可以通过isinstance(item,FictionItem)来判断数据属于哪个item,进行不同的数据(item)处理。

定义好字段后,这是我们通过在pipeline.py文件中编写代码,对不同的item数据进行区分,具体代码如下:

from Fiction.items import FictionItemclass FictionPipeline:    def process_item(self, item, spider):        if isinstance(item,FictionItem):            print(item)

当然,在我们爬取的项目中,只需要一个class类,在上面的代码只是为了展示如何判断区分数据属于哪个item。

fiction.py代码提取数据

fiction.py文件也就是我们创建的spider爬虫,打开fiction.py文件,其代码内容如下所示:

import scrapyclass FictionSpider(scrapy.Spider):    name = 'fiction'    allowed_domains = ['www.17k.com']    start_urls = ['http://www.17k.com/']    def parse(self, response):        pass

其中:

  • name是定义此爬虫名称的字符串,每个项目唯一的名字,用来区分不同的Spider,启动爬虫时使用scrapy crawl +该爬虫名字;

  • allowed_domains是允许爬取的域名,防止爬虫爬到其他网站;

  • start_urls是最开始爬取的url;

  • parse()方法是负责解析返回响应、提取数据或进一步生成要处理的请求,注意:不能修改这个方法的名字。

大致了解该文件内容的各个部分后,我们开始提取首页的章节名和章节URL链接,具体代码如下所示:

import scrapyfrom Fiction.items import FictionItemclass FictionSpider(scrapy.Spider):    name = 'fiction'    allowed_domains = ['www.17k.com']    start_urls = ['https://www.17k.com/list/2536069.html']    def parse(self, response):        html = response.xpath('//dl[@class="Volume"]')        books = html.xpath('./dd/a')        for book in books:            item =FictionItem()            item['name'] = []            name = book.xpath('./span/text()').extract()            for i in name:                item['name'].append(i.replace('\n', '').replace('\t', ''))            href = book.xpath('./@href').extract_first()            href = 'https://www.17k.com' + href            yield scrapy.Request(url=href, callback=self.parse_detail, meta={'item': item})

首先导入FictionItem,再我们把start_urls链接修改为待会要爬的URL链接,在parse()方法中,使用xpath获取章节名和章节URL链接,通过for循环调用FictionItem(),再把章节名存放在item里面。

通过生成器yield 返回调用scrapy.Request()方法,其中:

  • url=href:表示下一个爬取的URL链接;

  • callback:表示指定parse_detail函数作为解析处理;

  • meta:实现在不同的解析函数中传递数据。

在上一步中我们指定了parse_detail函数作为解析处理,接下来将编写parse_detail函数来获取章节内容,具体代码如下所示:

def parse_detail(self,response):        string=""        item=response.meta['item']        content=response.xpath('//*[@id="readArea"]/div[1]/div[2]//p/text()').extract()        for i in content:            string=string+i+'\n'        item['text']=string        yield item

首先我们定义了一个空变量string,在通过response.meta[]来接收item数据,其参数为上一步中的meta={'item': item}的item,接下来获取章节内容,最后将章节内容存储在item['text']中,并通过生成器yield返回数据给引擎。

pipelines.py代码保存数据

章节名和章节内容已经全部获取下来了,接下来我们把获取下来的数据保存为txt文件,具体代码如下所示:

from Fiction.items import FictionItemimport timeclass FictionPipeline:    def open_spider(self, spider):        print(time.time())    def process_item(self, item, spider):        if isinstance(item, FictionItem):            title = item['name']            content = item['text']            with open(f'小说/{title[0]}.txt', 'w', encoding='utf-8')as f:                f.write(content)    def close_spider(self, spider):        print(time.time())

首先我们导入FictionItem、time,在open_spider()和close_spider()方法编写代码调用time.time()来获取爬取的开始时间和结束时间,再在process_item()方法中,把引擎返回的item['name']和item['text']分别存放在title和content中,并通过open打开txt文件,调用write()把章节内容写入在txt文件中。

settings.py代码启动爬虫

在启动爬虫前,我们先要在settings.py文件中启动引擎,启动方式很简单,只要找到下图中的代码,并取消代码的注释即可:

有人可能问:那User-Agent在哪里设置?我们可以在settings.py文件中,设置User-Agent,具体代码如下:

好了,所有代码已经编写完毕了,接下来将启动爬虫了,执行代码如下:

scrapy crawl fiction

启动爬虫后,发现我们控制台里面多了很多log日志数据的输出,这时可以通过在settings.py添加以下代码,就可以屏蔽这些log日志:

LOG_LEVEL="WARNING"

结果展示

"Python的Scrapy框架简单介绍和实例用法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

代码 数据 爬虫 章节 文件 内容 字段 框架 项目 链接 不同 接下来 方法 处理 函数 可以通过 小说 模块 结果 网站 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技工作委员会副主任毛军 云信互联网科技有限公司 关于新基建和互联网科技 北京互联网科技 西安互联网科技公司 互联网科技大会案例 汉立互联网科技有限公司联系电话 济南和联互联网科技有限公司 互联网科技项目计划书材料类 上海宁丞科技互联网 宜昌元轩互联网科技有限公司 互联网科技研发水平 烟台灵鸽互联网科技有限公司 科技互联网海报 中国互联网有什么科技 产业互联网科技服务公司 上海创道互联网络科技有限公司 杭州融税互联网科技有限公司 优雇互联网科技有限公司 颐高云石互联网科技 广州百单互联网科技有限公司 互联网科技巨头监管 互联网与科技发展 互联网金融公司科技 互联网科技公司官网 华中科技大学互联网 东莞新华互联网科技学校 山东子淼互联网科技有限公司 怎样加入科技互联网 南京一网一红互联网科技有限公司
0