Heim >Backend-Entwicklung >Python-Tutorial >Ausführliche Erläuterung des Python-Crawlers, der Cookies zur Implementierung simulierter Anmeldebeispiele verwendet
Cookie bezieht sich auf die Daten (normalerweise verschlüsselt), die von einigen Websites auf dem lokalen Terminal des Benutzers gespeichert werden, um die Identität des Benutzers zu identifizieren und eine Sitzungsverfolgung durchzuführen.
Bei einigen Websites ist eine Anmeldung erforderlich, um die gewünschten Informationen zu erhalten. Ohne Anmeldung können Sie nur in den Gastmodus wechseln. Dann können wir die Urllib2-Bibliothek verwenden, um die Cookies zu speichern, die wir zuvor angemeldet haben Laden Sie sie dann, um die gewünschte Seite zu erhalten, und crawlen Sie sie. Das Verständnis von Cookies dient hauptsächlich dazu, uns darauf vorzubereiten, die Anmeldung schnell zu simulieren und die Zielwebseite zu crawlen.
In meinem vorherigen Beitrag habe ich die Funktion urlopen() verwendet, um eine Webseite zum Crawlen zu öffnen. Dies ist nur ein einfacher Python-Webseitenöffner, und seine Parameter sind nur urlopen(url, data, timeout), Diese drei Die Parameter reichen bei weitem nicht aus, um das Cookie der Zielwebseite zu erhalten. Zu diesem Zeitpunkt werden wir ein anderes Opener-CookieJar verwenden.
Cookielib ist auch ein wichtiges Modul für Python-Crawler. Es kann mit urllib2 kombiniert werden, um den gewünschten Inhalt zu crawlen. Das Objekt der CookieJar-Klasse dieses Moduls kann Cookies erfassen und sie bei nachfolgenden Verbindungsanfragen erneut senden, sodass wir die simulierte Anmeldefunktion erreichen können, die wir benötigen.
Ein besonderer Hinweis hier ist, dass cookielib ein integriertes Modul in py2.7 ist. Es ist nicht erforderlich, es neu zu installieren. Wenn Sie die integrierten Module anzeigen möchten, können Sie den Lib-Ordner anzeigen das Python-Verzeichnis, das alle installierten Module enthält. Ich habe zuerst nicht daran gedacht, aber ich konnte cookielib in pycharm nicht finden. Ich habe die Schnellinstallation verwendet und eine Fehlermeldung erhalten: Indexseite für „Cookielib“ konnte nicht gefunden werden (vielleicht falsch geschrieben?)
Dann fiel mir ein, dass ich nicht damit gerechnet hatte, in den lib-Ordner zu gehen und zu sehen, dass ich eine halbe Stunde damit verschwendet hatte, herumzuspielen 🎜> Lassen Sie uns dieses Modul vorstellen. Die Hauptobjekte dieses Moduls sind CookieJar, FileCookieJar, MozillaCookieJar und LWPCookieJar.
Ihre Beziehung: CookieJar —-Derived—->FileCookieJar —-Derived—–>Die Hauptverwendung von MozillaCookieJar und LWPCookieJar, wir werden weiter unten auch darüber sprechen. Die Funktion urllib2.urlopen() unterstützt keine Authentifizierung, Cookies oder andere erweiterte HTTP-Funktionen. Um diese Funktionen zu unterstützen, müssen Sie die Funktion build_opener() verwenden (kann verwendet werden, um das Python-Programm den Browserzugriff simulieren zu lassen, Sie kennen die Funktion ~), um ein benutzerdefiniertes Opener-Objekt zu erstellen.
1. Zuerst holen wir uns das Cookie der Website
Beispiel:
Ergebnis:#coding=utf-8 import cookielib import urllib2 mycookie = cookielib.CookieJar() #声明一个CookieJar的类对象保存cookie(注意CookieJar的大小写问题) handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2库中的HTTPCookieProcessor来声明一个处理cookie的处理器 opener = urllib2.build_opener(handler) #利用handler来构造opener,opener的用法和urlopen()类似 response = opener.open("http://www.baidu.com") #opener返回的一个应答对象response for item in my.cookie: print"name="+item.name print"value="+item.value
name=BAIDUID value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1 name=BIDUPSID value=73BD718962A6EA0DAD4CB9578A08FDD0 name=H_PS_PSSID value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398 name=PSTM value=1478834132 name=BDSVRTM value=0 name=BD_HOME value=0
Auf diese Weise erhalten wir den einfachsten Keks.
2. Speichern Sie das Cookie in einer Datei
Oben haben wir das Cookie erhalten, jetzt lernen wir, wie man das Cookie speichert. Hier verwenden wir seine Unterklasse MozillaCookieJar, um Cookies zu speichern.
Beispiel:
#coding=utf-8 import cookielib import urllib2 mycookie = cookielib.MozillaCookieJar() #声明一个MozillaCookieJar的类对象保存cookie(注意MozillaCookieJar的大小写问题) handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2库中的HTTPCookieProcessor来声明一个处理cookie的处理器 opener = urllib2.build_opener(handler) #利用handler来构造opener,opener的用法和urlopen()类似 response = opener.open("http://www.baidu.com") #opener返回的一个应答对象response for item in mycookie: print"name="+item.name print"value="+item.value filename='mycookie.txt'#设定保存的文件名 mycookie.save(filename,ignore_discard=True, ignore_expires=True)
Transformieren Sie einfach das obige Beispiel, um dieses Beispiel zu erhalten. Verwenden Sie MozillaCookiJar, eine Unterklasse von CookieJar. Warum? Versuchen wir, MozillaCookiJar durch CookieJar zu ersetzen. Sie können es im Bild unten verstehen:
CookieJar speichert das Speicherattribut nicht~
save() In diesem Methode: „ignore_discard“ bedeutet, die Cookies zu speichern, auch wenn sie verworfen werden. „ignore_expires“ bedeutet, dass die Originaldatei überschrieben wird, wenn sie bereits in der Datei vorhanden sind. Hier setzen wir beide auf „True“. Nach dem Ausführen werden die Cookies in der Datei cookie.txt gespeichert. Überprüfen wir den Inhalt:
Auf diese Weise haben wir die gewünschten Cookies erfolgreich gespeichert
3. Holen Sie sich den Cookie aus der Datei und besuchen Sie
<pre style="background-color: rgb(255, 255, 255); font-family: 宋体; font-size: 9pt;"><pre name="code" class="python">#coding=utf-8 import urllib2 import cookielib import urllib #第一步先给出账户密码网址准备模拟登录 postdata = urllib.urlencode({ 'stuid': '1605122162', 'pwd': 'xxxxxxxxx'#密码这里就不泄漏啦,嘿嘿嘿 }) loginUrl = 'http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp'# 登录教务系统的URL,成绩查询网址 # 第二步模拟登陆并保存登录的cookie filename = 'cookie.txt' #创建文本保存cookie mycookie = cookielib.MozillaCookieJar(filename) # 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(mycookie)) #定义这个opener,对象是cookie result = opener.open(loginUrl, postdata) mycookie.save(ignore_discard=True, ignore_expires=True)# 保存cookie到cookie.txt中 # 第三步利用cookie请求访问另一个网址,教务系统总址 gradeUrl = 'http://ids.xidian.edu.cn/authserver/login?service' #只要是帐号密码一样的网址就可以, 请求访问成绩查询网址 result = opener.open(gradeUrl) print result.read()
核心思想:创建opener,包含了cookie的内容。之后在利用opener时,就会自动使用原先保存的cookie.
Vielen Dank fürs Lesen, ich hoffe, es kann allen helfen, vielen Dank für Ihr Unterstützung dieser Seite!
Ausführlichere Erklärungen zu Python-Crawlern, die Cookies zur Implementierung simulierter Anmeldebeispiele verwenden, finden Sie auf der chinesischen PHP-Website!