行百里者半九十——scrapy 框架(2)

scrapy 持久化存储(以糗事百科为例)

*
前言
基于终端指令的持久化存储
基于管道的持久化存储

前言

不知道大家还记得爬虫万能的三步骤吗?没错,那就是指定URL,发送请求,持久化保存数据。

我们前面在 scrapy框架(1)中简单了解了使用 scrapy 指定URL和发送请求,那么我们又要怎么使用 scrapy 实现数据的持久化存储呢?

scrapy 框架实现数据持久化存储的方法有两种,一种是基于终端命令的持久化存储;一种是基于管道的持久化存储。

基于终端指令的持久化存储

首先我们先创建相应的 scrapy 文件,用我们学过的方法完成指定URL和请求发送的步骤。

相关步骤如下

行百里者半九十——scrapy 框架(2)
scrapy 指定URL,发送指令的文件和代码如下:

配置文件 setting.py

行百里者半九十——scrapy 框架(2)
主代码 saveData.py
import scrapy

class SavedataSpider(scrapy.Spider):
    name = 'saveData'

    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):

        author_list = response.xpath('//div[@class="col1 old-style-col1"]/div/div[1]/a[1]/img/@alt').extract()

        for i in range(len(author_list)):
            path = '//div[@class="col1 old-style-col1"]/div[%s]/a[1]/div/span//text()' % str(i+1)
            content = response.xpath(path).extract()
            content = "".join(content)

        pass

接下就是基于终端指令的持久化存储了

基于终端指令的持久化存储:
    —— 要求:只可以将 parse 方法中的返回值存储到本地的文本文件中
    —— 注意:持久化存储的文本文件的类型只能是"json","jsonlines","jl","csv","xml"
    —— 指令:scrapy crawl xxx -o filePath
    —— 好处:简洁高效便捷
    —— 缺点:局限性比较强(数据只可以存储到指定后缀的文本文件中)

相关文件代码如下:

相关文件 items.py(其实自己加的代码并不多)


import scrapy

class QiushiItem(scrapy.Item):

    author = scrapy.Field()
    content = scrapy.Field()
    pass

主代码 saveData.py

import scrapy

class SavedataSpider(scrapy.Spider):
    name = 'saveData'

    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):

        author_list = response.xpath('//div[@class="col1 old-style-col1"]/div/div[1]/a[1]/img/@alt').extract()

        all_data = []
        for i in range(len(author_list)):
            path = '//div[@class="col1 old-style-col1"]/div[%s]/a[1]/div/span//text()' % str(i+1)
            content = response.xpath(path).extract()
            content = "".join(content)
            author = author_list[i]

            data = {
                "author": author,
                "content": content
            }

            all_data.append(data)

        return all_data

终端指令

行百里者半九十——scrapy 框架(2)
运行结果

行百里者半九十——scrapy 框架(2)

基于管道的持久化存储

我们可以发现基于终端指令的局限性其实很大,所以我们通常不使用基于终端命令的方法进行数据的持久化存储。那么就是基于管道的持久化存储了。

前期工作和基于终端的持久化存储一样。只是在配置文件要做出一点改变。

其中 items.py不需要改变。配置文件 settings.py基本不变,只需要打开管道就行

行百里者半九十——scrapy 框架(2)
先是管道文件 pipelines.py 的代码

from itemadapter import ItemAdapter

class QiushiPipeline:
    fp = None

    def open_spider(self, spider):
        print("开始爬虫......")
        self.fp = open("数据.txt", "a", encoding = "utf-8")

    def process_item(self, item, spider):
        author = item["author"]
        content = item["content"]

        self.fp.write("作者:" + author + "\n")
        self.fp.write("内容:" + content + "\n" + "\n")

        return item

    def close_spider(self, spider):
        print("爬虫结束!!!")
        self.fp.close()

然后是主代码 saveDate.py

import scrapy
from qiushi.items import QiushiItem

class SavedateSpider(scrapy.Spider):
    name = 'saveDate'

    start_urls = ['https://www.qiushibaike.com/text/']

    def parse(self, response):

        author_list = response.xpath('//div[@class="col1 old-style-col1"]/div/div[1]/a[1]/img/@alt').extract()

        item = QiushiItem()
        for i in range(len(author_list)):
            path = '//div[@class="col1 old-style-col1"]/div[%s]/a[1]/div/span//text()' % str(i + 1)
            content = response.xpath(path).extract()
            content = "".join(content)
            author = author_list[i]

            item["author"] = author
            item["content"] = content

            yield item

我们试着运行一下代码,结果如下:

行百里者半九十——scrapy 框架(2)
行百里者半九十——scrapy 框架(2)

Original: https://blog.csdn.net/ShiJieDeYinYu/article/details/118634609
Author: 世界的隐喻
Title: 行百里者半九十——scrapy 框架(2)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/791980/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • UNI-APP封装全局登录检查函数

    封装的函数主要用于检查用户是否登录 封装一个全局函数 在main.js文件下定义checkLogin全局函数,代码的注解都在代码块里面参数说明:backpage, backtype…

    Python 2023年6月10日
    088
  • flask执行python程序_怎么运行flask

    今天,我们学习python web中的flask框架,当然首先是安装flask pip install flask 然后用pycharm打开。新建项目里面的flask,自动创建,代…

    Python 2023年8月13日
    038
  • Django ORM 框架中的表关系,你真的弄懂了吗?

    ; Django ORM 框架中的表关系 为了说清楚问题,我们设计一个 crm 系统,包含五张表: 1.tb_student 学生表 2.tb_student_detail 学生详…

    Python 2023年8月4日
    047
  • 【机器学习】numpy实现Adam优化器

    💥 项目专栏:【Python实现经典机器学习算法】附代码+原理介绍 文章目录 前言 一、Adam优化原理 二、更新规则 三、迭代过程 四、代码实践 前言 👑 最近粉丝群中很多朋友私…

    Python 2023年8月25日
    058
  • Python数据分析中对DataFrame的数据分组处理groupby

    【小白从小学Python、C、Java】 【Python全国计算机等级考试】 【Python数据分析考试必会题】 ● 标题与摘要 Python数据分析中对DataFrame的 数据…

    Python 2023年8月19日
    0110
  • Scrapy源码学习-Middleware

    使用scrapy框架开发一款爬虫,或多或少都会用到中间件。常见的中间件有UserAgent中间件、代理中间件等等。其主要作用就是在爬虫请求的过程中,通过自定义内置的一些方法,来改变…

    Python 2023年10月3日
    040
  • python 为html页面增加背景_Pandas dataframe.to_html()-将背景色添加到头部

    您可以尝试以下两种方式:import pandas as pd import numpy as np Set up a DataFrame np.random.seed(24) d…

    Python 2023年8月19日
    036
  • python实现地理编码

    python实现地理编码 去高德地图申请好key python代码 -*- coding:utf_8 -*- !/usr/bin/python37 ""&quo…

    Python 2023年6月3日
    093
  • 从零教你使用MindStudio进行Pytorch离线推理全流程

    摘要:MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,该IDE上功能很多,涵盖面广,可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子…

    Python 2023年10月25日
    055
  • Android自定义ViewGroup的布局,往往都是从流式布局开始

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年10月9日
    052
  • Hello world.

    Loading 雷猴啊,我是SomeBottle 测试一下cnblogs支不支持折叠块: 折叠块 这里是折叠内容哦~ posted @2021-10-17 16:17 SomeBo…

    Python 2023年6月3日
    072
  • django

    URL 介绍 URL定义 URL 即统一资源定位符 Uniform Resource Locator 作用: 用来表示互联网上某个资源的地址。 说明: 互联网上的每个文件都有一个唯…

    Python 2023年8月6日
    044
  • 【Python模块】- Numpy在AI中的应用

    Numpy在AI中的应用 * – 1. 随机数(数组)操作 – 2. 线性代数 – 3. Numpy IO – 4. 计算激活函数 …

    Python 2023年8月25日
    058
  • 小姐姐手把手教你Python数据分析:第二课实践——Pandas基础

    ; Pandas Pandas是Python中用于数据处理和分析的库,尤其对于大数据行业的数据清洗很有帮助。 通过带有标签的列和索引,Pandas 使我们可以以一种所有人都能理解的…

    Python 2023年8月20日
    052
  • RDD的五大特性

    1.分区列表(a list of partitions)。Spark RDD是被分区的,每一个分区都会被一个计算任务(Task)处理,分区数决定并行计算数量,RDD的并行度默认从父…

    Python 2023年6月3日
    073
  • 5.1 Python基础

    5.1 Python基础 1. Python入门 * 1.1 Python语言介绍 1.2 安装及配置 1.3 交互式编程 1.4 Python开发工具 2. 核心语法 * 2.1…

    Python 2023年9月24日
    026
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球