python、curl、およびBeautifulSoupを使用して日本語のページをスクラップしようとしています。私はutf-8エンコーディングを使用しているMySQLデータベースにテキストを保存し、Djangoを使用して結果のデータを表示します。ここでPythonを使用して日本語の文字を正しくスクラップして表示するDjango BeautifulSoupとCurl
は、例のURLです:
私は文字列として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にエンコードしようとしました。
基本的に私は何をしているのか分かりませんし、何か助けや助言をいただければ幸いです。これを理解しようと別の日を費やすのを避けることができます。
Beautiful Soupにエンコーディングを忘れてしまった。応答ヘッダーから取得します。 –
このhttp://www.crummy.com/software/BeautifulSoup/bs3/documentation.htmlによると、BeautifulSoupはページのメタタグに基づいてエンコードを自動的に設定すると信じています。「タグでエンコードを指定することがあります。 " soup.originalEncodingは 'iso-8859-1'を出力します –
ページ*にはMETAタグがあると仮定しています。 –