簡體   English   中英

使用xml.etree.ElementTree解析XHTML

[英]Parsing XHTML using xml.etree.ElementTree

我想使用xml.etree.ElementTree在Python 3中解析XHTML文檔。該文檔包含  實體,所以我不能使用默認的解析器設置。 我想做類似的事情:

with urllib.request.urlopen(BASE_URL) as url:
        body = url.read()
        parser = ET.XMLParser()
        parser.parser.UseForeignDTD(True)
        parser.entity.update(entitydefs)
        etree = ET.ElementTree()
        root = etree.fromstring(body)

但是fromstringElementTree一個自由函數。 如何實現與ElementTree實例類似的功能?

喂解析器:

with urllib.request.urlopen(BASE_URL) as url:
    body = url.read()
    parser = ET.XMLParser()
    parser.parser.UseForeignDTD(True)
    parser.entity.update(entitydefs)
    parser.feed(body)
    root = parser.close()   # this returns you the tree

那我遇到了同樣的問題。 問題和所選答案中的示例代碼可能之前有效,但是現在它在我的Python 3.3和Python 3.4環境中不起作用。

我終於搞定了。 引用此問答

這篇文章的啟發,我們可以將一些XML定義添加到傳入的原始HTML內容中,然后ElementTree可以開箱即用。

這適用於Python 2.6,2.7,3.3,3.4。

import xml.etree.ElementTree as ET

html = '''<html>
    <div>Some reasonably well-formed HTML content.</div>
    <form action="login">
    <input name="foo" value="bar"/>
    <input name="username"/><input name="password"/>

    <div>It is not unusual to see &nbsp; in an HTML page.</div>

    </form></html>'''

magic = '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
            <!ENTITY nbsp ' '>
            ]>'''  # You can define more entities here, if needed

et = ET.fromstring(magic + html)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM