Heim >Backend-Entwicklung >Python-Tutorial >Ausführliche Erläuterung der Methode zum Crawlen zur Encyclopedia of Embarrassing Things mithilfe der Crawler-Technologie von Python
Es war das erste Mal, dass ich mich mit der Crawler-Technologie beschäftigt habe. Ich habe auf Zhihu einen Witz darüber gelesen, wie man zur Enzyklopädie der peinlichen Dinge kriecht, also habe ich beschlossen, selbst einen zu machen.
Ziele erreichen: 1. Kriechen Sie zu den Witzen in der Enzyklopädie der peinlichen Dinge
2. Kriechen Sie einen Absatz nach dem anderen und kriechen Sie jedes Mal zur nächsten Seite, wenn Sie die Eingabetaste drücken
Technische Implementierung: Basierend auf der Implementierung von Python, unter Verwendung der Requests-Bibliothek, der Re-Bibliothek und der BeautifulSoup-Methode der bs4-Bibliothek zur Implementierung
Hauptinhalt: Zuerst müssen wir Klären Sie die Ideen für die Crawling-Implementierung. Lassen Sie uns den HauptteilFramework erstellen. Im ersten Schritt schreiben wir zunächst eine Methode zum Abrufen von Webseiten mithilfe der Requests-Bibliothek. Im zweiten Schritt verwenden wir die BeautifulSoup-Methode der bs4-Bibliothek, um die erhaltenen Webseiteninformationen zu analysieren und reguläre Ausdrücke zu verwenden um relevante Absatzinformationen abzugleichen. Der dritte Schritt besteht darin, die erhaltenen Informationen auszudrucken. Wir alle führen die oben genannten Methoden über eine Haupt--Funktion aus.
1. Importieren Sie zunächst die relevanten Bibliotheken
import requests from bs4 import BeautifulSoup import bs4 import re
Besorgen Sie sich zunächst die Webseiteninformationen
def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return ""
3 Analysieren Sie es
soup = BeautifulSoup(html,"html.parser")
Was wir brauchen, ist der Inhalt und der Herausgeber des Witzes. Durch die Betrachtung des Quellcodes auf der Webseite wissen wir, dass der Herausgeber des Witzes ist:
'p', attrs={'class': 'content'}中
Der Inhalt des Witzes ist unter
'p', attrs={'class': 'author clearfix'}中
Also verwenden wir die bs4-Bibliotheksmethode, um den spezifischen Inhalt dieser beiden Tags zu extrahieren
def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'})
und erhalten die Informationen dann über spezifische Reguläre Ausdrücke
for sp in a: patten = re.compile(r'<span>(.*?)</span>',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'<h2>(.*?)</h2>', re.S) d = re.findall(namePatten, str(mc)) li.append(d)
Was wir beachten müssen ist, dass die Methoden find_all und re findall eine Liste zurückgeben. Bei der Verwendung regulärer Ausdrücke extrahieren wir die Zeilenumbrüche in den Tags nur grob und entfernen sie nicht
Als nächstes müssen wir nur noch 2 hinzufügen. Kombinieren Sie einfach die Inhalte der Listen und geben Sie sie ausdef printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b)Dann erstelle ich eine Eingabekontrollfunktion, gebe Q ein, um einen Fehler zurückzugeben, beende, gebe Enter ein, um zurückzukehren korrigieren und die nächste Seite mit Absätzen laden
def input_enter(): input1 = input() if input1 == 'Q': return False else: return TrueWir realisieren die Eingabesteuerung durch die Hauptfunktion. Wenn die Steuerfunktion einen Fehler zurückgibt, wird die Ausgabe nicht ausgeführt Die Ausgabe wird fortgesetzt. Wir verwenden eine
for-Schleife, um die nächste Seite zu laden.
def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: breakHier müssen wir beachten, dass jede for-Schleife lis[] und li[] aktualisiert, sodass der Absatzinhalt der Webseite jedes Mal korrekt ausgegeben werden kann Hier ist Quellcode:
import requests from bs4 import BeautifulSoup import bs4 import re def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'}) for sp in a: patten = re.compile(r'(.*?)',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'Dies ist das erste Mal, dass ich es mache, und es gibt noch viele Bereiche, die optimiert werden können. Ich hoffe, Sie können es aufzeigen.(.*?)
', re.S) d = re.findall(namePatten, str(mc)) li.append(d) except: return "" return count def printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b) def input_enter(): input1 = input() if input1 == 'Q': return False else: return True def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: break main()
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Methode zum Crawlen zur Encyclopedia of Embarrassing Things mithilfe der Crawler-Technologie von Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!