【问题标题】:Can't find any way to close a csv file找不到任何方法来关闭 csv 文件
【发布时间】:2018-06-29 18:51:53
【问题描述】:

我在 python scrapy 中编写了一个脚本,以从网页中获取不同的ids 及其对应的names。当我执行我的脚本时,我可以看到结果是正确的,并且我得到了一个填充在 csv 文件中的数据。我使用的是 python 3.6,所以当我使用 scrapy 的内置命令(用于将数据写入 csv 文件)时,我总是会得到一个 csv 文件,其中每一行都有空行。但是,我尝试了以下方法来达到目的,并且它确实有效。现在,它会生成一个修复空白行问题的 csv 文件。

我的问题:工作完成后如何关闭 csv 文件?

这是我目前的尝试:

import scrapy, csv

class SuborgSpider(scrapy.Spider):
    name = "suborg"

    start_urls = ['https://www.un.org/sc/suborg/en/sanctions/1267/aq_sanctions_list/summaries?type=All&page={}'.format(page) for page in range(0,7)]

    def __init__(self):
        self.file = open("output.csv", "w", newline="")

    def parse(self, response):
        for item in response.xpath('//*[contains(@class,"views-table")]//tbody//tr'):
            idnum = item.xpath('.//*[contains(@class,"views-field-field-reference-number")]/text()').extract()[-1].strip()
            name = item.xpath('.//*[contains(@class,"views-field-title")]//span[@dir="ltr"]/text()').extract()[-1].strip()
            yield{'ID':idnum,'Name':name}
            writer = csv.writer(self.file)
            writer.writerow([idnum,name])

【问题讨论】:

    标签: python python-3.x csv web-scraping scrapy-spider


    【解决方案1】:

    您可以改为关闭实际文件:

    您可以在蜘蛛关闭时自动调用的closed() 方法中调用它。

    def closed(self, reason):
        self.file.close()
    

    【讨论】:

    • 感谢您的解决方案@nosklo。我也知道。但是,问题是我不明白我应该将建议的行放在我的刮刀中的确切位置。
    • 这个reason 参数如何与其他方法相关联?我的意思是用例。谢谢。
    • @MITHU scrapy 框架提供了 reason 参数,其中包含蜘蛛关闭的原因。在这个特定的蜘蛛中不需要它,因此可以忽略它,但它对其他程序很有用。更多细节在scrapy docs doc.scrapy.org/en/latest/topics/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多