簡體   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