recherche
Maisondéveloppement back-endTutoriel PythonEnregistrement complet de l'écriture de robots d'exploration Python à partir de scratch_python

Les neuf premiers articles ont été présentés en détail, des bases à l'écriture. Le dixième article concerne la perfection, alors enregistrons en détail comment écrire un programme d'exploration étape par étape. Veuillez le lire. >

Parlons d'abord du site Web de notre école :

http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html

Vérifier les résultats Vous devez vous connecter , puis les résultats de chaque matière sont affichés, mais seuls les résultats sont affichés sans les notes, qui sont la note moyenne pondérée.

De toute évidence, calculer manuellement les notes est une chose très gênante. Nous pouvons donc utiliser Python pour créer un robot permettant de résoudre ce problème.

1. La veille de la bataille décisive

Préparons d'abord un outil : le plug-in HttpFox.

Il s'agit d'un plug-in d'analyse du protocole http qui analyse l'heure et le contenu des requêtes et des réponses des pages, ainsi que le COOKIE utilisé par le navigateur.


Prenez-moi comme exemple, installez-le simplement sur Firefox, l'effet est le suivant :

Vous pouvez visualiser les informations correspondantes de manière très intuitive.

Cliquez sur Démarrer pour démarrer la détection, cliquez sur Arrêter pour suspendre la détection et cliquez sur Effacer pour effacer le contenu.

Généralement, avant de l'utiliser, cliquez sur arrêter pour mettre en pause, puis cliquez sur Effacer pour effacer l'écran afin de vous assurer que vous voyez les données obtenues en accédant à la page en cours.


2. Allez au plus profond des lignes ennemies

Allons sur le site Web de requête de score de l'Université du Shandong pour voir ce qui a été envoyé lors de la connexion. information.

Allez d'abord sur la page de connexion et ouvrez httpfox. Après avoir effacé, cliquez sur Démarrer pour activer la détection :

Après avoir saisi les informations personnelles, assurez-vous que httpfox est activé. Cliquez ensuite sur OK pour soumettre les informations et vous connecter.

À ce moment, vous pouvez voir que httpfox a détecté trois informations :

À ce moment, cliquez sur le bouton d'arrêt pour vous assurer que ce qui est les commentaires après avoir visité la page sont capturés afin que nous puissions simuler la connexion lors de l'exécution de robots d'exploration.

3. Hu Ding Jie Niu

À première vue, nous avons trois données, deux sont GET et une est POST, mais que sont-elles exactement ? ça, on ne le sait toujours pas.

Nous devons donc examiner le contenu capturé un par un.

Regardez d'abord les informations POST :


Puisqu'il s'agit d'informations POST, nous pouvons simplement regarder PostData.

Vous pouvez voir qu'il existe deux données POST, studid et pwd.

Et on peut voir à partir de la redirection vers de type qu'une fois le POST terminé, il passe à la page bks_login2.loginmessage.

On peut voir que ces données sont les données du formulaire soumises après avoir cliqué sur OK.

Cliquez sur l'étiquette du cookie pour voir les informations du cookie :


Oui, j'ai reçu un cookie de COMPTE et il sera automatiquement détruit après le la séance se termine.

Alors, quelles informations avez-vous reçues après avoir soumis votre candidature ?

Jetons un coup d'œil aux deux données GET suivantes.

Regardons d'abord le premier. On clique sur la balise content pour visualiser le contenu reçu. Avez-vous envie de le manger vivant ? -Le code source HTML est sans doute exposé :


Il semble qu'il ne s'agisse que du code source html de la page d'affichage. Cliquez sur le cookie pour afficher le cookie. -informations liées :



Aha, il s'avère que le contenu de la page html a été reçu après que les informations sur le cookie aient été envoyé.

Regardons le dernier message reçu :

Après un examen approximatif, il devrait s'agir simplement d'un fichier CSS appelé style.css, qui ne ça ne veut pas dire grand chose pour nous.

4. Répondez calmement

Maintenant que nous savons quelles données nous avons envoyées au serveur et quelles données nous avons reçues, le processus de base est le suivant :

Tout d'abord, nous POSTONS l'identifiant et le mot de passe de l'étudiant ---> puis renvoyons la valeur du cookie, puis envoyons le cookie au serveur ---> Obtenez les données de la page des notes, utilisez des expressions régulières pour extraire les notes et les crédits séparément et calculez la moyenne pondérée.


OK, cela ressemble à un échantillon de papier très simple. Alors essayons-le.

Mais avant l'expérience, il reste encore un problème non résolu : où sont envoyées les données POST ?

Regardez à nouveau la page originale :

Évidemment, il est implémenté à l'aide d'un framework html, c'est-à-dire que l'adresse que nous voyons dans la barre d'adresse n'est pas l'adresse de soumission du formulaire à droite.

Alors, comment puis-je obtenir la vraie adresse -. -Cliquez avec le bouton droit pour afficher le code source de la page :

Oui, c'est vrai, celle avec name="w_right" est la page de connexion que nous voulons.

L'adresse originale du site Web est :

http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html

Donc, la forme réelle soumission L'adresse doit être :

http://jwxt.sdu.edu.cn:7777/zhxt_bks/xk_login.html

Après l'avoir saisie, il s'avère qu'elle est comme prévu :


Merde, c'est le système de sélection de cours de l'Université Tsinghua. . . Je suppose que notre école était trop paresseuse pour créer une page, alors nous l'avons simplement empruntée. . En conséquence, le titre n’a même pas été modifié. . .

Mais cette page n'est toujours pas la page dont nous avons besoin, car la page à laquelle nos données POST sont soumises devrait être la page soumise dans l'ACTION du formulaire.

En d'autres termes, nous devons vérifier le code source pour savoir où les données POST sont envoyées :


Eh bien, visuellement, c'est le Soumission POST L’adresse des données.

Organisez-le dans la barre d'adresse. L'adresse complète doit être la suivante :

http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login

(La façon de l'obtenir est très simple, cliquez sur le lien directement dans le navigateur Firefox pour voir l'adresse du lien)

5. d'une petite manière

La tâche suivante consiste à utiliser python pour simuler l'envoi de données POST et obtenir la valeur du cookie renvoyée.

Pour le fonctionnement des cookies, vous pouvez lire cet article de blog :

http://www.jb51.net/article/57144.htm

Nous préparons dans un premier temps un POST les données, préparez un cookie à recevoir, puis écrivez le code source comme suit :

# -*- coding: utf-8 -*-
#---------------------------------------
#   程序:山东大学爬虫
#   版本:0.1
#   作者:why
#   日期:2013-07-12
#   语言:Python 2.7
#   操作:输入学号和密码
#   功能:输出成绩的加权平均值也就是绩点
#---------------------------------------
import urllib  
import urllib2
import cookielib
cookie = cookielib.CookieJar()  
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#需要POST的数据#
postdata=urllib.urlencode({  
    'stuid':'201100300428',  
    'pwd':'921030'  
})
#自定义一个请求#
req = urllib2.Request(  
    url = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login',  
    data = postdata
)
#访问该链接#
result = opener.open(req)
#打印返回的内容#
print result.read()

Après cela, regardez l'effet de l'opération :


ok, de cette façon, nous avons simulé avec succès la connexion.

6. Remplacer une chose par une autre

La tâche suivante consiste à utiliser un robot pour obtenir les scores des élèves.

Regardons à nouveau le site Web source.

Après avoir activé HTTPFOX, cliquez pour afficher les résultats et constatez que les données suivantes ont été capturées :


Cliquez sur la première donnée GET pour visualiser le contenu. On constate que le Contenu est le contenu de la partition obtenue.

Pour le lien de page obtenu, faites un clic droit pour afficher l'élément du code source de la page, et vous pourrez voir la page qui saute après avoir cliqué sur le lien (dans Firefox, il vous suffit de faire un clic droit et " Voir ce cadre". ):


Vous pouvez obtenir le lien pour afficher les résultats comme suit :

http://jwxt .sdu.edu.cn : 7777/pls/wwwbks/bkscjcx.curscopre

7. Tout est prêt

Maintenant, tout est prêt, alors postulez simplement le lien vers le robot d'exploration, voyez si vous pouvez afficher la page de résultats.

Comme vous pouvez le voir sur httpfox, nous devons envoyer un cookie pour renvoyer les informations de score, nous utilisons donc python pour simuler l'envoi d'un cookie pour demander les informations de score :

# -*- coding: utf-8 -*-
#---------------------------------------
#   程序:山东大学爬虫
#   版本:0.1
#   作者:why
#   日期:2013-07-12
#   语言:Python 2.7
#   操作:输入学号和密码
#   功能:输出成绩的加权平均值也就是绩点
#---------------------------------------
import urllib  
import urllib2
import cookielib
#初始化一个CookieJar来处理Cookie的信息#
cookie = cookielib.CookieJar()
#创建一个新的opener来使用我们的CookieJar#
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
#需要POST的数据#
postdata=urllib.urlencode({  
    'stuid':'201100300428',  
    'pwd':'921030'  
})
#自定义一个请求#
req = urllib2.Request(  
    url = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login',  
    data = postdata
)
#访问该链接#
result = opener.open(req)
#打印返回的内容#
print result.read()
#打印cookie的值
for item in cookie:  
    print 'Cookie:Name = '+item.name  
    print 'Cookie:Value = '+item.value
    
#访问该链接#
result = opener.open('http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bkscjcx.curscopre')
#打印返回的内容#
print result.read()

Appuyez sur F5 pour exécuter et jeter un œil aux données capturées :


Comme il n'y a pas de problème de cette manière, utilisez des expressions régulières pour convertir légèrement les données. traitez-le et retirez les crédits et les scores correspondants.

8. Obtenez-le à portée de main

Une telle quantité de code source HTML n'est évidemment pas propice à notre traitement. Nous utiliserons des expressions régulières pour. extraire les données nécessaires.

Pour des tutoriels sur les expressions régulières, vous pouvez consulter ce billet de blog :

http://www.jb51.net/article/57150.htm

Prenons un regardez les résultats Le code source :


Dans ce cas, utiliser des expressions régulières est simple.

Nous allons ranger un peu le code, puis utiliser des expressions régulières pour extraire les données :

# -*- coding: utf-8 -*-
#---------------------------------------
#   程序:山东大学爬虫
#   版本:0.1
#   作者:why
#   日期:2013-07-12
#   语言:Python 2.7
#   操作:输入学号和密码
#   功能:输出成绩的加权平均值也就是绩点
#---------------------------------------
import urllib  
import urllib2
import cookielib
import re
class SDU_Spider:  
    # 申明相关的属性  
    def __init__(self):    
        self.loginUrl = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login'   # 登录的url
        self.resultUrl = 'http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bkscjcx.curscopre' # 显示成绩的url
        self.cookieJar = cookielib.CookieJar()                                      # 初始化一个CookieJar来处理Cookie的信息
        self.postdata=urllib.urlencode({'stuid':'201100300428','pwd':'921030'})     # POST的数据
        self.weights = []   #存储权重,也就是学分
        self.points = []    #存储分数,也就是成绩
        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookieJar))
    def sdu_init(self):
        # 初始化链接并且获取cookie
        myRequest = urllib2.Request(url = self.loginUrl,data = self.postdata)   # 自定义一个请求
        result = self.opener.open(myRequest)            # 访问登录页面,获取到必须的cookie的值
        result = self.opener.open(self.resultUrl)       # 访问成绩页面,获得成绩的数据
        # 打印返回的内容
        # print result.read()
        self.deal_data(result.read().decode('gbk'))
        self.print_data(self.weights);
        self.print_data(self.points);
    # 将内容从页面代码中抠出来  
    def deal_data(self,myPage):  
        myItems = re.findall(&#39;<TR>.*?<p.*?<p.*?<p.*?<p.*?<p.*?>(.*?)</p>.*?<p.*?<p.*?>(.*?)</p>.*?</TR>&#39;,myPage,re.S)     #获取到学分
        for item in myItems:
            self.weights.append(item[0].encode(&#39;gbk&#39;))
            self.points.append(item[1].encode(&#39;gbk&#39;))
            
    # 将内容从页面代码中抠出来
    def print_data(self,items):  
        for item in items:  
            print item
#调用  
mySpider = SDU_Spider()  
mySpider.sdu_init()

Le niveau est limité, et les expressions régulières sont un peu laides. L'effet de course est comme le montre la figure :

ok, la prochaine chose est juste le problème de traitement des données. .

9. Retour en triomphe

Le code complet est le suivant À ce stade, un projet de robot complet est terminé.

# -*- coding: utf-8 -*-
#---------------------------------------
#   程序:山东大学爬虫
#   版本:0.1
#   作者:why
#   日期:2013-07-12
#   语言:Python 2.7
#   操作:输入学号和密码
#   功能:输出成绩的加权平均值也就是绩点
#---------------------------------------
import urllib  
import urllib2
import cookielib
import re
import string
class SDU_Spider:  
    # 申明相关的属性  
    def __init__(self):    
        self.loginUrl = &#39;http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login&#39;   # 登录的url
        self.resultUrl = &#39;http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bkscjcx.curscopre&#39; # 显示成绩的url
        self.cookieJar = cookielib.CookieJar()                                      # 初始化一个CookieJar来处理Cookie的信息
        self.postdata=urllib.urlencode({&#39;stuid&#39;:&#39;201100300428&#39;,&#39;pwd&#39;:&#39;921030&#39;})     # POST的数据
        self.weights = []   #存储权重,也就是学分
        self.points = []    #存储分数,也就是成绩
        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookieJar))
    def sdu_init(self):
        # 初始化链接并且获取cookie
        myRequest = urllib2.Request(url = self.loginUrl,data = self.postdata)   # 自定义一个请求
        result = self.opener.open(myRequest)            # 访问登录页面,获取到必须的cookie的值
        result = self.opener.open(self.resultUrl)       # 访问成绩页面,获得成绩的数据
        # 打印返回的内容
        # print result.read()
        self.deal_data(result.read().decode(&#39;gbk&#39;))
        self.calculate_date();
    # 将内容从页面代码中抠出来  
    def deal_data(self,myPage):  
        myItems = re.findall(&#39;<TR>.*?<p.*?<p.*?<p.*?<p.*?<p.*?>(.*?)</p>.*?<p.*?<p.*?>(.*?)</p>.*?</TR>&#39;,myPage,re.S)     #获取到学分
        for item in myItems:
            self.weights.append(item[0].encode(&#39;gbk&#39;))
            self.points.append(item[1].encode(&#39;gbk&#39;))
    #计算绩点,如果成绩还没出来,或者成绩是优秀良好,就不运算该成绩
    def calculate_date(self):
        point = 0.0
        weight = 0.0
        for i in range(len(self.points)):
            if(self.points[i].isdigit()):
                point += string.atof(self.points[i])*string.atof(self.weights[i])
                weight += string.atof(self.weights[i])
        print point/weight
#调用  
mySpider = SDU_Spider()  
mySpider.sdu_init()

Recommandations associées :

Comment utiliser le robot d'exploration Python pour obtenir ces précieux articles de blog

Exemple de partage de robot d'exploration dynamique python

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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
Le but principal de Python: flexibilité et facilité d'utilisationLe but principal de Python: flexibilité et facilité d'utilisationApr 17, 2025 am 12:14 AM

La flexibilité de Python se reflète dans les systèmes de prise en charge et de type dynamique multi-paradigmes, tandis que la facilité d'utilisation provient d'une syntaxe simple et d'une bibliothèque standard riche. 1. Flexibilité: prend en charge la programmation orientée objet, fonctionnelle et procédurale, et les systèmes de type dynamique améliorent l'efficacité de développement. 2. Facilité d'utilisation: La grammaire est proche du langage naturel, la bibliothèque standard couvre un large éventail de fonctions et simplifie le processus de développement.

Python: la puissance de la programmation polyvalentePython: la puissance de la programmation polyvalenteApr 17, 2025 am 12:09 AM

Python est très favorisé pour sa simplicité et son pouvoir, adaptés à tous les besoins des débutants aux développeurs avancés. Sa polyvalence se reflète dans: 1) Facile à apprendre et à utiliser, syntaxe simple; 2) Bibliothèques et cadres riches, tels que Numpy, Pandas, etc.; 3) Support multiplateforme, qui peut être exécuté sur une variété de systèmes d'exploitation; 4) Convient aux tâches de script et d'automatisation pour améliorer l'efficacité du travail.

Apprendre le python en 2 heures par jour: un guide pratiqueApprendre le python en 2 heures par jour: un guide pratiqueApr 17, 2025 am 12:05 AM

Oui, apprenez Python en deux heures par jour. 1. Élaborer un plan d'étude raisonnable, 2. Sélectionnez les bonnes ressources d'apprentissage, 3. Consolider les connaissances apprises par la pratique. Ces étapes peuvent vous aider à maîtriser Python en peu de temps.

Python vs C: avant et inconvénients pour les développeursPython vs C: avant et inconvénients pour les développeursApr 17, 2025 am 12:04 AM

Python convient au développement rapide et au traitement des données, tandis que C convient à des performances élevées et à un contrôle sous-jacent. 1) Python est facile à utiliser, avec syntaxe concise, et convient à la science des données et au développement Web. 2) C a des performances élevées et un contrôle précis, et est souvent utilisé dans les jeux et la programmation système.

Python: engagement du temps et rythme d'apprentissagePython: engagement du temps et rythme d'apprentissageApr 17, 2025 am 12:03 AM

Le temps nécessaire pour apprendre le python varie d'une personne à l'autre, principalement influencé par l'expérience de programmation précédente, la motivation d'apprentissage, les ressources et les méthodes d'apprentissage et le rythme d'apprentissage. Fixez des objectifs d'apprentissage réalistes et apprenez mieux à travers des projets pratiques.

Python: automatisation, script et gestion des tâchesPython: automatisation, script et gestion des tâchesApr 16, 2025 am 12:14 AM

Python excelle dans l'automatisation, les scripts et la gestion des tâches. 1) Automatisation: La sauvegarde du fichier est réalisée via des bibliothèques standard telles que le système d'exploitation et la fermeture. 2) Écriture de script: utilisez la bibliothèque PSUTIL pour surveiller les ressources système. 3) Gestion des tâches: utilisez la bibliothèque de planification pour planifier les tâches. La facilité d'utilisation de Python et la prise en charge de la bibliothèque riche en font l'outil préféré dans ces domaines.

Python et temps: tirer le meilleur parti de votre temps d'étudePython et temps: tirer le meilleur parti de votre temps d'étudeApr 14, 2025 am 12:02 AM

Pour maximiser l'efficacité de l'apprentissage de Python dans un temps limité, vous pouvez utiliser les modules DateTime, Time et Schedule de Python. 1. Le module DateTime est utilisé pour enregistrer et planifier le temps d'apprentissage. 2. Le module de temps aide à définir l'étude et le temps de repos. 3. Le module de planification organise automatiquement des tâches d'apprentissage hebdomadaires.

Python: jeux, GUIS, et plusPython: jeux, GUIS, et plusApr 13, 2025 am 12:14 AM

Python excelle dans les jeux et le développement de l'interface graphique. 1) Le développement de jeux utilise Pygame, fournissant des fonctions de dessin, audio et d'autres fonctions, qui conviennent à la création de jeux 2D. 2) Le développement de l'interface graphique peut choisir Tkinter ou Pyqt. Tkinter est simple et facile à utiliser, PYQT a des fonctions riches et convient au développement professionnel.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
1 Il y a quelques moisBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

SublimeText3 Linux nouvelle version

SublimeText3 Linux nouvelle version

Dernière version de SublimeText3 Linux

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

VSCode Windows 64 bits Télécharger

VSCode Windows 64 bits Télécharger

Un éditeur IDE gratuit et puissant lancé par Microsoft