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

我在爬取凤凰网却出现
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?

大家讲道理
大家讲道理

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

répondre à tous(5)
Peter_Zhu

Il s'agit d'un problème avec cmd.exe, d'autres logiciels peuvent le décoder correctement. Par exemple, bloc-notes, navigateur. . . .

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) # 用 记事本 打开,就可以看到内容了.

Ajouté :
En fait, vous pouvez également modifier l'encodage de cmd.exe en utf-8 (cp65001)
Étapes :
1 Exécutez CMD.exe
2, chcp 65001<.>3. Modifiez la police des propriétés de la fenêtre
Cliquez avec le bouton droit sur la barre de titre de la fenêtre CMD, sélectionnez "Propriétés"->"Police" et remplacez la police par la police True Type "Lucida Console"
Comme indiqué :

4. Exécutez python


Contenu de 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) # 也可打印全部,看看有没有错
洪涛

Je viens de mettre le code de la question dans pycharm, et ce problème ne s'est pas produit. Ensuite, j'ai utilisé l'invite de commande Windows pour taper ligne par ligne, et ce problème s'est produit. L'invite de commande Windows utilise le codage gbk et la page Web elle-même utilise utf-8 pour le codage. Si vous souhaitez l'exécuter depuis la ligne de commande, vous devez écrire :

`__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)`

Icireq = req.decode('gbk', 'ignore') laissez-moi vous expliquer : pour afficher dans l'invite de commande Windows, il doit être décodé en gbk, mais certains caractères de utf-8 lui-même utilisent gbkLe décodage échouera à nouveau, donc le deuxième paramètre ignore est nécessaire. Ce paramètre signifie supprimer les caractères qui ne peuvent pas être décodés.
En passant, l'encodage peut également rencontrer ce problème. Par exemple, si vous utilisez la bibliothèque de requêtes pour demander, ce sera la chaîne demandée au lieu du type d'octet. Si vous rencontrez des problèmes d'encodage, vous pouvez également utiliser str. .encode('encoding', 'ingore').decode('decoding') pour résoudre des problèmes similaires.
Si vous ne comprenez pas, vous pouvez lire mon blog

Pour répondre à une question sur le sujet, certaines pages Web conviennent. Il se peut que certaines pages Web utilisent l'encodage GBK ou que le texte soit compatible à la fois avec GBK et UTF-8

大家讲道理

On estime que l'encodage par défaut de votre système est gbk, vous pouvez l'essayer

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

L'exécutez-vous à l'aide de la console Windows ? Parce que le codage par défaut de la console est gbk.
Vous pouvez utiliser l'interpréteur fourni avec Python :

Ou utiliser d'autres outils à la place de la console.

巴扎黑

# _*_ coding: utf-8 _*_
Spécifier l'encodage du fichier

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

Indiquez l'encodage de votre programme.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal