XPath循环遍历<ul>的<li>元素,并从python

时间:2017-09-18 19:14:20

标签: python xpath

我已经看到了这个问题的变体,但不是我可以操纵以便开始工作的答案。我试图找出如何遍历文本列表并使用XPath从每个列表项中提取两个单独的值。我可以为一个项目做这件事,但我仍然坚持如何在一个循环中做到这一点。 以下是我正在使用

的示例片段
<ul>
  <li>
    <span class="main content">
      <span class="nested content">123</span>abc
    </span>
  </li>
  <li>
    <span class="main content">
      <span class="nested content">456</span>def
    </span>
  </li>
  <li>
    <span class="main content">
      <span class="nested content">789</span>ghi
    </span>
  </li>
</ul>

我尝试做的是访问每个<li>,然后从类&#34;主要内容&#34;中提取文本。与具有类&#34;嵌套内容&#34;的跨度分开。如果需要,我可以尝试解释更多,但我认为这可以解决我的问题。

1 个答案:

答案 0 :(得分:0)

您可以使用lxml包从字符串中获取树,其中包含以下内容:

from lxml import html

tree = html.fromstring(html_string)

然后你可以使用.xpath()来访问xpath:

all_text = tree.xpath("normalize-space(//li/span)")
nested_text = tree.xpath("normalize-space(//li/span/span)")

normalize-space()函数返回所有文本。使用上面的两行,您可以获得内部文本,然后是整个文本,然后您可以使用

从整个文本中删除内部文本。
outer_text = all_text.replace(nested_text, '')

希望这会有所帮助。如果它不符合您的要求,请告诉我。

(免责声明:上面的xpath仅适用于您共享的示例。显然,如果这只是您正在访问的html的子集,则可能需要更改)

相关问题