整形お許しを。できる限りスペースを空けましたが、私のスクリーン リーダーは SO の書式設定コントロールを好みません。
少しあいまいに思えますが、あなたの質問に答えようと思います。別の状況に合わせてこの回答を書き直す必要がある場合はお知らせください。Web から HTML ファイルを取得し、このファイル内から Javascript を実行して、そのドキュメントを処理しようとしていると思います。残念ながら、Python xml ライブラリには真の DOM サポートがなく、私が見つけたすべてのパッケージで W3C DOM 準拠は存在しません。できることは、PyV8 w3c.py dom ファイルを開始例として使用し、独自の完全な DOM を作成することです。
W3C サンプル Dom
ただし、引用符やアポストロフィを考慮しないため、このモジュールを書き直す必要があります。また、BeautifulSoup は最速のパーサーではありません。lxml.etree のターゲット パーサー オプションのようなものを使用することをお勧めします。
LXML ターゲット パーサー
「フィード パーサー インターフェース」を検索します。次に、LXML を使用して HTML/スクリプト ドキュメントをロードし、以下のように解析して、作成された DOM で必要な各スクリプトを実行できます。
以下の部分的な例を見つけてください。(HTML 標準は大規模で散在しており、_非常にブラウザー固有であるため、マイレージは異なる場合があることに注意してください)。
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()