Appologies的格式。我儘可能分開,但我的屏幕閱讀器不喜歡SO的格式化控件。
我打算回答你的問題,雖然看起來有些模糊。請讓我知道,如果我需要重寫這個答案,以適應不同的情況。 我假設你正試圖從網上獲取一個HTML文件,並從這個文件內部運行Javascript來處理所述文檔。 不幸的是,沒有任何Python xml庫具有真正的DOM支持,並且在我找到的每個包中都不存在W3C DOM合規性。 你可以做的是使用PyV8 w3c.py dom文件作爲開始的例子,並創建自己的完整DOM。 W3C Sample Dom 雖然你不需要引號或者血統,但你需要重寫這個模塊。 BeautifulSoup也不是最快速的解析器。 我會推薦使用像lxml.etree的目標解析器選項。 LXML Target Parser 搜索「Feed解析器接口」。 然後,您可以使用LXML加載HTML/Script文檔,如下解析它,然後在創建的DOM上運行您需要的每個腳本。
查找下面的部分示例。 (請注意,HTML標準是巨大的,分散的和_高度瀏覽器特定的,所以你的milage可能會有所不同)。
class domParser(object):
def __init__(self):
#initialize dom object here, and obtain the root for the destination file object.
self.dom = newAwesomeCompliantDom()
self.document = self.dom.document
self.this = self.document
def comment(self, commentText):
#add commentText to self.document or the above dom object you created
self.this.appendChild(self.document.DOMImplementation.createComment(commentText))
def start(self, tag, attrs):
#same here
self.this = self.this.appendChild(self.document.DOMImplimentation.newElement(tag,attrs))
def data(self, dataText):
#append data to the last accessed element, as a new Text child
self.this.appendChild(self.document.DOMImpl.createDataNode(dataText))
def end(self):
#closing element, so move up the tree
self.this = self.this.parentNode
def close(self):
return self.document
#unchecked, please validate yourself
x = lxml.etree.parse(target=domParser)
x.feed(htmlFile)
newDom = x.close()
但據我瞭解,它只是建立dom。我不能喂JavaScript文件來運行一個現成的dom,我可以嗎? – Sergey