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

Explication détaillée du robot d'exploration Python utilisant des cookies pour implémenter des exemples de connexion simulée

高洛峰
高洛峰original
2017-01-18 16:15:311747parcourir

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é ?)

Explication détaillée du robot dexploration Python utilisant des cookies pour implémenter des exemples de connexion simulée

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.


Leur relation : CookieJar —-Derived—->FileCookieJar —-Derived—–>L'utilisation principale de MozillaCookieJar et LWPCookieJar, nous en parlerons également ci-dessous. La fonction urllib2.urlopen() ne prend pas en charge l'authentification, les cookies ou d'autres fonctionnalités HTTP avancées. Pour prendre en charge ces fonctions, vous devez utiliser la fonction build_opener() (peut être utilisée pour laisser le programme python simuler l'accès au navigateur, vous connaissez la fonction ~) pour créer un objet Opener personnalisé.

1. Tout d'abord, récupérons le cookie du site Web

Exemple :

#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
Ré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=0

De 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 :

Explication détaillée du robot dexploration Python utilisant des cookies pour implémenter des exemples de connexion simulée

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 :

Explication détaillée du robot dexploration Python utilisant des cookies pour implémenter des exemples de connexion simulée

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({
  &#39;stuid&#39;: &#39;1605122162&#39;,
  &#39;pwd&#39;: &#39;xxxxxxxxx&#39;#密码这里就不泄漏啦,嘿嘿嘿
})
loginUrl = &#39;http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp&#39;# 登录教务系统的URL,成绩查询网址
  
# 第二步模拟登陆并保存登录的cookie
filename = &#39;cookie.txt&#39;  #创建文本保存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 = &#39;http://ids.xidian.edu.cn/authserver/login?service&#39;  #只要是帐号密码一样的网址就可以, 请求访问成绩查询网址
result = opener.open(gradeUrl)
print result.read()





创建一个带有cookie的opener,在访问登录的URL时,将登录后的cookie保存下来,然后利用这个cookie来访问其他网址。


核心思想:创建opener,包含了cookie的内容。之后在利用opener时,就会自动使用原先保存的cookie.

    

Merci d'avoir lu, j'espère que cela pourra aider tout le monde, merci pour votre soutien de ce site !

Pour des explications plus détaillées sur les robots d'exploration Python utilisant des cookies pour implémenter des exemples de connexion simulée, veuillez prêter attention au site Web PHP chinois pour les articles connexes !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn