7

ページをクロールしようとしていますが、UnicodeDecodeError があります。これが私のコードです:

def soup_def(link):
    req = urllib2.Request(link, headers={'User-Agent' : "Magic Browser"}) 
    usock = urllib2.urlopen(req)
    encoding = usock.headers.getparam('charset')
    page = usock.read().decode(encoding)
    usock.close()
    soup = BeautifulSoup(page)
    return soup

soup = soup_def("http://www.geekbuying.com/item/Ainol-Novo-10-Hero-II-Quad-Core--Tablet-PC-10-1-inch-IPS-1280-800-1GB-RAM-16GB-ROM-Android-4-1--HDMI-313618.html")

そしてエラー:

UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 284: invalid start byte

さらに数人のユーザーに同じエラーが発生していることを確認しましたが、解決策がわかりません。

4

2 に答える 2

0

これは、UTF-16 の記号である文字についてウィキペディアから得たものです。0xff

UTF-16[edit]
In UTF-16, a BOM (U+FEFF) may be placed as the first character of a file or character stream to indicate the endianness (byte order) of all the 16-bit code units of the file or stream.
If the 16-bit units are represented in big-endian byte order, this BOM character will appear in the sequence of bytes as 0xFE followed by 0xFF. This sequence appears as the ISO-8859-1 characters þÿ in a text display that expects the text to be ISO-8859-1.
if the 16-bit units use little-endian order, the sequence of bytes will have 0xFF followed by 0xFE. This sequence appears as the ISO-8859-1 characters ÿþ in a text display that expects the text to be ISO-8859-1.
Programs expecting UTF-8 may show these or error indicators, depending on how they handle UTF-8 encoding errors. In all cases they will probably display the rest of the file as garbage (a UTF-16 text containing ASCII only will be fairly readable).

だから私はここで2つの考えがあります:

utf-16(1)代わりに扱われるべき理由による可能性がありますutf-8

(2) スープ全体を画面に出力しようとしているため、エラーが発生します。次に、IDE (Eclipse/Pycharm) がこれらの Unicode を表示するのに十分なほどスマートになるかどうかが関係します。

私があなただったら、スープ全体を印刷せずに先に進み、必要な部分だけを集めようとします. そのステップに到達するのに問題があることを確認してください。そこに問題がない場合は、スープ全体を画面に印刷できないのはなぜですか。

本当にスープを画面に出力したい場合は、次を試してください。

print soup.prettify(encoding='utf-16')
于 2013-11-15T22:21:20.507 に答える