繁体   English   中英

在python中获取xml或html文件标签之间的数据的简单方法?

[英]Easy way to get data between tags of xml or html files in python?

我正在使用Python,需要在标签之间查找和检索所有字符数据:

<tag>I need this stuff</tag>

然后我想将找到的数据输出到另一个文件。 我只是在寻找一种非常简单有效的方法来做到这一点。

如果您可以发布快速代码段来描述易用性。 因为我在理解解析器时遇到了一些麻烦。

没有外部模块,例如

>>> myhtml = """ <tag>I need this stuff</tag>
... blah blah
... <tag>I need this stuff too
... </tag>
... blah blah """
>>> for item in myhtml.split("</tag>"):
...   if "<tag>" in item:
...       print item [ item.find("<tag>")+len("<tag>") : ]
...
I need this stuff
I need this stuff too

Beautiful Soup是Python的精彩HTML / XML解析器:

Beautiful Soup是一个Python HTML / XML解析器,专为快速周转项目而设计,例如屏幕抓取。 三个功能使其功能强大:

  1. 如果给它不好的标记,美丽的汤不会窒息。 它产生一个解析树,使其与原始文档几乎一样有意义。 这通常足以收集您需要的数据并逃跑。
  2. Beautiful Soup提供了一些简单的方法和Pythonic习语,用于导航,搜索和修改解析树:用于剖析文档和提取所需内容的工具包。 您不必为每个应用程序创建自定义解析器。
  3. Beautiful Soup会自动将传入的文档转换为Unicode,将传出的文档转换为UTF-8。 您不必考虑编码,除非文档没有指定编码并且Beautiful Soup不能自动检测编码。 然后你只需要指定原始编码。

我非常喜欢解析元素树 ,然后使用element.textelement.tail

它也有像搜索一样的xpath

>>> from xml.etree.ElementTree import ElementTree
>>> tree = ElementTree()
>>> tree.parse("index.xhtml")
<Element html at b7d3f1ec>
>>> p = tree.find("body/p")     # Finds first occurrence of tag p in body
>>> p
<Element p at 8416e0c>
>>> p.text
"Some text in the Paragraph"
>>> links = p.getiterator("a")  # Returns list of all links
>>> links
[<Element a at b7d4f9ec>, <Element a at b7d4fb0c>]
>>> for i in links:             # Iterates through all found links
...     i.attrib["target"] = "blank"
>>> tree.write("output.xhtml")

这就是我这样做的方式:

    (myhtml.split('<tag>')[1]).split('</tag>')[0]

告诉我它是否有效!

使用xpath和lxml;

from lxml import etree

pageInMemory = open("pageToParse.html", "r")

parsedPage = etree.HTML(pageInMemory)

yourListOfText = parsedPage.xpath("//tag//text()")

saveFile = open("savedFile", "w")
saveFile.writelines(yourListOfText)

pageInMemory.close()
saveFile.close()

比美丽的汤更快。

如果你想测试你的Xpath - 我发现FireFox的Xpather非常有帮助

进一步说明:

def value_tag(s):
    i = s.index('>')
    s = s[i+1:]
    i = s.index('<')
    s = s[:i]
    return s

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM