0

Scrapy を使用して Web スクレイピングを行っていました。<code>Web サイトには、次のようなタグの間に json が埋め込まれています。

<code id="content" style="display:none;"><!--{"content": "text1",...,..., "compute": "text2"}--></code>

<code>xpath を使用して、タグ内のコメントを抽出できました。使用済み:

hxs.select("//code[@id='content']/comment()").extract()

コメント文字をストライピングした後、内容はcontent = "{"content": "text1",...,..., "compute": "text2"}"

json.loads(content) を使用して json を構築しているときに、"ValueError: No JSON object could be decoded"エラーが発生しました。

また、 str(content) は次をスローします。

"UnicodeEncodeError: 'ascii' codec can't encode characters in position 106512-106513: ordinal not in range(128)"

106512 の値は'\xa7'

前もって感謝します。

4

2 に答える 2

2

str(content)非 ASCII 文字で失敗することが予想され、それ自体は問題ではありません。content.encode('utf-8')必要なものがバイト文字列である場合は機能します (ただし、コンソールに出力することは別の問題です ( PrintFails )。変数の内容を表示したいだけの場合は、repr(comment)出力して Python 構文表現を取得します。

No JSON object could be decodedjson.loadsは、文字列の先頭で JSON のように見えるものを見つけることさえできないことを意味するため、そのrepr()文字列の先頭を見て、. の前に迷子の文字や制御コードがないかどうかを確認し{ます

于 2013-09-23T18:35:41.570 に答える
0

json の文字列は iso8859 または Windows-1252 のようです。\xa7 はこれらのエンコーディングのいずれかで § ですが、\xc2\xa7 は utf-8 で § です。

于 2013-09-23T13:49:27.830 に答える