Scrapy - 如何使用空白元素防止输出行?

时间:2013-10-20 07:24:39

标签: python csv scrapy

使用非常基本的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”,那么它会停止任何重复的完整行,还是只复制单个项目?如果是后者,我该如何防止重复行?)

1 个答案:

答案 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)