XPath循环通过a<;ul>;属于<;李>;元素并从python中的跨距和嵌套跨距中提取文本

XPath循环通过a<;ul>;属于<;李>;元素并从python中的跨距和嵌套跨距中提取文本,python,xpath,Python,Xpath,我已经看到了这个问题的各种变化,但没有一个答案,我可以操纵得到工作。我试图弄清楚如何循环遍历文本列表,并使用XPath从每个列表项中提取两个单独的值。我可以为一个项目做,但我被困在如何在一个循环中做它。 下面是我正在使用的示例片段 <ul> <li> <span class="main content"> <span class="nested content">123</span>abc </sp

我已经看到了这个问题的各种变化,但没有一个答案,我可以操纵得到工作。我试图弄清楚如何循环遍历文本列表,并使用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>
  • 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的一个子集,它们可能需要更改)

    您使用哪种工具?分享你当前的代码,浏览网页是的,这正是我所需要的。谢谢