Heim >Backend-Entwicklung >Python-Tutorial >Gewissensempfehlung! 8 wesentliche Fähigkeiten für Python-Crawler-Meister!

Gewissensempfehlung! 8 wesentliche Fähigkeiten für Python-Crawler-Meister!

PHPz
PHPznach vorne
2023-04-13 11:55:051621Durchsuche

Gewissensempfehlung! 8 wesentliche Fähigkeiten für Python-Crawler-Meister!

Wenn Sie Crawler schnell erlernen möchten, muss Python die lohnenswerteste Sprache sein, die es zu lernen gilt. Python verfügt über viele Anwendungsszenarien, wie zum Beispiel: schnelle Webentwicklung, Crawler, automatisiert Betrieb und Wartung usw. können einfache Websites, automatische Veröffentlichungsskripte, Skripte zum Senden und Empfangen von E-Mails sowie einfache Skripte zur Erkennung von Bestätigungscodes erstellen.

Auch im Entwicklungsprozess von Crawlern gibt es viele Wiederverwendungsprozesse. Heute fasse ich die 8 wesentlichen Fähigkeiten zusammen, die in Zukunft Zeit und Aufwand sparen und Aufgaben effizient erledigen können.

1. Grundlegendes Web-Crawling

get-Methode

import urllib2
url = "http://www.baidu.com"
response = urllib2.urlopen(url)
print response.read()

post-Methode

import urllib
import urllib2
url = "http://abcde.com"
form = {'name':'abc','password':'1234'}
form_data = urllib.urlencode(form)
request = urllib2.Request(url,form_data)
response = urllib2.urlopen(request)
print response.read()

2. Verwendung Proxy-IP

Bei der Entwicklung von Crawlern kommt es häufig vor, dass die IP blockiert wird. In diesem Fall müssen Sie die Proxy-IP verwenden mit dem Sie einen Proxy einrichten können. Besuchen Sie die Webseite, das folgende Code-Snippet:

import urllib2
proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8087'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen('http://www.baidu.com')
print response.read()

3. Cookies-Verarbeitung

Cookies sind Daten, die von einigen Websites auf dem lokalen Endgerät des Benutzers gespeichert werden Um die Identität des Benutzers zu identifizieren und die Sitzungsverfolgung durchzuführen (normalerweise verschlüsselt), stellt Python das Cookielib-Modul zur Verarbeitung von Cookies bereit. Die Hauptfunktion des Cookielib-Moduls besteht darin, Objekte bereitzustellen, die Cookies speichern können, damit es in Verbindung verwendet werden kann mit dem Modul urllib2, um auf Internetressourcen zuzugreifen. Durchsuchen Sie das öffentliche Konto auf WeChat: Architect Guide, antworten Sie: Architect Get Information.

Code-Snippet:

import urllib2, cookielib
cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())
opener = urllib2.build_opener(cookie_support)
urllib2.install_opener(opener)
content = urllib2.urlopen('http://XXXX').read()

Der Schlüssel ist CookieJar(), der zum Verwalten von HTTP-Cookie-Werten, zum Speichern von durch HTTP-Anfragen generierten Cookies und zum Senden von Cookies verwendet wird an ausgehendes HTTP Das Objekt, das das Hinzufügen von Cookies anfordert. Das gesamte Cookie wird im Speicher gespeichert und geht nach der Speicherbereinigung der CookieJar-Instanz verloren. Alle Prozesse müssen nicht separat ausgeführt werden.

Cookies manuell hinzufügen:

cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="
request.add_header("Cookie", cookie)

4. Als Browser verkleiden

Einige Websites sind vom Besuch von Crawlern angewidert, also Sie Der Crawler lehnt die Anfrage immer ab. Daher tritt häufig HTTP-Fehler 403: Verboten auf, wenn urllib2 für den direkten Zugriff auf die Website verwendet wird.

Achten Sie besonders auf einige Header:

  • User-Agent Some Server or The Proxy prüft diesen Wert, um festzustellen, ob es sich um eine vom Browser initiierte Anfrage handelt.
  • Das leistungsstärkste Tool zum Parsen von Seiten ist natürlich für verschiedene Benutzer unterschiedlich auf verschiedenen Websites, sodass es nicht nötig ist, zu viel zu erklären 🎜#Für diese beiden Bibliotheken bin ich der Meinung, dass es sich bei beiden um HTML/XML-Verarbeitungsbibliotheken handelt und dass Beautifulsoup reines Python ist. Die Implementierung weist eine geringe Effizienz auf, aber die Funktionen sind praktisch. Beispielsweise kann der Quellcode eines HTML-Knotens abgerufen werden durch Suchergebnisse; lxml C-Sprachkodierung ist effizient und unterstützt Xpath.

  • 6. Verifizierungscode-Verarbeitung

Für einige einfache Verifizierungscodes kann eine einfache Identifizierung durchgeführt werden. Ich habe nur eine einfache Bestätigungscode-Erkennung durchgeführt. Einige Anti-Menschen-Verifizierungscodes, wie z. B. 12306, können jedoch manuell über die Codierungsplattform codiert werden. Dies ist natürlich kostenpflichtig.

7, GZIP-Komprimierung


Sind Sie jemals auf Webseiten gestoßen, die ein Durcheinander von Code sind, egal wie Sie sie transkodieren? Haha, das heißt, Sie wissen nicht, dass viele Webdienste komprimierte Daten senden können, wodurch die große Datenmenge, die über Netzwerkleitungen übertragen wird, um mehr als 60 % reduziert werden kann. Dies gilt insbesondere für XML-Webdienste, da XML-Daten sehr stark komprimiert werden können.


Aber im Allgemeinen sendet der Server keine komprimierten Daten für Sie, es sei denn, Sie teilen dem Server mit, dass Sie mit komprimierten Daten umgehen können.


Sie müssen den Code also wie folgt ändern:

import urllib2
headers = {
 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
}
request = urllib2.Request(
 url = 'http://my.oschina.net/jhao104/blog?catalog=3463517',
 headers = headers
)
print urllib2.urlopen(request).read()

Das ist der Schlüssel: Erstellen Sie ein Request-Objekt und fügen Sie eine Accept-Kodierung hinzu -Header, um dem Server mitzuteilen, dass Sie gzip-komprimierte Daten akzeptieren können.


Dann dekomprimieren Sie die Daten:

import urllib2, httplib
request = urllib2.Request('http://xxxx.com')
request.add_header('Accept-encoding', 'gzip')
opener = urllib2.build_opener()
f = opener.open(request)

8. Multithreaded Concurrent Crawling


Wenn ein einzelner Thread zu langsam ist, Sie Benötigen Sie Multithreading, hier ist eine einfache Thread-Pool-Vorlage. Dieses Programm druckt einfach 1-10, aber es ist ersichtlich, dass es gleichzeitig ist.


Obwohl Pythons Multithreading nutzlos ist, kann es bei häufigen Netzwerktypen wie Crawlern dennoch bis zu einem gewissen Grad die Effizienz verbessern.

import StringIO
import gzip
compresseddata = f.read()
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj=compressedstream)
print gzipper.read()

Das obige ist der detaillierte Inhalt vonGewissensempfehlung! 8 wesentliche Fähigkeiten für Python-Crawler-Meister!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen