XPath循环通过a<;ul>;属于<;李>;元素并从python中的跨距和嵌套跨距中提取文本
我已经看到了这个问题的各种变化,但没有一个答案,我可以操纵得到工作。我试图弄清楚如何循环遍历文本列表,并使用XPath从每个列表项中提取两个单独的值。我可以为一个项目做,但我被困在如何在一个循环中做它。 下面是我正在使用的示例片段XPath循环通过a<;ul>;属于<;李>;元素并从python中的跨距和嵌套跨距中提取文本,python,xpath,Python,Xpath,我已经看到了这个问题的各种变化,但没有一个答案,我可以操纵得到工作。我试图弄清楚如何循环遍历文本列表,并使用XPath从每个列表项中提取两个单独的值。我可以为一个项目做,但我被困在如何在一个循环中做它。 下面是我正在使用的示例片段 <ul> <li> <span class="main content"> <span class="nested content">123</span>abc </sp
<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>
-
123abc
-
456def
-
789ghi
我试图做的是访问每个
,然后分别从类为“main content”的span和类为“nested content”的span中提取文本。如果需要的话,我可以试着解释更多,但我想这会让我的问题更清楚。您可以使用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)")
函数的作用是:返回所有文本。使用以上两行,您可以先获取内部文本,然后获取整个文本,然后使用
outer_text = all_text.replace(nested_text, '')
希望这能有所帮助。如果对你的要求不起作用,请告诉我
(免责声明:上面的XPath仅适用于您共享的示例。显然,如果这只是您正在访问的html的一个子集,它们可能需要更改)您使用哪种工具?分享你当前的代码,浏览网页是的,这正是我所需要的。谢谢