【问题标题】:How to extract the text of a text node within an html dom through xpath?如何通过xpath提取html dom中文本节点的文本?
【发布时间】:2018-05-18 03:48:47
【问题描述】:

我正在尝试访问一个网络数据库,以了解他们对某些数学论文的分类。在下面的 HTML 中,“数学”将是所需的结果。类别还包括“应用数学”和“统计学”。具体来说,我想在这个在线数据库的不同网站上为许多不同的数学论文迭代执行此过程,但我无法搜索特定的 xpath,因为 xpath 因论文而异。

HTML 代码:

<p class="FR_field">
    <span class="FR_label">Web of Science Categories:</span>Mathematics</p>

例如,“数学”位于

//*[@id="records_form"]/div/div/div/div[1]/div/div[8]/p[2]/text()

对于该特定论文,但 p 标签或其中一个 div 标签的索引可能会因纸张而异。我写的查找类别的代码是

用于远程访问的 Python 代码:

driver.find_element_by_xpath("//*[contains(text(), 'Web of Science Categories:')]").text[26:]

但这似乎不起作用,如果我打印结果,它不会打印任何内容。可能是因为我尝试进行额外的文本拆分而遇到此错误吗?我只想要“数学”而不是“Web of Science 类别:数学”,所以我将结果拆分为 26 个字符。

编辑:所以经过一些进一步的测试,似乎我确实得到了结果,但它没有打印,因为我的 python 代码只看到“Web of Science Categories:”自然,在第 26 个字符处拆分这个字符串会打印没有。然而,这提出了如何实际获取“数学”而不是“科学网络类别”的新难题:

【问题讨论】:

  • 您的选择看起来不错。您可以删除切片部分并检查find_elements_by_xpath 以选择具有给定条件的所有元素吗?
  • 所以我删除了拆分,它让我看到代码只返回“Web of Science Categories:”,这解释了为什么我没有得到任何打印出来的东西。但这仍然引出了我将如何获得“数学”的问题
  • 是这样吗,实际的 P - 标签是您选择的直接父级?您可以使用 driver.find_element_by_xpath("//*[contains(text(), 'Web of Science Categories:')]/..").. 将允许获取直接父元素。

标签: python python-3.x selenium selenium-webdriver xpath


【解决方案1】:

根据您提供的用于提取文本 数学 的 HTML,您可以使用以下代码行:

text1 = driver.find_element_by_xpath("//p[@class='FR_field']").get_attribute("innerHTML").splitlines()[2]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2018-03-15
    • 2023-03-27
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多