Von Junior'a nach Middle'a: Parser

Hallo Khabrovchans! Lange Zeit bestand der Wunsch, einen Artikel zu schreiben, traute sich aber nicht.
Meine Postserie beschreibt meinen Weg von Junior zu Middle und dann vielleicht sogar zu Senior. Wir werden in Python programmieren.

PS-Dokumentation für einige wenig bekannte Bibliotheken wird am Ende angehängt.

Kurz zu meiner Person: Python begann vor zwei Jahren zu studieren, es gab keine besonderen Fortschritte.
Die Grundlagen selbst wurden enttäuscht, da ich sie anderthalb Jahre lang unterrichtete. Jetzt lerne ich die Sprache gründlich, verstehe ihre Struktur und wie alles passiert. In den folgenden Artikeln werde ich den Code hochladen, alle neuen und neuen Bibliotheken verwenden und wie Sie wissen, hat Python eine Menge :)

Wo soll ich anfangen? Vor ein paar Monaten habe ich meinen ersten Parser geschrieben. Es stellte sich heraus, dass das Schreiben von Parsern recht einfach ist und Sie sogar Geld damit verdienen können. Bisher zeige ich Ihnen einige Beispiele, die den Stack von bs4 + -Anfragen verwenden . Wir werden unseren geliebten Habr analysieren.

#      from bs4 import BeautifulSoup as bs import requests from fake_useragent import UserAgent 

Ich bin nicht sicher, ob jeder mit der Bibliothek fake_useragent vertraut ist. Es ist sehr praktisch zum Parsen, es erzeugt eine Benutzeragenten-Fälschung.

 ua = UserAgent() headers = {'accept': '*/*', 'user-agent': ua.firefox} 

Dies ist der nächste kleine Block unseres Codes. In der ersten Zeile haben wir die Variable ua erstellt, die die Methoden der UserAgent-Klasse verwendet. In der zweiten Zeile haben wir ein Wörterbuch erstellt, das uns in Zukunft beim Parsen helfen wird.

Erstellen Sie nun die Funktion selbst zum Parsen.

 def without_post(url, headers): response = requests.get(url, headers=headers) if response.status_code == 200: soup = bs(response.text, 'html.parser') links = {} for i in soup.find_all('a', {'class': 'post__title_link'}): links.update({i.text: i.get('href')}) return links else: print("Connection Error") 

Diese Funktion analysiert den Link, der das Vorhandensein eines Tags mit der Klasse "post__title_link" anzeigt.

Der einfachste Weg, Daten zu speichern, besteht darin, sie in einer Datei zu speichern. Also lass es uns tun.

 url = "https://habr.com/ru/all/" links = without_post(url, headers) with open('parsed.txt', 'w') as f_obj: for name, href in links.items(): f_obj.write(name + ':\n' + href + '\n\n') 

Am Ende erhalten wir eine Datei, die die Namen und Links der Beiträge enthält, die wir von der ersten Seite gesammelt haben.

Quellcode (vollständig), nur ohne Kommentar:

 from bs4 import BeautifulSoup as bs from fake_useragent import UserAgent import requests ua = UserAgent() headers = {'accept': '*/*', 'user-agent': ua.firefox} def without_post(url, headers): response = requests.get(url, headers=headers) if response.status_code == 200: soup = bs(response.text, 'html.parser') links = {} for i in soup.find_all('a', {'class': 'post__title_link'}): links.update({i.text: i.get('href')}) return links else: print("Connection Error") url = "https://habr.com/ru/all/" links = without_post(url, headers) with open('parsed.txt', 'w') as f_obj: for name, href in links.items(): f_obj.write(name + ':\n' + href + '\n\n') 

Gutes Ergebnis! Abgesehen von Zeilenumbrüchen und Kommentaren trafen wir genau 20 Zeilen. Für den Anfang ziemlich gut :)

Wie versprochen, Links zur Dokumentation der verwendeten Bibliotheken:

Anfragen: * squeeze *
bs4: * squeeze *
fake_useragent: * squeeze *

Vielen Dank für Ihre Aufmerksamkeit! Bis bald

PS Wenn es Rückmeldungen gibt, lässt der folgende Artikel nicht lange auf sich warten

Source: https://habr.com/ru/post/de482340/


All Articles