使用Xpath从具有ID的表中获取具有特定th值的tr

时间:2019-04-04 21:25:37

标签: python-3.x xpath lxml

我正在将python3.6与XPath库一起使用。桌子内爬行给我一个空列表。并且需要爬到特定的位置。

我的tr内容是动态生成的。我需要爬到具有特定th值的tr上。示例在HTML代码中,排名出现在第二个tr中,但它可以出现在tr中的任何位置。它没有特定的索引。需要从具有排名th的tr获得href。

我的html文件:

Long

Python代码:

   <tbody>
      <tr>
         <th class="a-color-secondary a-size-base prodDetSectionEntry">
            Product Number
         </th>
         <td class="a-size-base">
            B003NR57BY
         </td>
      </tr>

      <tr>
         <th class="a-color-secondary a-size-base prodDetSectionEntry">
             Rank
         </th>
         <td>
            <span>
            <span>#3 in <a href="/gp/bestsellers/pc/11036491/ref=pd_zg_hrsr_pc_1_1_last">Computer Mice</a></span>
            <br>
            </span>
         </td>
      </tr>

      <tr>
         <th class="a-color-secondary a-size-base prodDetSectionEntry">
            Created Date
         </th>
         <td class="a-size-base">
            June 7, 2010
         </td>
      </tr>
   </tbody>
</table>

我希望输出为

listings_details = parser.xpath(XPATH_PRODUCT_DETAILS)
   for row in listings_details:
      th = row.xpath("./th/text()")
      if th[0].strip() == 'Rank':
         categories = row.xpath("./td/span/span//text()")
         qid_url= row.xpath("./td/span/span//@href")

1 个答案:

答案 0 :(得分:2)

  

需要从具有排名th的tr获得href。

使用:

/table/tbody/tr[normalize-space(th)='Rank']/td//a/@href

注意:这适用于您提供的片段(格式良好)。您以后需要添加上下文来选择table元素。

<table> 
  <tbody> 
    <tr> 
      <th class="a-color-secondary a-size-base prodDetSectionEntry">Product Number</th>  
      <td class="a-size-base">B003NR57BY</td> 
    </tr>  
    <tr> 
      <th class="a-color-secondary a-size-base prodDetSectionEntry">Rank</th>  
      <td> 
        <span> 
          <span>#3 in 
            <a href="/gp/bestsellers/pc/11036491/ref=pd_zg_hrsr_pc_1_1_last">Computer Mice</a>
          </span>  
          <br/> 
        </span> 
      </td> 
    </tr>  
    <tr> 
      <th class="a-color-secondary a-size-base prodDetSectionEntry">Created Date</th>  
      <td class="a-size-base">June 7, 2010</td> 
    </tr> 
  </tbody> 
</table>

http://www.xpathtester.com/xpath/53808ee94dfbc5b38f12791cf857ffb9中测试