0

次のように、Unicode 文字を含む Web ページから HTML を抽出しています。

def extract(url):
     """ Adapted from Python3_Google_Search.py """
     user_agent = ("Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US) "
                   "AppleWebKit/525.13 (KHTML,     like Gecko)"
                   "Chrome/0.2.149.29 Safari/525.13")
     request = urllib.request.Request(url)
     request.add_header("User-Agent",user_agent)
     response = urllib.request.urlopen(request)
     html = response.read().decode("utf8")
     return html

ご覧のとおり、正しくデコードしています。htmlUnicode 文字列もそうです。HTML を印刷すると、Unicode 文字が表示されます。

私はhtml.parserHTMLを解析し、それをサブクラス化するために使用しています:

from html.parser import HTMLParser
class Parser(HTMLParser):
  def __init__(self):
    ## some init stuff
  #### rest of class

クラスの を使用して HTML を解析handle_dataすると、Unicode 文字が削除されたり、突然消えたりするように見えます。ドキュメントには、エンコーディングについては何も言及されていません。HTML パーサーが非 ASCII 文字を削除するのはなぜですか? また、そのような問題を修正するにはどうすればよいですか?

4

1 に答える 1

0

どうやら、ASCII 以外の文字に遭遇するたびにhtml.parser呼び出されます。handle_entityref名前付き文字参照を渡し、それをユニコード文字に変換するために、次を使用しました。

html.entities.html5[name]

Python のドキュメントには、そのことは記載されていません。Python よりも悪いドキュメントを見たことがありません。

于 2013-05-03T17:23:51.867 に答える