Не могу найти способ закрыть CSV-файл - PullRequest
0 голосов
/ 29 июня 2018

Я написал скрипт в 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])

1 Ответ

0 голосов
/ 29 июня 2018

Вместо этого вы можете закрыть сам файл:

Вы можете вызвать его в методе closed(), который автоматически вызывается при закрытии паука.

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