📅  最后修改于: 2023-12-03 15:25:14.818000             🧑  作者: Mango
在使用 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
设置输出路径和文件名。
在 Scrapy 项目的 spiders
目录下,创建一个 my_spider.py
文件,并编写 Spider 代码。
import scrapy
class MySpider(scrapy.Spider):
name = 'my_spider'
# 其他代码,包括 start_urls、parse 方法等等
在 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 生效,需要在 Scrapy 项目的 settings.py
文件中添加以下代码:
ITEM_PIPELINES = {
'my_project.pipelines.MyPipeline': 300, # 指定 Pipeline 类及其优先级
}
其中,'my_project.pipelines.MyPipeline'
指定 Pipeline 类,300
是优先级,Scrapy 会按照优先级从低到高依次调用 Pipeline。
最后,在命令行中进入 Scrapy 项目根目录,执行以下命令启动 Spider:
scrapy crawl my_spider
Spider 运行完成后,可以在 data
文件夹中找到输出的 JSON 文件。