【问题标题】:How to convert XPath Element to plain html text?如何将 XPath 元素转换为纯 html 文本?
【发布时间】:2014-10-30 07:42:04
【问题描述】:

我有页面:

<body>
  <div>
    <a id="123">text_url</a>
  </div>    
<body>

我想将元素“//div/a”作为纯 html 文本获取。

<a id="123">text_url</a>

我该怎么做?

【问题讨论】:

  • 从 XPath 的角度来看,//div/a 已经指向 &lt;a id="123"&gt;text_url&lt;/a&gt;。其余的取决于 XPath 主机。您使用的 XPath 引擎是什么?也许是编程语言和 Xpath 库?
  • python 语言,库 - lxml,抓取。据我了解,XPath 标准不支持这种常用方法?
  • 我不懂python,也许别人可以带你走。通常,XPath 库提供了一种获取节点标记的方法。例如在 .NET 中,我可以执行以下操作:var node = xml.SelectSingleNode("//div/a"); var nodesMarkup = node.OuterHtml;
  • 看,这不是 XPath 的问题,据我所知,这是关于库 API
  • 查看这个答案:stackoverflow.com/a/4624146/821594

标签: python html xpath lxml


【解决方案1】:

如果你已经使用lxml解析了对象,你可以使用lxml.etree.tostring()序列化它:

from lxml import etree
xml='''<body>
  <div>
    <a id="123">text_url</a>
  </div>    
</body>'''

root = etree.fromstring(xml)
for a in root.xpath('//div/a'):
  print etree.tostring(a, method='html', with_tail=False)

【讨论】:

    【解决方案2】:

    您可以在 Python 中使用 xml 库。

    from xml.etree.ElementTree import parse
    
    doc = parse('page.xml') # assuming page.xml is on disk
    print doc.find('div/a[@id="123"]').text
    

    请注意,这只适用于严格的 XML。 例如,您关闭 body 标记不正确,在这种情况下此代码将失败。网络上的 HTML 很少是严格的 XML。

    【讨论】:

      【解决方案3】:

      你可以将python的re模块与re.findall一起使用。

      import re
      print re.findall(r".*?(<a.*?<\/a>).*",x,re.DOTALL)
      

      x 在哪里 x=""" text_url """

      Output:['<a id="123">text_url</a>']
      

      也可以查看演示。

      http://regex101.com/r/lF4lY6/1

      【讨论】:

      • 正则表达式不适用于需要从复杂页面上的某些标签中提取 html 的任务
      【解决方案4】:

      带有抓取模块的python中的工作解决方案。

      from grab import Grab
      
      g = Grab()
      g.go('file://page.htm')
      print g.doc.select('//div/a')[0].html()
      
      >><a id="123">text_url</a>
      

      【讨论】:

        猜你喜欢
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 2012-04-12
        • 2014-09-08
        • 1970-01-01
        相关资源
        最近更新 更多