[英]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.