Heim > Artikel > Backend-Entwicklung > 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.
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()
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()
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)
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:
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.
import urllib2, httplib request = urllib2.Request('http://xxxx.com') request.add_header('Accept-encoding', 'gzip') opener = urllib2.build_opener() f = opener.open(request)
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!