从表中重复蜘蛛结果

时间:2018-06-08 13:39:07

标签: python html scrapy scrapy-spider

我在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但结果是一样的。表有什么不同?

1 个答案:

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