J'utilise python + BS4 + pyside dans le code, s'il vous plaît regarder la partie du code ci-dessous:UnicodeWarning: Certains caractères ne peuvent être décodés, et ont été remplacés par REMPLACEMENT CARACTÈRE
enter code here
#coding:gb2312
import urllib2
import sys
import urllib
import urlparse
import random
import time
from datetime import datetime, timedelta
import socket
from bs4 import BeautifulSoup
import lxml.html
from PySide.QtGui import *
from PySide.QtCore import *
from PySide.QtWebKit import *
def download(self, url, headers, proxy, num_retries, data=None):
print 'Downloading:', url
request = urllib2.Request(url, data, headers or {})
opener = self.opener or urllib2.build_opener()
if proxy:
proxy_params = {urlparse.urlparse(url).scheme: proxy}
opener.add_handler(urllib2.ProxyHandler(proxy_params))
try:
response = opener.open(request)
html = response.read()
code = response.code
except Exception as e:
print 'Download error:', str(e)
html = ''
if hasattr(e, 'code'):
code = e.code
if num_retries > 0 and 500 <= code < 600:
# retry 5XX HTTP errors
return self._get(url, headers, proxy, num_retries-1, data)
else:
code = None
return {'html': html, 'code': code}
def crawling_hdf(openfile):
filename = open(openfile,'r')
namelist = filename.readlines()
app = QApplication(sys.argv)
for name in namelist:
url = "http://so.haodf.com/index/search?type=doctor&kw="+ urllib.quote(name)
#get doctor's home page
D = Downloader(delay=DEFAULT_DELAY, user_agent=DEFAULT_AGENT, proxies=None, num_retries=DEFAULT_RETRIES, cache=None)
html = D(url)
soup = BeautifulSoup(html)
tr = soup.find(attrs={'class':'docInfo'})
td = tr.find(attrs={'class':'docName font_16'}).get('href')
print td
#get doctor's detail information page
loadPage_bs4(td)
filename.close()
if __name__ == '__main__':
crawling_hdf("name_list.txt")
Après je lance le programme, il affiche un message Waring:
Avertissement (des avertissements module): fichier "C: \ Python27 \ lib \ site-packages \ BS4 \ dammit.py", ligne 231 « Certains personnages ne pouvaient pas être décodé, et étaient " UnicodeWarning: Certains caractères n'ont pas pu être décodés, et ont été remplacés avec CARACTÈRE DE REMPLACEMENT.
Je l'ai utilisé print str (html) et trouver toutes les langues chinoises dans tages sont le code désordre.
J'ai essayé d'utiliser les solutions "décoder ou encoder" et "gzip" qui sont recherchées sur ce site, mais ça ne marche pas dans mon cas.
"Pas de conversion directe" - avec cela, vous voulez dire * en Python *? Il n'y a rien de spécial à propos de GBK, c'est juste un autre [encodage régulier] (https://en.wikipedia.org/wiki/GBK). Aussi: UTF8 est juste un système de stockage (pour Unicode), donc même s'il n'y a pas de conversion 'directe', il vaut mieux l'appeler par son nom propre et laisser UTF8 en dehors de cela. – usr2564301
Je ne suis pas sûr de ce que vous voulez dire. Ma compréhension du problème est qu'il existe une page codée gbk que dammit.py ne parvient pas à convertir en utf-8. Je donne une solution de contournement que j'ai vu utilisée en utilisant latin-1 en tant que «traducteur». Étant donné le contexte, je dirais que "en Python" est une donnée. FWIW, s'il y a un meilleur moyen d'aller d'un b à ici, je suis tout à fait pour ça! – jinksPadlock
Cette question aurait été un doublon si celui que vous avez trouvé avait une réponse acceptée ... Pourtant, le commentaire "Le détour sur latin-1 est choquant" aurait dû vous dire quelque chose. – usr2564301