我已经看到了这个问题的变体,但不是我可以操纵以便开始工作的答案。我试图找出如何遍历文本列表并使用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;的跨度分开。如果需要,我可以尝试解释更多,但我认为这可以解决我的问题。
答案 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的子集,则可能需要更改)