首页 > 解决方案 > 选择元素的文本,但不选择子项的文本

问题描述

我发现自己遇到了以下代码,我试图从中抓取某些信息,例如文本和超链接:

<td class="value">
  #1 in Musical Instruments, Stage &amp; Studio (<a href="https://www.amazon.ca/gp/bestsellers/musical-instruments/ref=pd_dp_ts_musical-instruments_1">See top 100</a>)
  <ul class="zg_hrsr">
    <li class="zg_hrsr_item">
      <span class="zg_hrsr_rank">#1</span>
      <span class="zg_hrsr_ladder">in&nbsp;<a href="https://www.amazon.ca/gp/bestsellers/musical-instruments/16596681011/ref=pd_zg_hrsr_musical-instruments_1_1_last">Studio Headphones</a></span>
    </li>
  </ul>
</td>

首先 - 不太重要 - 我不确定为什么下面的文本(从网页中提取)与代码或实际页面中的文本不匹配?

#1 in Musical Instruments, Stage & Studio (See top 100)
#1 in Musical Instruments, Stage & Studio > Studio Recording Equipment > Headphones & In-Ear Monitors > Headphones

这是实际页面上显示的文本。

#1 in Musical Instruments, Stage & Studio (See top 100)
#1 in Studio Headphones

这是我的脚本中从网页中提取文本的部分。

rank_categories = ff.find_elements(By.XPATH, '//*[@id="SalesRank"]/td[2]')
if len(rank_categories) > 0:
    rank_categories = rank_categories[0].text
else:
    rank_categories = ff.find_element(By.XPATH, '//*[@id="SalesRank"]').text

# rank_categories is td.value

最后——也是最重要的——有什么方法可以提取给定元素的文本,同时排除或不选择子元素的文本?

在上面的示例中,我希望能够分别提取#1 in Musical Instruments, Stage & Studio (See top 100)#1in Studio Headphones,以省去编写极其复​​杂的正则表达式以解析信息的麻烦。

有没有办法只选择所选元素的文本而不选择其子元素的文本?

标签: python-3.xseleniumxpathweb-scrapingscreen-scraping

解决方案


推荐阅读