Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';我找不到任何方法来关闭csv文件_Python_Python 3.x_Csv_Web Scraping_Scrapy Spider - Fatal编程技术网

Python Can';我找不到任何方法来关闭csv文件

Python Can';我找不到任何方法来关闭csv文件,python,python-3.x,csv,web-scraping,scrapy-spider,Python,Python 3.x,Csv,Web Scraping,Scrapy Spider,我用python scrapy编写了一个脚本,从网页中获取不同的id及其对应的名称。当我执行脚本时,我可以看到结果正确地通过了,并且我得到了一个填充在csv文件中的数据。我使用的是Python3.6,所以当我使用scrapy的内置命令(意味着在csv文件中写入数据)时,我总是得到一个csv文件,每一行都有空行。然而,为了达到这个目的,我试着做了以下几点,它确实做到了。现在,它生成了一个csv文件来修复空行问题 我的问题:作业完成后,如何关闭csv文件 这是我迄今为止的尝试: import scr

我用python scrapy编写了一个脚本,从网页中获取不同的
id
及其对应的
名称。当我执行脚本时,我可以看到结果正确地通过了,并且我得到了一个填充在csv文件中的数据。我使用的是Python3.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])

您可以关闭实际文件:

您可以在
closed()
方法中调用它,该方法在spider关闭时自动调用

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

您可以关闭实际文件:

您可以在
closed()
方法中调用它,该方法在spider关闭时自动调用

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

感谢您的解决方案@nosklo。我也知道。然而,问题是我无法理解我应该将建议的行放在我的刮板中的确切位置。这个
reason
参数如何与其他方法关联?我指的是用例。谢谢。@MITHU scrapy框架提供了
reason
参数,其中包含蜘蛛关闭的原因。在这个特定的spider中不需要它,因此可以忽略它,但它对其他程序很有用。更多详细信息请参阅scrapy docs,感谢您的解决方案@nosklo。我也知道。然而,问题是我无法理解我应该将建议的行放在我的刮板中的确切位置。这个
reason
参数如何与其他方法关联?我指的是用例。谢谢。@MITHU scrapy框架提供了
reason
参数,其中包含蜘蛛关闭的原因。在这个特定的spider中不需要它,因此可以忽略它,但它对其他程序很有用。更多详细信息请参阅scrapy docs