python 爬取网页编码问题
大家讲道理
大家讲道理 2017-04-18 09:26:01
0
5
270

我在爬取凤凰网却出现
UnicodeEncodeError: 'gbk' codec can't encode character 'xa0' in position 151120: illegal multibyte sequence

这是我的代码

__author__ = 'my'
import urllib.request
url = 'http://www.ifeng.com/'
req = urllib.request.urlopen(url)
req = req.read()
req = req.decode('utf-8')
print(req)

为什么utf8却报错GBK?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

membalas semua(5)
Peter_Zhu

Ini adalah masalah dengan cmd.exe, perisian lain boleh menyahkodnya dengan betul. Contohnya, pad nota, penyemak imbas. . . .

import urllib.request
import os
url = 'http://www.ifeng.com/'
rsp = urllib.request.urlopen(url)
body = rsp.read()
html = r'C:\ifeng.html' # 文件路径, 可以改成你自己想要的
with open(html, 'wb') as w:
    w.write(body) # 直接以 二进制 写入文件,不必解码.
os.popen('notepad.exe ' + html) # 用 记事本 打开,就可以看到内容了.

Ditambah:
Malah, anda juga boleh mengubah suai pengekodan cmd.exe kepada utf-8 (cp65001)
Langkah:
1 Jalankan CMD.exe
2, chcp 65001
3. Ubah suai fon sifat tetingkap
Klik kanan pada bar tajuk tetingkap CMD, pilih "Properties"->"Font", dan tukar fon kepada True Type fon "Lucida Console"
Seperti yang ditunjukkan:

4. Jalankan ular sawa

Kandungan x.py:

import urllib.request

url = 'http://www.ifeng.com/'
rsp = urllib.request.urlopen(url)
body = rsp.read()
html = body.decode('utf-8')
print(html[:500]) # 前500个字符
#print(html) # 也可打印全部,看看有没有错
洪涛

Saya hanya meletakkan kod soalan ke dalam pycharm, dan masalah ini tidak berlaku. Kemudian saya menggunakan command prompt Windows untuk menaip baris demi baris, dan masalah ini berlaku. Gesaan arahan windows menggunakan pengekodan gbk, dan halaman web itu sendiri menggunakan utf-8 untuk pengekodan. Jika anda ingin menjalankannya dari baris arahan, anda perlu menulis:

`__author__ = 'my'
import urllib.request
url = 'http://www.ifeng.com/'
req = urllib.request.urlopen(url)
req = req.read()
req = req.decode('gbk', 'ignore')
print(req)`

Di sinireq = req.decode('gbk', 'ignore') biar saya terangkan: untuk dipaparkan dalam command prompt windows, ia perlu dinyahkodkan menjadi gbk, tetapi beberapa aksara utf-8 sendiri menggunakan gbkPenyahkodan akan gagal lagi, jadi parameter kedua abaikan diperlukan.
Sebagai tambahan, pengekodan juga mungkin menghadapi masalah ini. Contohnya, jika anda menggunakan perpustakaan permintaan untuk meminta, ia akan menjadi rentetan yang diminta dan bukannya jenis bait Jika anda menghadapi masalah dengan pengekodan, anda juga boleh menggunakan str .encode('encoding', 'ingore').decode('decoding') untuk menyelesaikan masalah yang serupa.
Jika anda tidak faham, anda boleh membaca blog saya

Untuk menjawab soalan daripada subjek, sesetengah halaman web adalah baik. Mungkin sesetengah halaman web menggunakan pengekodan GBK atau teksnya serasi dengan GBK dan UTF-8

大家讲道理

Dianggarkan pengekodan lalai sistem anda ialah gbk, anda boleh mencubanya

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
Ty80

Adakah anda menjalankannya menggunakan konsol windows? Kerana pengekodan lalai konsol ialah gbk.
Tidak mengapa untuk menggunakan penterjemah yang disertakan dengan ular sawa:

Atau gunakan alatan lain dan bukannya konsol.

巴扎黑

# _*_ coding: utf-8 _*_
Nyatakan pengekodan fail

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

Nyatakan pengekodan program anda.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan