2012-09-13 20 views
7

python、curl、およびBeautifulSoupを使用して日本語のページをスクラップしようとしています。私はutf-8エンコーディングを使用しているMySQLデータベースにテキストを保存し、Djangoを使用して結果のデータを表示します。ここでPythonを使用して日本語の文字を正しくスクラップして表示するDjango BeautifulSoupとCurl

は、例のURLです:

https://www.cisco.apply2jobs.com/ProfExt/index.cfm?fuseaction=mExternal.showJob&RID=930026&CurrentPage=180

私は文字列としてHTMLを抽出するために使用する機能があります。

def get_html(url): 
    c = Curl() 
    storage = StringIO() 
    c.setopt(c.URL, str(url)) 
    cookie_file = 'cookie.txt' 
    c.setopt(c.COOKIEFILE, cookie_file) 
    c.setopt(c.COOKIEJAR, cookie_file) 
    c.setopt(c.WRITEFUNCTION, storage.write) 
    c.perform() 
    c.close() 
    return storage.getvalue() 

を私は、BeautifulSoupに渡す:

html = get_html(str(scheduled_import.url)) 
soup = BeautifulSoup(html) 

これを解析してデータベースに保存します。私はその後、jsonにデータを出力するためにDjangoを使います。

def get_jobs(request): 
    jobs = Job.objects.all().only(*fields) 
    joblist = [] 
    for job in jobs: 
     job_dict = {} 
     for field in fields: 
      job_dict[field] = getattr(job, field) 
     joblist.append(job_dict) 
    return HttpResponse(dumps(joblist), mimetype='application/javascript') 

結果のページが表示されたバイトコードのような:

XE3 \ X82 \ xb7 \ XE3 \ X83 \ XA3 \ XE3 \ X83 \のXaa \ XE3 \ X82 \ここで私が使用している図でありますxb9 \ xe3 \ x83 \ x88

\ xe8 \ x81 \ xb7 \ xe5 \ x8b \ x99 \ xe5 \ x86 \ x85 \ xe5 \ xae \ xb9
\ xe3 \ x82 \ xb7 \ xe3 \ x82 \ xb9 \ xe3 \ x82 \ xb3 \ xe3 \ x82 \ x83 \ xe3 \ x83 \ xe3 \ x83 \ x82 \ xe3 \ x82 \ x83 \ ¥xe3¥x83¥x9¥xe3¥x83¥xac¥xe3¥x83¥xbc¥xe3¥x82¥xb7¥xe3¥x83¥xa7¥xe3¥x83¥xb3¥xe4¥xba¥x8b¥xe6¥xa5¥xad¥xe9 \ x83 \ x83 \ x83 \ x83 \ x83 \ x83 \ xe3 \ x83 \ x83 \ x83 \ x83 \ \ xa8 \ xe3 \ x81 \ x97 \ xe3 \ x81 \ x9f \ xe3 \ x82 \ xb3 \ xe3 \ x83 \ x9f \ xe3 \ x83 ¥xa3¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥x83¥ \ xe3 \ x82 \ x8a \ xe3 \

japaneseの代わりに。

私は一日中研究していて、自分のDBをutf-8に変換し、iso-8859-1からテキストをデコードしてutf-8にエンコードしようとしました。

基本的に私は何をしているのか分かりませんし、何か助けや助言をいただければ幸いです。これを理解しようと別の日を費やすのを避けることができます。

+0

Beautiful Soupにエンコーディングを忘れてしまった。応答ヘッダーから取得します。 –

+0

このhttp://www.crummy.com/software/BeautifulSoup/bs3/documentation.htmlによると、BeautifulSoupはページのメタタグに基づいてエンコードを自動的に設定すると信じています。「タグでエンコードを指定することがあります。 " soup.originalEncodingは 'iso-8859-1'を出力します –

+0

ページ*にはMETAタグがあると仮定しています。 –

答えて

0

投稿した例は、文字列のアスキーな表現です。これをPythonのUnicode文字列に変換する必要があります。通常、string encoding and decodingを使用してジョブを実行できます。どちらが正しいかわからない場合は、単にPythonコンソールでそれを試してみてください。

を試して、PythonのUnicode文字列を取得してください。これはDjangoテンプレートに正しく表示され、DBなどに保存することができます。例として、print my_new_stringを試してみて、それが日本語の文字を出力しているのを見ることもできます。

+0

がこれに幸運を持っていないことを述べていたはずです。私はコンソールでそれを印刷するときに日本語の文字を表示するために元のHTML文字列を得ることができます。私がbeautifulsoupの出力でできることは、 "€?ƒのようなファンキーな文字が得られますか?ã‚ ‚・A§aƒ ƒ³a€ ‘
€ €Âƒ»人º‹º‹ A&lsaquo。 ™æ‹…?Å“

€ãÆ&パーミル。 ž €±Åはƒ署¨Aは??」 –

関連する問題