9

Python、curl、BeautifulSoup を使用して日本語のページをスクレイピングしようとしています。次に、utf-8 エンコーディングを使用する MySQL データベースにテキストを保存し、Django を使用して結果のデータを表示します。

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)

その後、解析されてデータベースに保存されます。次に、Django を使用してデータを json に出力します。私が使用しているビューは次のとおりです。

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\xb7\xe3\x82\xb9\xe3\x83\x86\xe3\x83\xa0\xe3\x82\ xba\xe3\x81\xae\xe3\x82\xb3\xe3\x83\xa9\xe3\x83\x9c\xe3\x83\xac\xe3\x83\xbc\xe3\x82\xb7\xe3\x83\xa7\ xe3\x83\xb3\xe4\xba\x8b\xe6\xa5\xad\xe9\x83\xa8\xe3\x81\xa7\xe3\x81\xaf\xe3\x80\x81\xe4\xba\xba\xe3\ x82\x92\xe4\xb8\xad\xe5\xbf\x83\xe3\x81\xa8\xe3\x81\x97\xe3\x81\x9f\xe3\x82\xb3\xe3\x83\x9f\xe3\x83\ xa5\xe3\x83\x8b\xe3\x82\xb1\xe3\x83\xbc\xe3\x82\xb7\xe3\x83\xa7\xe3\x83\xb3\xe3\x81\xab\xe3\x82\x88\ xe3\x82\x8a\xe3\

日本語の代わりに。

私は一日中調査しており、DB を utf-8 に変換し、テキストを iso-8859-1 からデコードして、utf-8 にエンコードしようとしました。

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

4

1 に答える 1

0

あなたが投稿した例は、どういうわけか文字列のASCII表現です。これを python ユニコード文字列に変換する必要があります。通常、文字列のエンコードとデコードを使用して作業を行うことができます。どちらが正しい方法かわからない場合は、Python コンソールで試してみてください。

my_new_string = my_string.decode('utf-8')Python Unicode 文字列を取得してみてください。これは Django テンプレートに正しく表示され、DB などに保存できます。例として、試しprint my_new_stringてみると、日本語の文字が出力されていることがわかります。

于 2012-09-13T02:11:42.757 に答える