


Vollständige Aufzeichnung des Schreibens von Python-Crawlern von Scratch_Python
Die ersten neun Artikel wurden von den Grundlagen bis zum Schreiben ausführlich vorgestellt. Im zehnten Artikel geht es darum, Schritt für Schritt ein Crawler-Programm zu schreiben. Bitte lesen Sie ihn sorgfältig 🎜>
Lassen Sie uns zunächst über die Website unserer Schule sprechen:http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.htmlErgebnisse überprüfen Sie müssen sich anmelden in, und dann werden die Ergebnisse jedes Fachs angezeigt, aber nur die Ergebnisse werden ohne die Notenpunkte angezeigt, die der gewichteten Durchschnittspunktzahl entsprechen.1. Der Vorabend der entscheidenden Schlacht
Lassen Sie uns zuerst ein Tool vorbereiten: das HttpFox-Plug-in. Dies ist ein HTTP-Protokollanalyse-Plug-in, das die Zeit und den Inhalt von Seitenanfragen und -antworten sowie das vom Browser verwendete COOKIE analysiert.2. Gehen Sie tief hinter die feindlichen Linien
3. Hu Ding Jie Niu
Auf den ersten Blick haben wir drei Daten, zwei sind GET und eine ist POST, aber was genau sind sie? Wir wissen es immer noch nicht. Wir müssen uns also die erfassten Inhalte einzeln ansehen. Sehen Sie sich zuerst die POST-Informationen an:4. Ruhig antworten
Offensichtlich wird es mithilfe eines HTML-Frameworks implementiert, das heißt, die Adresse, die wir in der Adressleiste sehen, ist nicht die Adresse zum Absenden des Formulars auf der rechten Seite.
Wie bekomme ich also die echte Adresse? -Klicken Sie mit der rechten Maustaste, um den Quellcode der Seite anzuzeigen:
Ja, das stimmt, die Seite mit dem Namen „w_right“ ist die Anmeldeseite, die wir wollen.
Die ursprüngliche Adresse der Website lautet:
http://jwxt.sdu.edu.cn:7777/zhxt_bks/zhxt_bks.html
Also die wahre Form Einreichung Die Adresse sollte lauten:
http://jwxt.sdu.edu.cn:7777/zhxt_bks/xk_login.html
Nach der Eingabe stellt sich heraus, dass es wie erwartet ist:
Verdammt, es ist das Kursauswahlsystem der Tsinghua-Universität. . . Ich vermute, dass unsere Schule zu faul war, eine Seite zu erstellen, also haben wir sie uns einfach ausgeliehen. . Infolgedessen wurde der Titel nicht einmal geändert. . .
Aber diese Seite ist immer noch nicht die Seite, die wir brauchen, denn die Seite, an die unsere POST-Daten übermittelt werden, sollte die Seite sein, die in der AKTION des Formulars übermittelt wird.
Mit anderen Worten, wir müssen den Quellcode überprüfen, um zu wissen, wohin die POST-Daten gesendet werden:
Nun, optisch ist das das POST-Übermittlung Die Adresse der Daten.
Ordnen Sie es in der Adressleiste ein. Die vollständige Adresse sollte wie folgt lauten:
http://jwxt.sdu.edu.cn:7777/pls/wwwbks/bks_login2.login
(Der Weg, es zu erhalten, ist sehr einfach. Klicken Sie direkt im Firefox-Browser auf den Link, um die Adresse des Links anzuzeigen.)
5. Probieren Sie es aus im Kleinen
Die nächste Aufgabe besteht darin, mit Python das Senden von POST-Daten zu simulieren und den zurückgegebenen Cookie-Wert abzurufen.
Für die Funktionsweise von Cookies können Sie diesen Blogbeitrag lesen:
http://www.jb51.net/article/57144.htm
Wir bereiten zunächst eine vor POST-Daten, bereiten Sie ein Cookie für den Empfang vor und schreiben Sie dann den Quellcode wie folgt:
# -*- 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()
Sehen Sie sich anschließend die Auswirkung des Vorgangs an:
ok, auf diese Weise haben wir die Anmeldung erfolgreich simuliert.
6. Eine Sache durch eine andere ersetzen
Die nächste Aufgabe besteht darin, einen Crawler zu verwenden, um die Ergebnisse der Schüler zu ermitteln.
Schauen wir uns noch einmal die Quellwebsite an.
Nachdem Sie HTTPFOX aktiviert haben, klicken Sie, um die Ergebnisse anzuzeigen und festzustellen, dass die folgenden Daten erfasst wurden:
Klicken Sie auf die ersten GET-Daten um den Inhalt anzuzeigen. Es wird festgestellt, dass der Inhalt der Inhalt der erhaltenen Punktzahl ist.
Für den erhaltenen Seitenlink klicken Sie mit der rechten Maustaste, um das Element aus dem Quellcode der Seite anzuzeigen. Sie können die Seite sehen, die nach dem Klicken auf den Link springt (in Firefox müssen Sie nur mit der rechten Maustaste klicken und „ Diesen Frame anzeigen". ):
Sie können den Link zum Anzeigen der Ergebnisse wie folgt erhalten:
http://jwxt .sdu.edu.cn: 7777/pls/wwwbks/bkscjcx.curscopre
7. Alles ist bereit
Jetzt ist alles bereit, also bewerben Sie sich einfach Klicken Sie auf den Link zum Crawler und prüfen Sie, ob Sie die Ergebnisseite anzeigen können.
Wie Sie bei httpfox sehen können, müssen wir ein Cookie senden, um die Punkteinformationen zurückzugeben. Daher verwenden wir Python, um das Senden eines Cookies zum Anfordern der Punkteinformationen zu simulieren:
# -*- 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()
Drücken Sie F5, um die erfassten Daten auszuführen und anzusehen:
Da es auf diese Weise kein Problem gibt, verwenden Sie reguläre Ausdrücke, um die Daten leicht zu konvertieren Verarbeiten Sie es und nehmen Sie die Credits und die entsprechenden Punkte heraus.
8. So viel HTML-Quellcode ist für unsere Verarbeitung offensichtlich nicht förderlich Extrahieren Sie die erforderlichen Daten.
Tutorials zu regulären Ausdrücken finden Sie in diesem Blog-Beitrag:
http://www.jb51.net/article/57150.htm
Lass uns einen nehmen Schauen Sie sich die Ergebnisse an. Der Quellcode:
In diesem Fall ist die Verwendung regulärer Ausdrücke einfach.
Wir werden den Code ein wenig aufräumen und dann reguläre Ausdrücke verwenden, um die Daten zu extrahieren:
# -*- 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('<TR>.*?<p.*?<p.*?<p.*?<p.*?<p.*?>(.*?)</p>.*?<p.*?<p.*?>(.*?)</p>.*?</TR>',myPage,re.S) #获取到学分 for item in myItems: self.weights.append(item[0].encode('gbk')) self.points.append(item[1].encode('gbk')) # 将内容从页面代码中抠出来 def print_data(self,items): for item in items: print item #调用 mySpider = SDU_Spider() mySpider.sdu_init()
Der vollständige Code lautet wie folgt.
# -*- 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 = '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.calculate_date(); # 将内容从页面代码中抠出来 def deal_data(self,myPage): myItems = re.findall('<TR>.*?<p.*?<p.*?<p.*?<p.*?<p.*?>(.*?)</p>.*?<p.*?<p.*?>(.*?)</p>.*?</TR>',myPage,re.S) #获取到学分 for item in myItems: self.weights.append(item[0].encode('gbk')) self.points.append(item[1].encode('gbk')) #计算绩点,如果成绩还没出来,或者成绩是优秀良好,就不运算该成绩 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()
So verwenden Sie den Python-Crawler, um diese wertvollen Blogbeiträge zu erhalten
Beispiel für das Teilen von Dynamischer Python-Crawler
Das obige ist der detaillierte Inhalt vonVollständige Aufzeichnung des Schreibens von Python-Crawlern von Scratch_Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

Die Readdir -Funktion im Debian -System ist ein Systemaufruf, der zum Lesen des Verzeichnisgehalts verwendet wird und häufig in der C -Programmierung verwendet wird. In diesem Artikel wird erläutert, wie Readdir in andere Tools integriert wird, um seine Funktionalität zu verbessern. Methode 1: Kombinieren Sie C -Sprachprogramm und Pipeline zuerst ein C -Programm, um die Funktion der Readdir aufzurufen und das Ergebnis auszugeben:#include#include#includeIntmain (intargc, char*argv []) {Dir*Dir; structDirent*Eintrag; if (argc! = 2) {{

Um die Effizienz des Lernens von Python in einer begrenzten Zeit zu maximieren, können Sie Pythons DateTime-, Zeit- und Zeitplanmodule verwenden. 1. Das DateTime -Modul wird verwendet, um die Lernzeit aufzuzeichnen und zu planen. 2. Das Zeitmodul hilft, die Studie zu setzen und Zeit zu ruhen. 3. Das Zeitplanmodul arrangiert automatisch wöchentliche Lernaufgaben.

In diesem Artikel werden Sie begleitet, wie Sie Ihr NginXSSL -Zertifikat auf Ihrem Debian -System aktualisieren. Schritt 1: Installieren Sie zuerst CertBot und stellen Sie sicher, dass Ihr System Certbot- und Python3-CertBot-Nginx-Pakete installiert hat. If not installed, please execute the following command: sudoapt-getupdatesudoapt-getinstallcertbotpython3-certbot-nginx Step 2: Obtain and configure the certificate Use the certbot command to obtain the Let'sEncrypt certificate and configure Nginx: sudocertbot--nginx Follow the prompts to select

Das Konfigurieren eines HTTPS -Servers auf einem Debian -System umfasst mehrere Schritte, einschließlich der Installation der erforderlichen Software, der Generierung eines SSL -Zertifikats und der Konfiguration eines Webservers (z. B. Apache oder NGINX) für die Verwendung eines SSL -Zertifikats. Hier ist eine grundlegende Anleitung unter der Annahme, dass Sie einen Apacheweb -Server verwenden. 1. Installieren Sie zuerst die erforderliche Software, stellen Sie sicher, dass Ihr System auf dem neuesten Stand ist, und installieren Sie Apache und OpenSSL: sudoaptupdatesudoaptupgradesudoaptinsta

Die Entwicklung eines Gitlab -Plugins für Debian erfordert einige spezifische Schritte und Kenntnisse. Hier ist ein grundlegender Leitfaden, mit dem Sie mit diesem Prozess beginnen können. Wenn Sie zuerst GitLab installieren, müssen Sie GitLab in Ihrem Debian -System installieren. Sie können sich auf das offizielle Installationshandbuch von GitLab beziehen. Holen Sie sich API Access Token, bevor Sie die API -Integration durchführen. Öffnen Sie das GitLab -Dashboard, finden Sie die Option "AccessTokens" in den Benutzereinstellungen und generieren Sie ein neues Zugriffs -Token. Wird generiert

Apache ist der Held hinter dem Internet. Es ist nicht nur ein Webserver, sondern auch eine leistungsstarke Plattform, die enormen Datenverkehr unterstützt und dynamische Inhalte bietet. Es bietet eine extrem hohe Flexibilität durch ein modulares Design und ermöglicht die Ausdehnung verschiedener Funktionen nach Bedarf. Modularität stellt jedoch auch Konfigurations- und Leistungsherausforderungen vor, die ein sorgfältiges Management erfordern. Apache eignet sich für Serverszenarien, die hoch anpassbare und entsprechende komplexe Anforderungen erfordern.
