Heim > Artikel > Backend-Entwicklung > Gründe und Lösungen für von Python erfasste verstümmelte Webseiten
Der Inhalt dieses Artikels befasst sich mit den Gründen und Lösungen für das Crawlen verstümmelter Webseiten. Freunde in Not können darauf verweisen.
Wenn wir Python2 zum Crawlen von Webseiten verwenden, stellen wir häufig fest, dass der erfasste Inhalt als verstümmelte Zeichen angezeigt wird.
Die wahrscheinlichste Möglichkeit dafür ist ein Codierungsproblem: Die Zeichencodierung der laufenden Umgebung stimmt nicht mit der Zeichencodierung der Webseite überein.
Zum Beispiel wird eine utf-8-codierte Website in der Windows-Konsole (GBK) erfasst. Oder eine GBK-codierte Website in einem Mac/Linux-Terminal (utf-8) gecrackt. Da die meisten Websites UTF-8-Kodierung verwenden und viele Benutzer Windows verwenden, kommt diese Situation recht häufig vor.
Wenn Sie feststellen, dass das Englische, die Zahlen und die Symbole in den von Ihnen erfassten Inhalten korrekt zu sein scheinen, in der Mitte jedoch einige verstümmelte Zeichen vorhanden sind, können Sie im Grunde genommen zu dem Schluss kommen, dass dies der Fall ist.
Die Lösung dieses Problems besteht darin, das Ergebnis zunächst gemäß der Codierungsmethode der Webseite in Unicode zu dekodieren und es dann auszugeben. Wenn Sie sich über die Kodierung der Webseite nicht sicher sind, können Sie auf den folgenden Code zurückgreifen:
import urllib req = urllib.urlopen("http://some.web.site") info = req.info() charset = info.getparam('charset') content = req.read() print content.decode(charset, 'ignore')
'ignore' Die Funktion des Parameters 'ignore' besteht darin, Zeichen zu ignorieren, die nicht dekodiert werden können.
Diese Methode funktioniert jedoch nicht immer. Eine andere Möglichkeit besteht darin, die Codierungseinstellungen im Webseitencode direkt über reguläre Ausdrücke abzugleichen:
<meta>
Zusätzlich zu Codierungsproblemen, die verstümmelte Zeichen verursachen, gibt es eine weitere Situation, die oft übersehen wird, nämlich die gzip-Komprimierung ist auf der Zielwebseite aktiviert. Komprimierte Webseiten übertragen weniger Daten und öffnen sich schneller. Wenn Sie es in einem Browser öffnen, dekomprimiert der Browser es automatisch basierend auf den Header-Informationen der Webseite. Aber es direkt mit Code zu erfassen, wird nicht funktionieren. Daher sind Sie möglicherweise verwirrt, warum es richtig ist, die Webseitenadresse zu öffnen, sie aber nicht mit dem Programm zu crawlen. Sogar ich selbst habe mich von diesem Problem täuschen lassen.
Die Manifestation dieser Situation ist, dass der erfasste Inhalt fast vollständig verstümmelt ist und nicht einmal angezeigt werden kann. Um festzustellen, ob die Komprimierung auf einer Webseite aktiviert ist, und um sie zu dekomprimieren, können Sie auf den folgenden Code zurückgreifen:import urllib import gzip from StringIO import StringIO req = urllib.urlopen("http://some.web.site") info = req.info() encoding = info.getheader('Content-Encoding') content = req.read() if encoding == 'gzip': buf = StringIO(content) gf = gzip.GzipFile(fileobj=buf) content = gf.read() print contentIn unserer Beispielserie zur Wetterprüfung im Klassenzimmer (zum Anzeigen klicken) sind diese Zwei Probleme beunruhigen Nicht wenige Menschen. Lassen Sie mich hier eine besondere Erklärung geben. Abschließend möchte ich noch eine weitere „scharfe Waffe“ vorstellen. Wenn Sie es von Anfang an verwenden, wissen Sie nicht einmal, dass die beiden oben genannten Probleme bestehen. Dies ist das Modul
Anfragen.
Webseiten auf ähnliche Weise crawlen, nur:import requests print requests.get("http://some.web.site").textKeine Codierungsprobleme, keine Komprimierungsprobleme. Deshalb liebe ich Python.Informationen zur Installation des Anforderungsmoduls finden Sie im vorherigen Artikel:So installieren Sie Python-Module von Drittanbietern - Crossin's Programming Classroom – Zhihu-Kolumne
pip install requests
Das obige ist der detaillierte Inhalt vonGründe und Lösungen für von Python erfasste verstümmelte Webseiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!