2017-04-07 6 views
1

ヘルプを探しています。私はPythonで美しいスープを使って特定のCraigslist投稿を掻き集めるプロジェクトに取り組んでいます。投稿のタイトル内に見つかった絵文字を正常に表示できますが、投稿体内では失敗しています。私はさまざまなバリエーションを試しましたが、これまでのところ何も働いていません。どんな助けもありがとう。エモジスを美味しいスープでエンコードする

コード:

f = open("clcondensed.txt", "w") 
html2 = requests.get("https://raleigh.craigslist.org/wan/6078682335.html") 
soup = BeautifulSoup(html2.content,"html.parser") 
#Post Title 
title = soup.find(id="titletextonly")  
title1 = soup.title.string.encode("ascii","xmlcharrefreplace") 
f.write(title1) 
#Post Body 
body = soup.find(id="postingbody")   
body = str(body) 
body = body.encode("ascii","xmlcharrefreplace") 
f.write(body) 

エラーが身体から受け取っ:

'ascii' codec can't decode byte 0xef in position 273: ordinal not in range(128) 
+0

これに似ている可能性があります。http://stackoverflow.com/questions/9644099/python-ascii-codec-cant-decode-byte – anonyXmous

答えて

1

あなたはunicode

body = unicode(body) 

を使用する必要があります美しいスープのドキュメントにNavigableString

を参照してください210

更新:迅速な答えを

申し訳ありません。そうではありません。

htmlパーサーはNCR (Numeric Character Reference)絵文字ではサポートされていないため、ここではhtmlパーサーの代わりにlxmlパーサーを使用する必要があります。このようにHTMLのデモ絵文字🚢HTMLパーサとして65535より大きいNCR絵文字小数点値は、ちょうどu"\U0001F6A2"よりも間違ったユニコード\ufffdでそれをデコード私のテストで

、。私はこれについて正確なBeautiful Soup referenceを見つけることができませんが、lxmlパーサはOKです。以下は

テストコードです:

import requests 
from bs4 import BeautifulSoup 
f = open("clcondensed.txt", "w") 
html = requests.get("https://raleigh.craigslist.org/wan/6078682335.html") 
soup = BeautifulSoup(html.content, "lxml") 
#Post Title 
title = soup.find(id="titletextonly") 
title = unicode(title) 
f.write(title.encode('utf-8')) 
#Post Body 
body = soup.find(id="postingbody") 
body = unicode(body) 
f.write(body.encode('utf-8')) 
f.close() 

あなたはより多くのことを行うlxml entity handlingをrefをすることができます。

lxmlをインストールしない場合は、lxml installingと入力してください。

このヘルプが必要です。

+0

ご協力ありがとうございました。期待どおりに働いた。とても有難い! – Phil21

+0

@ Phil21私は助けてうれしいです – Fogmoon

関連する問題