Python ist heute eine der beliebtesten Programmiersprachen und wird in verschiedenen Bereichen wie Datenwissenschaft, künstliche Intelligenz, Netzwerksicherheit usw. häufig verwendet. Unter anderem schneidet Python im Bereich Webcrawler gut ab, und viele Unternehmen und Einzelpersonen verwenden Python zur Datenerfassung und -analyse. In diesem Artikel wird die Verwendung von Python zum Crawlen von Douban-Buchinformationen vorgestellt und den Lesern ein vorläufiges Verständnis der Implementierungsmethoden und -technologien von Python-Webcrawlern vermittelt.
Zunächst müssen wir für den Douban-Buchinformations-Crawler zwei wichtige Bibliotheken in Python verwenden: urllib und beautifulsoup4. Unter diesen wird die urllib-Bibliothek hauptsächlich für Netzwerkanfragen und das Lesen von Daten verwendet, während die beautifulsoup4-Bibliothek zum Parsen strukturierter Dokumente wie HTML und XML verwendet werden kann, um die erforderlichen Informationen zu extrahieren. Bevor wir diese Bibliotheken verwenden können, müssen wir sie zuerst installieren. Verwenden Sie den Befehl pip, um die Installation abzuschließen. Nachdem die Installation abgeschlossen ist, können wir mit unserem eigentlichen Kampf beginnen.
Wenn Sie Python zum Crawlen verwenden, müssen Sie zunächst das Crawling-Ziel klären. Unser Ziel für diesen Artikel ist es, grundlegende Informationen über Douban-Bücher zu crawlen, wie z. B. Buchtitel, Autor, Herausgeber, Veröffentlichungsdatum, Bewertungen usw. Darüber hinaus müssen wir auch mehrere Seiten mit Buchinformationen crawlen.
Nachdem wir das Crawling-Ziel bestimmt haben, müssen wir die HTML-Struktur von Douban Books weiter analysieren, um den Speicherort und die Eigenschaften der erforderlichen Informationen zu bestimmen. Wir können die Entwicklertools verwenden, die mit Browsern wie Chrome oder Firefox geliefert werden, um den Quellcode der Seite anzuzeigen. Durch Beobachtung der HTML-Struktur können wir die Tags und Attribute finden, die gecrawlt werden müssen, und dann Python-Code schreiben, um sie zu implementieren.
Als nächstes schreiben wir den Douban-Book-Crawler-Code in Python. Der Kern des Codes ist:
import urllib.request from bs4 import BeautifulSoup url = 'https://book.douban.com/top250' books = [] def get_html(url): headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'} req = urllib.request.Request(url, headers=headers) response = urllib.request.urlopen(req) html = response.read().decode('utf-8') return html def parse_html(html): soup = BeautifulSoup(html,'html.parser') book_list_soup = soup.find('div', attrs={'class': 'article'}) for book_soup in book_list_soup.find_all('table'): book_title_soup = book_soup.find('div', attrs={'class': 'pl2'}) book_title_link = book_title_soup.find('a') book_title = book_title_link.get('title') book_url = book_title_link.get('href') book_info_soup = book_soup.find('p', attrs={'class': 'pl'}) book_info = book_info_soup.string.strip() book_rating_num_soup = book_soup.find('span', attrs={'class': 'rating_nums'}) book_rating_num = book_rating_num_soup.string.strip() book_rating_people_num_span_soup = book_soup.find('span', attrs={'class': 'pl'}) book_rating_people_num = book_rating_people_num_span_soup.string.strip()[1:-4] book_author_and_publish_soup = book_soup.find('p',attrs={'class':'pl'}).next_sibling.string.strip() book_author_and_publish = book_author_and_publish_soup.split('/') book_author = book_author_and_publish[0] book_publish = book_author_and_publish[-3] book_year = book_author_and_publish[-2] books.append({ 'title': book_title, 'url': book_url, 'info': book_info, 'author':book_author, 'publish':book_publish, 'year':book_year, 'rating_num':book_rating_num, 'rating_people_num':book_rating_people_num }) def save_data(): with open('douban_top250.txt','w',encoding='utf-8') as f: for book in books: f.write('书名:{0} '.format(book['title'])) f.write('链接:{0} '.format(book['url'])) f.write('信息:{0} '.format(book['info'])) f.write('作者:{0} '.format(book['author'])) f.write('出版社:{0} '.format(book['publish'])) f.write('出版年份:{0} '.format(book['year'])) f.write('评分:{0} '.format(book['rating_num'])) f.write('评分人数:{0} '.format(book['rating_people_num'])) if __name__ == '__main__': for i in range(10): start = i*25 url = 'https://book.douban.com/top250?start={0}'.format(start) html = get_html(url) parse_html(html) save_data()
Codeanalyse:
Zuerst definieren wir eine Haupt-Website-URL und eine leere Liste mit Büchern (zum Speichern von Buchinformationen). Als nächstes schreiben wir die Funktion get_html, um eine Anfrage zu senden und die HTML-Seite abzurufen. In dieser Funktion setzen wir die Anforderungsheader, um zu simulieren, dass der Browser eine Anforderung sendet, um eine Blockierung durch die Website zu vermeiden. Wir verwenden die Request-Methode der urllib-Bibliothek, um den Anforderungsheader und die URL in ein Objekt zu kapseln, verwenden dann die urlopen-Methode der urllib-Bibliothek, um eine Netzwerkanforderung zu senden und die Seite abzurufen, und verwenden schließlich die Lese- und Dekodierungsmethoden, um die zu konvertieren Seiteninhalt in utf-8-Format.
Wir schreiben die Funktion parse_html, um HTML-Dokumente zu analysieren und die erforderlichen Informationen zu extrahieren. In dieser Funktion verwenden wir die Methoden find und find_all der Bibliothek beautifulsoup4, um Tags und Attribute zu finden, die den Anforderungen in der HTML-Seite entsprechen. Insbesondere haben wir durch Beobachtung der HTML-Struktur von Douban-Büchern das Tabellen-Tag jedes Buchs sowie den entsprechenden Buchtitel, Link, Informationen, Bewertungen und andere Informationen gefunden und den Code zum Extrahieren dieser Daten geschrieben. Unter anderem verwendeten wir die Strip- und Split-Methoden zur Verarbeitung der Zeichenfolge, um überschüssige Leerzeichen zu entfernen und die Zeichenfolge zu teilen.
Schließlich haben wir die Funktion save_data geschrieben, um die extrahierten Buchinformationen in einer lokalen Datei zu speichern. In dieser Funktion verwenden wir die in Python integrierte Funktion open, um eine Textdatei zu öffnen, den Dateiinhalt im Schreibmodus zu schreiben und mithilfe der Formatierungsmethode die relevanten Informationen jedes Buches in eine Zeichenfolge zu formatieren und in die Datei zu schreiben. Beachten Sie, dass wir nach dem Dateinamen „encoding='utf-8'“ hinzufügen müssen, um sicherzustellen, dass der Dateiinhalt nicht verstümmelt wird.
Im Hauptprogramm verwenden wir eine for-Schleife, um die ersten 250 Bücher auf Douban Books zu crawlen. Dazu müssen wir 25 Bücher pro Seite und insgesamt 10 Seiten crawlen. In jeder Schleife berechnen wir die erforderliche URL basierend auf der aktuellen Seitennummer und rufen die Funktion get_html auf, um die HTML-Seite abzurufen. Als nächstes übergeben wir die Seite an die Funktion parse_html, die die Seite analysiert und die erforderlichen Informationen extrahiert. Schließlich rufen wir die Funktion save_data auf, um alle Buchinformationen in einer lokalen Datei zu speichern.
Führen Sie den Code ausZusammenfassung
Durch die Einleitung dieses Artikels haben wir ein vorläufiges Verständnis der Implementierungsmethoden und -technologien von Python-Webcrawlern erlangt. Insbesondere haben wir die Bibliotheken urllib und beautifulsoup4 in Python verwendet, um ein Python-Programm zum Crawlen von Douban Books-Informationen basierend auf der HTML-Struktur der Douban Books-Website zu schreiben und die Datenerfassung und -speicherung erfolgreich zu implementieren. Darüber hinaus müssen wir in praktischen Anwendungen einige Vorsichtsmaßnahmen für Webcrawler verstehen, z. B. nicht zu häufig Anfragen an dieselbe Website senden, um eine Blockierung der IP-Adresse zu vermeiden.
Das obige ist der detaillierte Inhalt vonPraktischer Einsatz von Crawlern in Python: Douban Book Crawler. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!