Maison > Article > développement back-end > Explication détaillée du robot d'exploration Python utilisant des cookies pour implémenter des exemples de connexion simulée
Cookie désigne les données (généralement cryptées) stockées sur le terminal local de l'utilisateur par certains sites Internet afin d'identifier l'identité de l'utilisateur et d'effectuer un suivi de session.
Par exemple, certains sites Web nécessitent une connexion pour obtenir les informations souhaitées. Sans vous connecter, vous ne pouvez accéder qu'en mode invité. Nous pouvons ensuite utiliser la bibliothèque Urllib2 pour enregistrer les cookies que nous avons connectés auparavant, et. puis chargez-les. Entrez le cookie pour obtenir la page souhaitée, puis explorez-la. Comprendre les cookies consiste principalement à nous préparer à simuler rapidement la connexion et à explorer la page Web cible.
Dans mon article précédent, j'ai utilisé la fonction urlopen() pour ouvrir une page Web à explorer. Il s'agit simplement d'un simple ouvre-page Web Python, et ses paramètres sont uniquement urlopen(url, data, timeout), Ces trois paramètres sont loin d’être suffisants pour obtenir le cookie de la page web cible. À ce stade, nous utiliserons un autre Opener-CookieJar.
Cookielib est également un module important pour les robots Python. Il peut être combiné avec urllib2 pour explorer le contenu souhaité. L'objet de la classe CookieJar de ce module peut capturer des cookies et les renvoyer lors de demandes de connexion ultérieures, afin que nous puissions réaliser la fonction de connexion simulée dont nous avons besoin.
Une note spéciale ici est que cookielib est un module intégré dans py2.7. Il n'est pas nécessaire de le réinstaller. Si vous souhaitez afficher ses modules intégrés, vous pouvez afficher le dossier Lib dans. le répertoire Python, qui contient tous les modules installés. Je n'y ai pas pensé au début, mais je n'ai pas trouvé cookielib dans pycharm. J'ai utilisé l'installation rapide et j'ai obtenu une erreur : Impossible de trouver la page d'index pour 'Cookielib' (peut-être mal orthographié ?)
Ensuite, je me suis souvenu que s'il était livré avec, je ne m'attendais pas à aller dans le dossier lib et à voir qu'il était là, j'ai perdu une demi-heure à déconner ~~ Présentons ce module, les objets principaux de ce module sont CookieJar, FileCookieJar, MozillaCookieJar et LWPCookieJar.
#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.valueRésultat :
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=0De cette façon, nous obtenons le cookie le plus simple. 2. Enregistrez le cookie dans un fichier Ci-dessus, nous avons le cookie, maintenant nous apprenons comment enregistrer le cookie. Ici nous utilisons sa sous-classe MozillaCookieJar pour sauvegarder les cookies Exemple :
#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)Vous pouvez obtenir cet exemple en transformant simplement l'exemple ci-dessus, utilisez MozillaCookiJar, une sous-classe de CookieJar, pourquoi ? Essayons de remplacer MozillaCookiJar par CookieJar. Vous pouvez le comprendre dans l'image ci-dessous : CookieJar n'enregistre pas l'attribut save~ save() Dans ce cas. méthode : ignore_discard signifie enregistrer les cookies même s'ils seront supprimés, et ignore_expires signifie que si les cookies existent déjà dans le fichier, le fichier d'origine sera écrasé. Ici, nous les définissons tous les deux sur True. Après l'exécution, les cookies seront enregistrés dans le fichier cookie.txt. Vérifions le contenu : De cette façon, nous avons enregistré avec succès les cookies que nous voulons
3. Récupérez le cookie du fichier et visitez
<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.