【问题标题】:Using XPath to get complete text of paragraph with span inside使用 XPath 获取包含跨度的段落的完整文本
【发布时间】:2018-04-09 08:59:16
【问题描述】:
<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,在 Paragraph 标记中有 : Please display the text。 我需要的是,我需要确定我的结构是否包含这个完整的文本Test Check: Please display the text

我尝试了多种方法,但无法识别完整路径。请找到我尝试过的方法 //span[text()='Test Check']/p[text()=': Please display the text'] 你能给我这个xpath吗?

【问题讨论】:

  • 试试这个//span[.="Success"]/following-sibling::p/normalize-space()
  • 试试//p[normalize-space() = 'TestCheck : Please display the text ']//p[span = 'Test Check' and text()[normalize-space() = ' : Please display the text ']]

标签: xpath


【解决方案1】:

我认为有一种可能的解决方案可以在给定的 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 文本中所有文本标识的上述条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多