1

HTMLページをスクレイピングしてから、xml.dom.minidom.parseString()を使用してdomオブジェクトを作成しています。

ただし、htmlページには「&」があります。cgi.escapeを使用してこれを変換できます&amp;が、すべてのhtml <>タグも変換されるため&lt;&gt;、parseString()は不幸になります。

どうすればこれを行うことができますか?私はそれをハックして「&」をまっすぐに置き換えるのではなく

ありがとう

4

4 に答える 4

1

私はそれをハックして「&」をまっすぐに置き換えるのではなく

えー、なんで?それが行われていることcgi.escapeです-事実上、エスケープする必要がある特定の文字の検索と置換操作だけです。

単一の文字のみを置き換えたい場合は、単一の文字を置き換えるだけです。

yourstring.replace('&', '&amp;')

茂みの周りを殴らないでください。

于 2010-08-04T06:43:50.627 に答える
1

スクレイピングには、 htmlパーサー(およびlxml.htmlの専用htmlパッケージ)を含むlxmlBeautifulSoup(これらのライブラリもあります)などのhtml「タグスープ」を処理できるライブラリを使用してみてください。また、形式の悪いドキュメントを処理できること以外に、HTMLのスクレイピング/作業を容易にする他のものも含まれています:フォームからの情報の取得、ハイパーリンクの絶対化、cssセレクターの使用...)

于 2010-08-04T09:00:26.293 に答える
0

&すでにエスケープされている(つまり、に変換&amp;されない&amp;amp;)を誤って再エスケープしないようにしたい場合は、次のことができます。&szlig;&amp;szlig;

import re
newstring = re.sub(r"&(?![A-Za-z])", "&amp;", oldstring)

&これにより、その後に文字が続く場合、sはそのままになります。

于 2010-08-04T06:53:29.443 に答える
0

XMLではないデータを解析するためにXMLパーサーを使用しないでください。代わりにHTMLパーサーを見つけてください。長期的には、より幸せになります。標準ライブラリにはいくつか(HTMLParserとhtmllib)があり、BeautifulSoupは人気のあるサードパーティパッケージです。

于 2010-08-04T12:37:07.007 に答える