Heim  >  Artikel  >  Backend-Entwicklung  >  Verstehen Sie den Python-Crawler in einem Artikel

Verstehen Sie den Python-Crawler in einem Artikel

WBOY
WBOYnach vorne
2023-01-25 06:30:013457Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Python, das hauptsächlich relevantes Wissen über Crawler vorstellt. Einfach ausgedrückt: Crawler sind ein Name für den Prozess der Verwendung von Programmen zum Abrufen von Daten im Internet. Ich hoffe, es hilft allen .

Verstehen Sie den Python-Crawler in einem Artikel

Was ist ein Crawler?

Ein Crawler ist einfach eine Bezeichnung für den Prozess, bei dem mithilfe eines Programms Daten im Internet abgerufen werden.

Das Prinzip des Crawlers

Wenn wir Daten im Internet abrufen möchten, müssen wir dem Crawler eine Website-Adresse (im Programm normalerweise URL genannt) geben. Der Crawler sendet eine HTTP-Anfrage an den Server der Zielwebseite , und der Server gibt die Daten an den Client (d. h. unseren Crawler) zurück. Der Crawler führt dann eine Reihe von Vorgängen aus, z. B. Datenanalyse und -speicherung.

Prozess

Crawler können uns Zeit sparen, wenn wir beispielsweise die 250 besten Douban-Filme erhalten möchten und wir keinen Crawler verwenden, müssen wir zuerst die URL der Douban-Filme im Browser und im Client eingeben (Browser) findet Douban durch Parsen und stellt dann eine Verbindung mit ihm her. Der Browser erstellt eine HTTP-Anfrage und sendet sie an den Douban Movie-Server Nehmen Sie die Top250-Liste aus der Datenbank, kapseln Sie sie in eine HTTP-Antwort und geben Sie dann das Antwortergebnis an den Browser zurück. Der Browser zeigt den Antwortinhalt an und wir sehen die Daten. Auch unser Crawler basiert auf diesem Verfahren, allerdings wird es in Codeform umgewandelt.

HTTP-Anfrage

HTTP-Anfrage besteht aus Anfragezeile, Anfrageheader, Leerzeile und Anfragetext.

Die Anforderungszeile besteht aus drei Teilen:

  1. Anforderungsmethode, gängige Anforderungsmethoden sind GET, POST, PUT, DELETE, HEAD
2. Der Ressourcenpfad, den der Client erhalten möchte
3. Wird verwendet von der Client Die Versionsnummer des HTTP-Protokolls
Der Anforderungsheader ist eine ergänzende Beschreibung der vom Client an den Server gesendeten Anforderung, beispielsweise die Identität des Besuchers, die weiter unten erläutert wird.

Der Anforderungstext besteht aus den vom Client an den Server übermittelten Daten, z. B. den Konto- und Kennwortinformationen, die der Benutzer beim Anmelden erhöhen muss. Der Anforderungsheader und der Anforderungstext sind durch Leerzeilen getrennt. Der Anfragetext ist nicht in allen Anfragen enthalten. Beispielsweise verfügt das allgemeine GET nicht über einen Anfragetext.

Das Bild oben zeigt die HTTP-POST-Anfrage, die an den Server gesendet wird, wenn sich der Browser bei Douban anmeldet. Der Benutzername und das Passwort werden im Anfragetext angegeben.

HTTP-Antwort

Das HTTP-Antwortformat ist dem Anforderungsformat sehr ähnlich und besteht außerdem aus Antwortzeilen, Antwortheadern, Leerzeilen und Antworttexten.

Die Antwortzeile enthält außerdem drei Teile, nämlich die HTTP-Versionsnummer des Servers, den Antwortstatuscode und die Statusbeschreibung.

Hier gibt es eine Tabelle mit Statuscodes, die der Bedeutung jedes Statuscodes entspricht

Der zweite Teil ist der Antwortheader. Der Antwortheader entspricht dem Anforderungsheader und ist zusätzlich Anweisungen vom Server für die Antwort, wie z. B. welches Format der Antwortinhalt hat, wie lang der Antwortinhalt ist, wann er an den Client zurückgegeben wird und sogar einige Cookie-Informationen werden im Antwortheader platziert.

Der dritte Teil ist der Antworttext, bei dem es sich um die eigentlichen Antwortdaten handelt. Diese Daten sind eigentlich der HTML-Quellcode der Webseite.

So schreibe ich Crawler-Code

Crawler können viele Sprachen wie Python, C++ usw. verwenden, aber ich denke, Python ist die einfachste,

Da Python über vorgefertigte Bibliotheken verfügt, die nahezu perfekt verpackt sind,

Obwohl C++ auch vorgefertigte Bibliotheken hat, sind ihre Crawler immer noch relativ Nischenbibliotheken. Die einzigen Bibliotheken, die sie haben, sind nicht einfach genug und der Code ist nicht sehr kompatibel mit verschiedenen Compilern oder sogar verschiedenen Versionen desselben Compilers , daher ist es nicht besonders gut zu gebrauchen. Deshalb stellen wir heute hauptsächlich den Python-Crawler vor.

Bibliothek für Installationsanfragen

cmd ausführen: PIP-Installationsanfragen, um Anfragen zu installieren.

Dann geben Sie

Importanforderungen auf IDLE oder einen Compiler (ich persönlich empfehle VS Code oder Pycharm) ein, um ihn auszuführen. Wenn kein Fehler gemeldet wird, ist die Installation erfolgreich.

Die Methode zum Installieren der meisten Bibliotheken ist: pip install xxx (Name der Bibliothek)

requests-Methode

requests.request() Erstellen Sie eine Anfrage und unterstützen Sie die grundlegenden Methoden jeder Methode
requests.get() Die Hauptmethode zum Abrufen von HTML-Webseiten, entsprechend HTTPs GET

requests.head()

Die Methode zum Abrufen der Header-Informationen der HTML-Webseite, entsprechend dem HEAD von HTTP

requests.post() Die Methode zum Senden eines POST Anfrage an die HTML-Webseite, entsprechend HTTP POST
requests.put() Senden Sie eine PUT-Anfrage an eine HTML-Webseite, entsprechend HTTPs PUT
requests.patch() Senden Sie eine teilweise Änderungsanforderung an eine HTML-Webseite, entsprechend HTTP PATCT
requests.delete() sendet eine Löschanforderung an eine HTML-Webseite, entsprechend HTTPs DELETE

Die am häufigsten verwendete Get-Methode

r = Anfragen .get(url)

enthält zwei wichtige Objekte:

Erstellen Sie ein Request-Objekt, um Ressourcen vom Server anzufordern; geben Sie ein Antwortobjekt zurück, das Serverressourcen enthält.

r.contentDie binäre Form des HTTP-Antwortinhaltsrequests.ConnectionError Netzwerkverbindungsfehlerausnahme, wie DNS-Abfragefehler, Verbindung abgelehnt usw.requests .HTTPErrorHTTP-Fehlerausnahme
r.status_code Der Rückgabestatus der HTTP-Anfrage. 200 bedeutet, dass die Verbindung erfolgreich ist, 404 bedeutet Fehler.
r.text Die Zeichenfolgenform des HTTP-Antwortinhalts, dh der Seiteninhalt, der der URL entspricht Kodierungsmethode, die aus dem HTTP-Header erraten wird (wenn der Zeichensatz nicht im Header vorhanden ist, dann erwägen Sie die Kodierung nach ISO-8859-1)
requests.URLRequired URL fehlt Ausnahmerequests.TooManyRedirectsDie maximale Anzahl von Weiterleitungen wurde überschritten, was zu einer Weiterleitungsausnahme führte requests.ConnectTimeout Timeout Ausnahme beim Herstellen einer Verbindung zum Remote-Serverrequests.Timeout Die Anforderungs-URL ist abgelaufen, was zu einer Timeout-Ausnahme geführt hat Ich werde zunächst die Projektstruktur eines kleinen Crawler-Projekts bereitstellen, das ich erstellt habe. Der vollständige Quellcode kann durch privates Chatten mit mir heruntergeladen werden. Das Folgende ist der Quellcode des Übersetzungsteils
import requests
def English_Chinese():
	url = "https://fanyi.baidu.com/sug"
	s = input("请输入要翻译的词(中/英):")
	dat = {
		"kw":s
		}
	resp = requests.post(url,data = dat)# 发送post请求
	ch = resp.json() # 将服务器返回的内容直接处理成json => dict
	resp.close()
	dic_lenth = len(ch['data'])
	for i in range(dic_lenth):
		print("词:"+ch['data'][i]['k']+" "+"单词意思:"+ch['data'][i]['v'])
Detaillierte Codeerklärung:
Crawler kleine Demo requests ist die einfachste Crawler-Bibliothek, aber wir können eine erstellen einfache Übersetzung

Importieren Sie das Anforderungsmodul und legen Sie die URL auf die URL der Baidu-Übersetzungswebseite fest.

Senden Sie dann die Anfrage über die Post-Methode und geben Sie dann das zurückgegebene Ergebnis in ein Dic (Wörterbuch) ein. Dieses Mal haben wir es jedoch ausgedruckt und festgestellt, dass es so ist.

So sieht ein Wörterbuch in einer Liste in einem Wörterbuch aus, wahrscheinlich so

{ xx:xx , xx:

[

{xx:xx} , {xx:xx} , {xx: xx } , {xx:xx}

]

}

Die Stelle, die ich rot markiert habe, sind die Informationen, die wir benötigen.

Angenommen, es gibt n Wörterbücher in der blau markierten Liste. Wir können den Wert von n über die Funktion len() ermitteln,

und die for-Schleife zum Durchlaufen verwenden, um das Ergebnis zu erhalten.

dic_lenth = len(ch['data']
for i in range(dic_lenth):
    print("词:"+ch['data'][i]['k']+" "+"单词意思:"+ch['data'][i]['v'])
EndlichOkay, das war's für das heutige Teilen, tschüss~Hey? Eines habe ich vergessen. Lassen Sie mich Ihnen einen weiteren Code zum Crawlen des Wetters geben!
# -*- coding:utf-8 -*-
import requests
import bs4


def get_web(url):
    header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36 Edg/91.0.864.59"}
    res = requests.get(url, headers=header, timeout=5)
    # print(res.encoding)
    content = res.text.encode('ISO-8859-1')
    return content


def parse_content(content):
    soup = bs4.BeautifulSoup(content, 'lxml')

    '''
    存放天气情况
    '''
    list_weather = []
    weather_list = soup.find_all('p', class_='wea')
    for i in weather_list:
        list_weather.append(i.text)

    '''
    存放日期
    '''
    list_day = []
    i = 0
    day_list = soup.find_all('h1')
    for each in day_list:
        if i <= 6:
            list_day.append(each.text.strip())
            i += 1
    # print(list_day)

    &#39;&#39;&#39;
    存放温度:最高温度和最低温度
    &#39;&#39;&#39;
    tem_list = soup.find_all(&#39;p&#39;, class_=&#39;tem&#39;)
    i = 0
    list_tem = []
    for each in tem_list:
        if i == 0:
            list_tem.append(each.i.text)
            i += 1
        elif i > 0:
            list_tem.append([each.span.text, each.i.text])
            i += 1
    # print(list_tem)

    '''
    存放风力
    '''
    list_wind = []
    wind_list = soup.find_all('p', class_='win')
    for each in wind_list:
        list_wind.append(each.i.text.strip())
    # print(list_wind)
    return list_day, list_weather, list_tem, list_wind


def get_content(url):
    content = get_web(url)
    day, weather, tem, wind = parse_content(content)
    item = 0
    for i in range(0, 7):
        if item == 0:
            print(day[i]+':\t')
            print(weather[i]+'\t')
            print("今日气温:"+tem[i]+'\t')
            print("风力:"+wind[i]+'\t')
            print('\n')
            item += 1
        elif item > 0:
            print(day[i]+':\t')
            print(weather[i] + '\t')
            print("最高气温:"+tem[i][0]+'\t')
            print("最低气温:"+tem[i][1] + '\t')
            print("风力:"+wind[i]+'\t')
            print('\n')

【Verwandte Empfehlungen:

Python3-Video-Tutorial

Das obige ist der detaillierte Inhalt vonVerstehen Sie den Python-Crawler in einem Artikel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen