使用非常基本的Scrapy脚本,我想确保没有任何输出行包含空白项目。
也就是说,我有标准
items = []
for list in lists:
item = TypeItem()
item['thing1'] = list.select('h1/text()').extract()
item['thing2'] = list.select('h2/text()').extract()
item['thing3'] = list.select('h3/text()').extract()
items.append(item)
return(items)
我想阻止任何说“thing1,,thing3”或“,thing2”等的csv行。
(我是stackoverflow的新手,所以我不知道一次提出多个问题是否合适,但是因为它们是相关的,如果可以的话:
Q2:如果我在items.append(item)之前选中“if item in items”,那么它会停止任何重复的完整行,还是只复制单个项目?如果是后者,我该如何防止重复行?)
答案 0 :(得分:0)
对于 Q2 ,我认为它不会停止重复,因为它们是对象(类的实例)而且都是不同的。您应该将其子类化并实现__eq__()
。
使用csv
解析器检索所有元素后,您可以实现该目标,不是吗?
此外,您可以将xpath
结果保存到变量并检查它是否为空,如:
thing1 = list.select('h1/text()').extract()[0]
if thing1.strip():
...
另外,您可以使用额外的xpath
表达式来检查您的文本是否都是空白的,例如:
items = []
for list in lists:
if list.select('.[h1[text()] and h2[text()] and h3[text()]]'):
item = TypeItem()
item['thing1'] = list.select('h1/text()').extract()
item['thing2'] = list.select('h2/text()').extract()
item['thing3'] = list.select('h3/text()').extract()
items.append(item)
return(items)