使用XPath获取带有span的段落的完整文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用XPath获取带有span的段落的完整文本相关的知识,希望对你有一定的参考价值。

<ul>
  <li class="xyz">
    <div class="divClass">
      <span class="ContentItem---status---dL0iS">
        <span>Success</span>
      </span>
      <p class="ContentItem---title---37IqA">
        <span>Test Check</span>
        : Please display the text
      </p>
    </div>
  </li>
  <li class="xyz">
    <div class="divClass">
      <span class="ContentItem---status---dL0iS">
    <span>Not COMPLETED</span>
      </span>
      <p class="ContentItem---title---37IqA">
        <span>Knowledge</span> A Team
      </p>
    </div>
  </li>
  .... and so on
</ul>

这是我的html结构。我在段落标记内的Span和Test Check中有这个文本: Please display the text。我需要的是,我需要确定我的结构是否包含这个完整的文本或Test Check: Please display the text

我尝试了多种方法,无法确定完整的路径。请找到我尝试的方式//span[text()='Test Check']/p[text()=': Please display the text']你能为我提供xpath吗?

答案

我认为有一种可能的解决方案可以在给定的html文本中进行识别和检索。我希望这能解决你的问题。

def get_tag_if_present(html_text):
    soup_obj = BeautifulSoup(html_text,"html.parser")
    test_check = soup_obj.find_all(text = re.compile(r"Test Check"))
    result_val = "NOT FOUND"
    if test_check:
        for each_value in test_check:
            parent_tag_span = each_value.parent
            if parent_tag_span.name == "span":
                parent_p_tag = parent_tag_span.parent
                if parent_p_tag.name == "p" and "Please display the text" in parent_p_tag.get_text():
                    result_val = parent_p_tag
                    break
    return result_val

返回的result_val将具有与带有参数的p标记元素对应的标记。如果不存在这样的元素,它将返回NOT FOUND。我假设相应的数据条目分别存在于“p”标签和“span”标签中,并随意删除给定html文本中文本的所有标识的所述条件。

以上是关于使用XPath获取带有span的段落的完整文本的主要内容,如果未能解决你的问题,请参考以下文章

Xpath获取两个a标签之间p内的所有文本

如何用bs或者xpath获取指定标签下的某一标签的所有文本?

获取元素内的段落文本

xpath获取当前标签下的所有文本

使用 Xpath (HtmlXPathSelector) 获取父子文本

使用 XPath 获取 HTML 元素的文本内容?