📜  将 Scrapy Python输出写入 JSON 文件(1)

📅  最后修改于: 2023-12-03 15:25:14.818000             🧑  作者: Mango

将 Scrapy Python 输出写入 JSON 文件

在使用 Scrapy 爬取网站数据时,需要将数据输出到文件,在这里介绍如何将输出的数据写入到 JSON 文件中。

准备工作

首先,需要在 Scrapy 项目根目录下创建一个 data 文件夹,用于存放输出的 JSON 文件。然后,在 Scrapy 项目的 settings.py 文件中添加以下代码:

FEED_FORMAT = 'json'  # 设置输出格式为JSON
FEED_URI = 'data/%(name)s_%(time)s.json'  # 设置输出路径和文件名

其中,FEED_FORMAT 设置输出格式为 JSON,FEED_URI 设置输出路径和文件名。

编写 Spider

在 Scrapy 项目的 spiders 目录下,创建一个 my_spider.py 文件,并编写 Spider 代码。

import scrapy

class MySpider(scrapy.Spider):
    name = 'my_spider'
    
    # 其他代码,包括 start_urls、parse 方法等等
编写 Pipeline

在 Scrapy 项目的 pipelines.py 文件中,创建一个 Pipeline 类,并实现 process_item 方法。在该方法中,将输出的数据写入到 JSON 文件中。

import json

class MyPipeline:
    def __init__(self):
        self.file = open('data/my_spider.json', 'wb')  # 打开文件
        
    def process_item(self, item, spider):
        line = json.dumps(dict(item)) + "\n"  # 将 item 转换为 JSON 字符串
        self.file.write(line.encode())  # 写入文件
        return item
        
    def close_spider(self, spider):
        self.file.close()  # 关闭文件

在 Pipeline 类中,__init__ 方法中打开输出文件,process_item 方法中将数据转换为 JSON 字符串并写入文件,close_spider 方法中关闭输出文件。

激活 Pipeline

要想 Pipeline 生效,需要在 Scrapy 项目的 settings.py 文件中添加以下代码:

ITEM_PIPELINES = {
    'my_project.pipelines.MyPipeline': 300,  # 指定 Pipeline 类及其优先级
}

其中,'my_project.pipelines.MyPipeline' 指定 Pipeline 类,300 是优先级,Scrapy 会按照优先级从低到高依次调用 Pipeline。

运行 Spider

最后,在命令行中进入 Scrapy 项目根目录,执行以下命令启动 Spider:

scrapy crawl my_spider

Spider 运行完成后,可以在 data 文件夹中找到输出的 JSON 文件。