Suchmaschinen-Crawler stoßen beim Crawlen auf Situationen, in denen die Webseite umgeleitet wird. Die sogenannte Umleitung erfolgt über verschiedene Methoden (die drei in diesem Artikel erwähnten). Leiten Sie verschiedene Netzwerkanforderungen um zu anderen Orten (URLs). Die Homepage jeder Website ist der Zugang zu Website-Ressourcen. Wenn eine Umleitung auf der Homepage der Website erfolgt, wird bei unsachgemäßer Handhabung wahrscheinlich der Inhalt der gesamten Website übersehen.
1. Die serverseitige Umleitung erfolgt im Allgemeinen selbst und erfordert keine spezielle Verarbeitung wie die Antwortcodes 301 (permanente Umleitung), 302 (temporäre Umleitung) usw . . Insbesondere kann dies anhand der beiden Attribute URL und Statuscode im von der Anforderung erhaltenen Antwortobjekt beurteilt werden. Wenn der Statuscode 301, 302 oder ein anderer Umleitungscode ist, bedeutet dies, dass die ursprüngliche Anforderung umgeleitet wurde. Wenn das URL-Attribut des Antwortobjekts beim Senden der Anforderung nicht mit dem Link übereinstimmt, bedeutet dies auch, dass die ursprüngliche Anforderung umgeleitet wurde und wurde automatisch verarbeitet.
#请求重定向 #方法一 response.setStatus(302); response.setHeader("location", "/day06/index.jsp"); #方法二 response.sendRedirect("/day06/index.jsp");
Scrapy Shell ruft die umgeleitete Seite ab
scrapy shell -s ROBOTSTXT_OBEY=False --no-redirect " fetch(response.headers['Location'])
2. Meta-Refresh, das heißt, das deklariert den Weiterleitungslink der Webseite Wird vom Browser abgeschlossen und muss zum Verarbeiten Code geschrieben werden. Wenn beispielsweise im Kommentar in der dritten Zeile des HTML-Codes unten eine bestimmte Umleitung angezeigt wird, kann der Browser automatisch springen, der Crawler kann jedoch nur die Seite vor dem Sprung abrufen und nicht automatisch springen.
<html> <head> <meta http-equiv="refresh" content="0.1;url=http://www.redirectedtoxxx.com/"><!--本网页会在0.1秒内refresh为url所指的网页--> </head> </html>
Die Lösung besteht darin, vor dem Sprung den Quellcode der Seite abzurufen und die Weiterleitungs-URL-Informationen (den URL-Attributwert in der dritten Zeile des obigen Codes) zu extrahieren. Eine spezifische Operation:
① Verwenden Sie xpath('//meta[@http-equiv="refresh" and @content]/@content'), um den Wert des Inhalts zu extrahieren
②Verwenden Sie Regular Ausdruck extrahiert den umgeleiteten URL-Wert.
3. js-Umleitung, Umleitung durch JavaScript-Code. Beispielsweise ist der folgende JavaScript-Code
<script language=javascript>window.location.href='http://www.redirectedtoxxx.com'</script>
am einfachsten zu lösen, wenn die Webseite Inhalte enthält. Im Allgemeinen handelt es sich im Wesentlichen um den Inhalt der statischen Webseite, die fest codiert wurde, oder des dynamischen Webs Die Seite wird mithilfe einer Vorlage gerendert und der Browser erhält den HTML-Code. Sie enthält bereits alle wichtigen Informationen, sodass der Inhalt, den Sie direkt auf der Webseite sehen, über bestimmte HTML-Tags mit Javascript-Code geladen werden kann. Dies liegt daran, dass der Inhalt zwar vorhanden ist im HTML-Tag, wenn die Webseite tatsächlich angezeigt wird Dies liegt daran, dass der JS-Code ausgeführt und dem Tag hinzugefügt wird, sodass sich der Inhalt zu diesem Zeitpunkt im JS-Code befindet und die JS-Ausführung auf der Browserseite ausgeführt wird. Wenn also ein Programm zum Anfordern der Webseitenadresse verwendet wird, ist die erhaltene Antwort der Webseitencode und der JS-Code, sodass Sie den Inhalt auf der Browserseite sehen können. Da der JS beim Parsen nicht ausgeführt wird, wird der Inhalt unter dem angegebenen angezeigt Es muss festgestellt werden, dass das HTML-Tag leer ist. Die Lösung besteht im Allgemeinen darin, den JS-Code zu finden, der die Inhaltszeichenfolge enthält, und dann den entsprechenden Inhalt über reguläre Ausdrücke abzurufen, anstatt HTML-Tags zu analysieren.
Weitere technische Artikel zum Thema Python finden Sie in der Spalte Python-Tutorial, um mehr darüber zu erfahren!
Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn der Python-Crawler beim Crawlen der Webseite auf eine Webseitenumleitung stößt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!