python - 使用scrapy管道写入文件
问题描述
我正在尝试使用scrapy pipelines.py 的文件item
被正确解析,并在我运行时显示在终端中。这是我的 pipleines.py
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
解决方案
你有几个问题:
- 您在使用前关闭文件描述符;
- 您没有设置类变量。使用
self.dict_writer
,而不是dict_writer
在__init__
。
校验码:
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)
推荐阅读
- visual-studio-code - angular 7 array push() 方法在 Visual Studio 代码中显示错误警告但运行正常
- reactjs - 如果定义了其他属性,则打字稿需要该属性(requiredIf)
- java - 当我移动到 TabLayout 索引 2 时,Getdata SQLite 错误
- javascript - 数组重新循环以删除先前生成的一组数组数据
- c# - 在 ASP.NET Core 中下载远程 PDF 时未配置设备
- oracle - SUBQUERIES数据库Oracle上的无效标识符
- python - 将嵌套字典元素移动到顶层并让剩余的嵌套元素值跟随 | 蟒蛇 | 姜戈
- python-3.x - 如何使用 colorama 将 Python 背景更改为某种颜色?
- swift - 如何在 Swift 4 中访问扩展
- docker - 容器级别的 GPU 统计信息