HTMLページをスクレイピングしてから、xml.dom.minidom.parseString()を使用してdomオブジェクトを作成しています。
ただし、htmlページには「&」があります。cgi.escapeを使用してこれを変換できます&
が、すべてのhtml <>タグも変換されるため<>
、parseString()は不幸になります。
どうすればこれを行うことができますか?私はそれをハックして「&」をまっすぐに置き換えるのではなく
ありがとう
HTMLページをスクレイピングしてから、xml.dom.minidom.parseString()を使用してdomオブジェクトを作成しています。
ただし、htmlページには「&」があります。cgi.escapeを使用してこれを変換できます&
が、すべてのhtml <>タグも変換されるため<>
、parseString()は不幸になります。
どうすればこれを行うことができますか?私はそれをハックして「&」をまっすぐに置き換えるのではなく
ありがとう
私はそれをハックして「&」をまっすぐに置き換えるのではなく
えー、なんで?それが行われていることcgi.escape
です-事実上、エスケープする必要がある特定の文字の検索と置換操作だけです。
単一の文字のみを置き換えたい場合は、単一の文字を置き換えるだけです。
yourstring.replace('&', '&')
茂みの周りを殴らないでください。
スクレイピングには、 htmlパーサー(およびlxml.htmlの専用htmlパッケージ)を含むlxmlやBeautifulSoup(これらのライブラリもあります)などのhtml「タグスープ」を処理できるライブラリを使用してみてください。また、形式の悪いドキュメントを処理できること以外に、HTMLのスクレイピング/作業を容易にする他のものも含まれています:フォームからの情報の取得、ハイパーリンクの絶対化、cssセレクターの使用...)
&
すでにエスケープされている(つまり、に変換&
されない&amp;
)を誤って再エスケープしないようにしたい場合は、次のことができます。ß
&szlig;
import re
newstring = re.sub(r"&(?![A-Za-z])", "&", oldstring)
&
これにより、その後に文字が続く場合、sはそのままになります。
XMLではないデータを解析するためにXMLパーサーを使用しないでください。代わりにHTMLパーサーを見つけてください。長期的には、より幸せになります。標準ライブラリにはいくつか(HTMLParserとhtmllib)があり、BeautifulSoupは人気のあるサードパーティパッケージです。