选择元素的文本,而不是孩子的文本

时间:2018-09-27 01:11:13

标签: python-3.x selenium xpath web-scraping screen-scraping

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

<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>

首先(也是更不重要的一点),我不确定为什么从webpage中提取的以下文本与代码或实际页面中的文本不匹配?

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

这是实际在page上显示的文本。

#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,从而省去了编写顺序非常复杂的正则表达式的麻烦解析信息。

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

0 个答案:

没有答案