多个脚本/蜘蛛写入不同的CSV文件。此代码会引起任何问题吗?

时间:2019-08-13 23:29:44

标签: python scrapy

我正在构建一些Spider来进行网络抓取,并试图在开始构建它们之前弄清楚我的代码是否正确。蜘蛛程序将同时通过crontab运行,尽管它们各自写入一个单独的文件。

with open(item['store_name']+'price_list2.csv', mode='a', newline ='') as price_list2:       
    savepriceurl2 = csv.writer(price_list2, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    savepriceurl2.writerow([item['url']]+item['price'])

我不确定代码的“以price_list2打开”或“ savepriceurl2 = csv.writer”部分如何工作,并且即使它们使用相同的名称(即使对于不同的csv文件),蜘蛛也会混淆吗? ,如果它们都同时运行?

1 个答案:

答案 0 :(得分:0)

从发布的最少代码中很难说出两个是否存在问题。假设您发布的代码将在对象的每个实例中运行(我假设),那么它们将写入要剪贴的任何存储(由您的item['store_name']定义。

关于您对代码的疑问,open(...) as price_list2返回一个io.TextIOWrapper对象(详细信息here),该对象存储为变量price_list。您可以通过编写以下内容来实现相同目的:price_list2 = open(...)但是,必须关闭文件才能不泄漏内存/数据。但是,将其写为with open(...) as file:意味着您不必调用file.close(),从而确保文件在使用后始终关闭。

您询问的另一行savepriceurl2 = csv.writer(...)创建一个对象,该对象简化了对实际文件的写入。因此,您可以简单地使用对象函数writerow()轻松地将一行写入所需的文件。有关更多信息,请参见here

所以基本上,您的代码正在执行以下操作:

  1. 打开一个代表文件的对象。在您的情况下,您还指定了将附加到文件的位置(由于类型为'a')
  2. 创建一个csv编写器实例,该实例将使用定界符price_list2写入文件对象','(以及其他一些选项,请查看链接以获取详细信息)
  3. 告诉csv编写器向文件写入一行,该行是item['url']item['price']的值的串联

对于您的最后一个问题,鉴于您的实际设计和设置没有任何信息,我假设每个蜘蛛网都是保存此文件的类的实例。只要每个蜘蛛都去不同的站点(这意味着一个蜘蛛不会与另一个蜘蛛拥有item['store_name']是相同的,则您应该写入不同的文件。很好(我不知道在python中“同时”将两个文件写入文件的问题)。如果不是这种情况,那么如果您的Spider尝试同时写入同一文件,则会遇到问题。

作为一个提示,谷歌搜索功能通常比这里的帖子更快地获得功能的描述和说明,并且将提供更多信息。

我希望这对您有所帮助并为您澄清一些事情。