所以我让我的小蜘蛛工作得很好。我正在按预期获取所有数据。我利用设置我的items.py来捕获我想要的7条数据。而且我可以将数据写到文件中。但是我现在遇到的问题是,我需要按照我们具有items.py设置的顺序将数据捕获到1个输出文件中。 Cant似乎想出了如何创建不存在的文件(站点名称和日期使其成为唯一的文件名)
这是我目前所拥有的,但是这会为每个被抓取的页面/ URL创建一个文件,我希望将所有这些内容合并到我们抓取的每个站点1个文件中。
我不喜欢使用itmDetails2格式化数据的方法,除非那是唯一的方法,但是我认为正弦dets []是我的items.py值列表,我可以简单地在其中存储每个集合,然后编写dets []转换为csv。
任何人都可以指出完成即时尝试的一个很好的例子吗?我找到了python / web抓取备忘单,并尝试了用于保存数据的示例,但是没有用
https://blog.hartleybrody.com/web-scraping-cheat-sheet/
itmDetails2 = dets['sku'] +","+ dets['description']+","+ dets['price']+","+ dets['brand']+","+ dets['compurl']+","+ dets['reviewcount']+","+ dets['reviewrating']
filename = 'dsg-%s.txt' % dets['description']
with open(filename, 'w') as f:
for its in itmDetails2:
f.write(str(its))
这是我的items.py文件,因为即时消息会在每个废话循环中捕获所有或大部分日期,所以如何将每个设置作为逗号分隔的行写到csv中?
import scrapy
class Dsg2Item(scrapy.Item):
description = scrapy.Field()
sku = scrapy.Field()
price = scrapy.Field()
brand = scrapy.Field()
compurl = scrapy.Field()
reviewcount = scrapy.Field()
reviewrating = scrapy.Field()
答案 0 :(得分:0)
这里的问题是,打开文件时您正在使用w
参数。这将导致文件每次被截断为零(内容被删除)。在Python中,属性与C standard library function fopen()相同。
w
截短为零长度或创建要写入的文本文件。的 流位于文件的开头。
您应该改用a+
,它将打开文件并将内容附加到末尾,而不是截断现有内容:
a+
开放供阅读和写作。如果没有创建该文件 存在。流位于文件的末尾。 Subse- 对文件的后续写入将始终以当时的状态结束 文件结尾,无论是否有任何fseek(3)或类似内容。
示例:
itmDetails2 = dets['sku'] +","+ dets['description']+","+ dets['price']+","+ dets['brand']+","+ dets['compurl']+","+ dets['reviewcount']+","+ dets['reviewrating']
filename = 'dsg-%s.txt' % dets['description']
localLog = open(filename,"a+")
localLog.write(itmDetails2+"\r\n")
localLog.close()
我将进一步指出,每次创建一个新文件的原因是因为您正在根据描述创建文件名。如果您只需要一个文件名,请不要添加说明。
示例:
itmDetails2 = dets['sku'] +","+ dets['description']+","+ dets['price']+","+ dets['brand']+","+ dets['compurl']+","+ dets['reviewcount']+","+ dets['reviewrating']
localLog = open("dsg-all.txt","a+")
localLog.write(itmDetails2+"\r\n")
localLog.close()
答案 1 :(得分:0)
您可以使用csvwriter或在写入文件时使用附加模式。 也有tinydb用于本地json存储