我在scrapy中使用python蜘蛛来解析页面,除了从表中提取外,一切正常。它从表中提取数据,但多次重复。
所以对于表格来说:
<tbody><tr>
<td><b>Name</b></td>
<td><b>Role</b></td>
</tr>
<tr style="background-color:#C0C0C0; color:Black;">
<td>Name 1</td>
<td>No Party</td>
</tr>
<tr style="background-color:#C0C0C0; color:Black;">
<td>Eny</td>
<td>Party</td>
</tr>
<tr style="background-color:#C0C0C0; color:Black;">
<td>Cory</td>
<td>Party</td>
</tr>
</tbody>
所以我需要从具有第二方的表中获取字符串,将它们组合并写为一个字符串 我会像这样编写解析器:
raw_data['names'] = process_string(", ".join(page.xpath('//tr[td="Party"]/td[1]/text()').extract()))
结果我得到了:
Eny,Cory,Ent,Cory,Eny,Cory,Eny,Cory
所以它重复正确的结果4次。 在脚本中没有重复,其他字段工作完美,所以它没有错误的脚,它只是这个表达式。 我尝试了不同的xpath但结果是一样的。表有什么不同?
答案 0 :(得分:0)
我不是XPath的专家,所以这里是用CSS选择器做到这一点的方法:
names_list = [row.css('td:nth-child(1)::text').extract_first()
for row in s.css('tr')
if row.css('td:nth-child(2)::text').extract_first() == 'Party']
raw_data['names'] = ', '.join(names_list)