我通过scrapy抓取xml数据,同时我想查看重复项。为此,我使用以下代码:
arr = []
for tr in response.xpath('/html/body/table[1]'):
if tr.xpath('tr/td/text()').extract() not in arr:
arr.append(tr.xpath('tr/td/text()').extract())
print arr
这会产生以下输出(演示数据):
[[u'test1', u'12', u'test2', u'12', u'test1', u'12', u'test2', u'12']]
但我希望得到以下输出:
[[test1, 12, test2, 12]]
所以,我想摆脱重复。谁能告诉我这里做错了什么?
提前Tnx
答案 0 :(得分:0)
尝试:
list(
chain(
*list(
{ e : 1 for e in list(zip_longest(*([iter(tr)] * 2), fillvalue=''))}.keys()
)))
它在重复的相同列表上创建一个iterable,因此它混合了两者的元素。然后我使用字典理解来删除从zip_longest()
生成的重复元组。 chain
使元组内的值变平,list()
耗尽了迭代。
我嘲笑你的xpath
命令的结果,因为你没有提供一个有效的完整例子。
from itertools import zip_longest, chain
#tr = response.xpath('/html/body/table[1]')
tr = ['test1', '12', 'test2', '12', 'test1', '12', 'test2', '12']
l = list(
chain(
*list(
{ e : 1 for e in list(zip_longest(*([iter(tr)] * 2), fillvalue=''))}.keys()
)))
print(l)
它产生:
['test2', '12', 'test1', '12']