Cookielib ist ein Modul, das Cookies automatisch verarbeitet, wenn wir Technologien wie Crawler verwenden, hilft Ihnen cookielib dabei, mit halbem Aufwand das Doppelte zu erzielen! Seine häufigsten Partnermodule sind urllib und request unter Python.
Kernklasse
1.Cookie
Diese Klasse implementiert den von Netscape und RFC 2965-Cookies definierten Cookie-Standard und kann grundsätzlich als bestimmte Cookie-Daten verstanden werden.
Ein Teil des Codes lautet wie folgt. Kommen Ihnen viele Attribute bekannt vor?
self.domain_initial_dot = domain_initial_dot self.path = path self.path_specified = path_specified self.secure = secure self.expires = expires self.discard = discard self.comment = comment self.comment_url = comment_url self.rfc2109 = rfc2109
2.Cookie-Richtlinie
Die Hauptfunktion dieser Klasse besteht darin, Cookies zu senden und zu empfangen, d. h. sicherzustellen, dass das richtige Cookie an den entsprechenden Domänennamen gesendet wird und umgekehrt.
3.DefaultCookiePolicy
Diese Klasse implementiert die CookiePolicy-Schnittstelle.
4.CookieJar
CookieJar ist eine Sammlung von Cookies, die viele Cookie-Klassen enthalten kann und unser Hauptoperationsobjekt ist. Es gibt eine Reihe von Methoden zur Unterstützung detaillierterer Vorgänge!
5.FileCookieJar
Diese Klasse erbt von CookieJar. Die Unterklasse von FileCookieJar kann Datenpersistenz erreichen und drei Schnittstellen definieren: Speichern, Laden und Zurücksetzen.
6.MozillaCookieJar & LWPCookieJar
Zwei Implementierungsklassen, die Vererbungsbeziehung ist wie folgt:
Beispiel: Bei Renren anmelden
Verwenden Sie das httpFox-Plug-in unter Firefox, um die POST-Adresse herauszufinden, die beim Anmelden bei Renren.com erforderlich ist: http://www.renren.com/ajaxLogin
Und ich habe gesehen, dass die DATEN, die gepostet werden müssen, E-Mail und Passwort enthalten
Python verarbeitet Cookies über cookielib. Das Folgende ist ein einfacher Code
>>> import urllib >>> import urllib2,cookielib >>> login_page = "http://www.renren.com/ajaxLogin" >>> cj = cookielib.CookieJar() >>> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) >>> opener.add_handler = [('User-agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')] >>> data = urllib.urlencode({"email":'username',"password":'password'}) >>> opener.open(login_page,data) <addinfourl at 53653216 whose fp = <socket._fileobject object at 0x03307B70>> >>> if cj: ... for index,cookie in enumerate(cj): ... print index,':',cookie ... 0 : <Cookie _de=90D533AE20EB964CA96710977F452897 for .renren.com/> 1 : <Cookie anonymid=hlehtdzg-8359yw for .renren.com/> 2 : <Cookie first_login_flag=1 for .renren.com/> 3 : <Cookie id=224967207 for .renren.com/> 4 : <Cookie loginfrom=null for .renren.com/> 5 : <Cookie p=9beb60859c004bcaf0a32ff2c973473d7 for .renren.com/> 6 : <Cookie societyguester=86b6a6006002ab6316f708521ab50bfc7 for .renren.com/> 7 : <Cookie t=86b6a6006002ab6316f708521ab50bfc7 for .renren.com/> 8 : <Cookie xnsid=fa53da51 for .renren.com/> 9 : <Cookie t=30af9ffe774f4d6f242e92da1ccd6670 for .renren.com/xtalk/> 10 : <Cookie feedType=224967207_hot for .www.renren.com/> 11 : <Cookie JSESSIONID=abc3IP9kEhTExblxcRfeu for www.renren.com/> >>>
Sie können es mit dem in Firebug oder httpFox erhaltenen Cookie vergleichen. Der Wert ist im Grunde derselbe. Er sollte bei jeder Anmeldung inkonsistent sein
Ich habe auch versucht, mit Fidder das Senden von POST-Daten ohne Cookies zu simulieren, aber ich habe nicht den gewünschten Rückgabewert erhalten
Nachdem Sie die Cookie-Informationen hinzugefügt haben, können Sie ganz normal zu Ihrer Homepage springen
Okay, wir verstehen grundsätzlich die Verwendung von Cookies in Python zum Senden von Anmeldeinformationen. Jetzt schreiben wir ein kleines Skript, um uns bei Renren.com anzumelden.
#encoding=utf-8 import urllib2 import urllib import cookielib def renrenBrower(url,user,password): login_page = "http://www.renren.com/ajaxLogin" try: cj = cookielib.CookieJar() opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)')] data = urllib.urlencode({"email":user,"password":password}) opener.open(login_page,data) op=opener.open(url) data= op.read() return data except Exception,e: print str(e) print renrenBrower("http://www.renren.com/home","用户名","密码")