我有一个带有4个div的HTML正文,其中包含div中的文本。我使用Scrapy Selectors删除文本并将其写入csv。但是,如果div没有文本,则选择器会跳过它。这很糟糕,因为结果需要匹配csv中的每一列。我需要空div来返回空字符串。
期望的结果是:
blah,blah,,blah
由于此要求,这不起作用:
csvfile.writerow(Selector(text=Z).xpath('//div/text()').extract())
,并提供:
blah,blah,blah
其中Z是html正文。
目前的代码是:
for sl in Selector(text=Z).xpath('//div'):
g = sl.xpath('./text()').extract()
jl.append(g)
csvfile.writerow(sum(jl,[]))
这几乎有效,但我得到了一份返回的列表:
[u'blah'],[u'blah'],[],[u'blah']
而不是所期望的:
blah,blah,,blah
如果我试图压扁列表:
csvfile.writerow(sum(jl,[]))
我回到了我开始的地方,从列表中删除了空字符串。
blah,blah,blah
答案 0 :(得分:2)
列表清单应该足够了,还有一步:
>>> e = [u'blah'],[u'blah'],[],[u'blah']
>>> [i[0] if i else '' for i in e]
['blah', 'blah', '', 'blah']
如果您需要单个字符串中的所有这些元素:
>>> ','.join(i[0] if i else '' for i in e)
'blah,blah,,blah'
csv.writerow()
需要一个list
,所以我不确定你真的想要一个字符串,但这里有两个选项。