[英]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解析器,专为快速周转项目而设计,例如屏幕抓取。 三个功能使其功能强大:
- 如果给它不好的标记,美丽的汤不会窒息。 它产生一个解析树,使其与原始文档几乎一样有意义。 这通常足以收集您需要的数据并逃跑。
- Beautiful Soup提供了一些简单的方法和Pythonic习语,用于导航,搜索和修改解析树:用于剖析文档和提取所需内容的工具包。 您不必为每个应用程序创建自定义解析器。
- Beautiful Soup会自动将传入的文档转换为Unicode,将传出的文档转换为UTF-8。 您不必考虑编码,除非文档没有指定编码并且Beautiful Soup不能自动检测编码。 然后你只需要指定原始编码。
我非常喜欢解析元素树 ,然后使用element.text
和element.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.