使用scrapy pipelin写入文件

2024-09-29 21:22:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用scrapy pipelines.py解析一个文件,item被正确解析,当我运行时它显示在终端中。 这是我的皮普莱恩斯

import datetime,csv

class AmazonfullPipeline(object):
    keys = ["Product_Name","Price","Amazon_Stock","rating","ASIN","Rank1","Rank1_category","Rank2","Rank2_category",
    "UPC","Item_Model_Number"]

    def __init__(self):
        now = datetime.datetime.now()
        current_date = now.strftime("%d%b")
        file_name = "TestFile"
        infile = open("{}_{}.csv".format(current_date,file_name),"w").close()
        dict_writer = csv.DictWriter(infile, self.keys)
        dict_writer.writeheader()
    def process_item(self, item, spider):
        self.dict_writer.writerow(item)

错误消息:

dict_writer = csv.DictWriter(infile, self.keys)
  File "/usr/lib/python3.6/csv.py", line 140, in __init__
    self.writer = writer(f, dialect, *args, **kwds)
TypeError: argument 1 must have a "write" method

Tags: csvpyselfdatetimeinitdefkeysitem
1条回答
网友
1楼 · 发布于 2024-09-29 21:22:01

您有几个问题:

  1. 使用前关闭文件描述符
  2. 您没有设置类变量。在{}中使用{},而不是{}

检查代码:

import datetime,csv

class AmazonfullPipeline(object):
    keys = ["Product_Name","Price","Amazon_Stock","rating","ASIN","Rank1","Rank1_category","Rank2","Rank2_category",
    "UPC","Item_Model_Number"]

    def __init__(self):
        now = datetime.datetime.now()
        current_date = now.strftime("%d%b")
        file_name = "TestFile"
        infile = open("{}_{}.csv".format(current_date,file_name),"w")  # <- remove close() here
        self.dict_writer = csv.DictWriter(infile, self.keys)  # <- add self. here
        self.dict_writer.writeheader()  # <- add self. here

    def process_item(self, item, spider):
        self.dict_writer.writerow(item)

相关问题 更多 >

    热门问题