Scrapy 不在 Jupyter Notebook 上保存 json 文件

问题描述 投票:0回答:1

我在 Jupyter Notebook 中创建了一个脚本,该脚本会废弃一个 url 并应将结果保存在 json 文件中,但它没有这样做,即使在日志中它说它这样做了。我正在使用 Google Drive 保存文件并且它已正确安装。

我把代码留给了你,尽管我认为问题可能出在FEEDS中,因为在日志中我看到它已经选择了它必须捕获的所有行。

非常感谢您的帮助。

import scrapy
from scrapy.crawler import CrawlerProcess


class DatosSpider(scrapy.Spider):
    name = 'spider_datos'
    start_urls = ['URL']
    custom_settings = {
        'FEEDS': { 'data.json': { 'format': 'json', 'overwrite': True}}
    }

        def parse(self, response):
            events = response.xpath('//*[@id="PageContent"]/div[3]/table/tbody/tr')
            for event in events:
                dato1 = event.xpath('.//td[1]/text()').get()
                dato2 = event.xpath('.//td[2]/text()').get()

            datos = {
                'Dato 1': dato1.strip() if dato1 else None,
                'Dato 2': dato2.strip() if dato2 else None,
            }

        yield datos
        
process = CrawlerProcess()
process.crawl(DatosSpider)
process.start()
python python-3.x jupyter-notebook scrapy
1个回答
0
投票

以下代码经过测试并且可以工作(尽管为什么要使用 Scrapy 来处理该页面中的单条数据?

import scrapy
from scrapy.crawler import CrawlerProcess


class DatosSpider(scrapy.Spider):
    name = 'spider_datos'
    start_urls = ['https://geoinfo.nmt.edu/nmtso/events/home.cfml']
    custom_settings = {
        'FEEDS': { 'data.json': { 'format': 'json', 'encoding': 'utf-8', 'overwrite': True}}
    }

    def parse(self, response):
        events = response.xpath('//*[@id="PageContent"]/div[3]/table/tbody/tr')
        for event in events:
            dato1 = event.xpath('.//td[1]/text()').get()
            dato2 = event.xpath('.//td[2]/text()').get()

        datos = {
            'Dato 1': dato1.strip() if dato1 else None,
            'Dato 2': dato2.strip() if dato2 else None,
        }

        yield datos
        
process = CrawlerProcess()
process.crawl(DatosSpider)
process.start()

结果是一个如下所示的 JSON 文件:

[
{"Dato 1": "2022-11-30 15:40:32.0", "Dato 2": "32.640"}
]
© www.soinside.com 2019 - 2024. All rights reserved.