3

Web サイトからデータをスクレイピングし、見つけたデータをファイルに書き出そうとしています。90% 以上の場合、Unicode エラーは発生しませんが、データに「Burger King®、Hans Café」などの文字が含まれていると、それをファイルに書き込むのが好きではないため、エラー処理で出力されます。そのまま画面に表示され、それ以上のエラーはありません。

エンコード機能とデコード機能、およびさまざまなエンコーディングを試しましたが、役に立ちませんでした。

私が以下に書いた現在のコードの抜粋を見つけてください。

import urllib2,sys
import re
import os
import urllib
import string
import time
from BeautifulSoup import BeautifulSoup,NavigableString, SoupStrainer
from string import maketrans
import codecs

f=codecs.open('alldetails7.txt', mode='w', encoding='utf-8', errors='replace')
...


soup5 = BeautifulSoup(html5)
enc_s5 = soup5.originalEncoding

for company in iter(soup5.findAll(height="20px")):
    stream = ""
    count_detail = 1
    for tag in iter(company.findAll('td')):
        if count_detail > 1:
           stream = stream + tag.text.replace(u',',u';')
           if count_detail < 4 :
              stream=stream+","
        count_detail = count_detail + 1
    stream.strip()
    try:
        f.write(str(stnum)+","+br_name_addr+","+stream.decode(enc_s5)+os.linesep)
    except:
        print "Unicode error ->"+str(storenum)+","+branch_name_address+","+stream
4

2 に答える 2

1

あなたのf.write()行は私には意味がありませんstream.fromunicodeから間接的に作成されtag.textBeautifulSoupがUnicodeを提供するため、を呼び出すべきではありませdecodestream。(特定の文字エンコーディングの を に変換するために使用decodeします。) で書き込むためにファイルを開き、UTF-8 を使用するように指示したので、と だけで動作するはずです。だから、代わりに私は試してみます:strunicodecodecs.open()write()unicode

f.write(unicode(stnum)+br_name_addr+u","+stream+os.linesep)

... または、代わりに でファイルを開いたと仮定するとf=open('alldetails7.txt','w')、次のようになります。

line = unicode(stnum)+br_name_addr+u","+stream+os.linesep
f.write(line.encode('utf-8'))
于 2011-02-25T10:07:06.073 に答える
0

書き込み先のファイルのエンコーディングを確認し、ファイルに書き込もうとしているエンコーディングで文字が表示されることを確認しましたか? 文字エンコーディングを UTF-8 などに明示的に設定して、文字が表示されるようにしてください。

于 2011-02-25T09:47:58.797 に答える