Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Methode zum Crawlen zur Encyclopedia of Embarrassing Things mithilfe der Crawler-Technologie von Python

Ausführliche Erläuterung der Methode zum Crawlen zur Encyclopedia of Embarrassing Things mithilfe der Crawler-Technologie von Python

高洛峰
高洛峰Original
2017-03-20 09:25:321188Durchsuche

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 aus

def 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 True
Wir 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:
            break
Hier 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'

(.*?)

', 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()
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.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn