Heim >Backend-Entwicklung >Python-Tutorial >Tutorial zur Python-Crawler-Implementierung, konvertiert in ein PDF-E-Book
In diesem Artikel erfahren Sie, wie Sie mit dem Python-Crawler „Liao Python. Es gibt so viele Crawler-Tools, die von der Python-Community bereitgestellt werden, dass Sie mit verschiedenen Bibliotheken, die direkt verwendet werden können, in wenigen Minuten einen Crawler schreiben können Liao Xuefengs Python-Tutorial. Erstellen Sie ein PDF-E-Book, das jeder offline lesen kann.
Bevor wir mit dem Schreiben des Crawlers beginnen, analysieren wir zunächst die Seitenstruktur der Website 1. Die linke Seite der Webseite ist die Verzeichnisstruktur des Tutorials, jede URL entspricht einem Artikel auf der rechten Seite und Die obere rechte Seite ist der Titel des Artikels, in der Mitte steht der Textteil des Artikels im Mittelpunkt. Die Daten, die wir crawlen möchten, sind der Textteil aller Webseiten Kommentarbereich Der Kommentarbereich ist für uns nutzlos und kann daher ignoriert werden.
Tool-VorbereitungNachdem Sie die Grundstruktur der Website herausgefunden haben, können Sie mit der Vorbereitung der Toolkits beginnen, auf die der Crawler angewiesen ist An. Requests und BeautifulSoup sind zwei Hauptartefakte von Crawlern. Reuqests wird für Netzwerkanfragen verwendet und BeautifulSoup wird zum Betreiben von HTML-Daten verwendet. Mit diesen beiden Shuttles können wir schnell arbeiten. Wir brauchen keine Crawler-Frameworks wie Scrapy. Die Verwendung in kleinen Programmen ist wie das Töten eines Huhns mit einem Vorschlaghammer. Da Sie außerdem HTML-Dateien in PDF konvertieren, müssen Sie auch über entsprechende Bibliotheksunterstützung verfügen. wkhtmltopdf ist ein sehr gutes Tool, das HTML in PDF konvertieren kann und für mehrere Plattformen geeignet ist. Installieren Sie zuerst die folgenden Abhängigkeitspakete,
dann installieren Sie wkhtmltopdf
pip install requests pip install beautifulsoup pip install pdfkitinstallieren Sie wkhtmltopdf
Laden Sie für die Windows-Plattform die stabile Version direkt von der offiziellen Website von wkhtmltopdf herunter und installieren Sie sie. Fügen Sie nach Abschluss der Installation den Ausführungspfad des Programms zur Systemumgebungsvariablen $PATH hinzu. Andernfalls kann pdfkit wkhtmltopdf nicht finden und der Fehler „. „Keine ausführbare wkhtmltopdf-Datei gefunden“ wird angezeigt. Ubuntu und CentOS können direkt über die Befehlszeile installiert werden
$ sudo apt-get install wkhtmltopdf # ubuntu $ sudo yum intsall wkhtmltopdf # centosCrawler-Implementierung
Wenn alles fertig ist Sie können mit dem Codieren beginnen, aber Sie sollten Ihre Gedanken ordnen, bevor Sie Code schreiben. Der Zweck des Programms besteht darin, die allen URLs entsprechenden HTML-Textteile lokal zu speichern und diese Dateien dann mit pdfkit in eine PDF-Datei zu konvertieren. Teilen wir die Aufgabe auf. Speichern Sie zunächst den einer bestimmten URL entsprechenden HTML-Text lokal, suchen Sie dann alle URLs und führen Sie den gleichen Vorgang aus.
Verwenden Sie den Chrome-Browser, um das Tag im Hauptteil der Seite zu finden, und drücken Sie F12, um das p-Tag zu finden, das dem Hauptteil entspricht:
, wobei p der Hauptinhalt der Webseite ist. Nachdem Sie Anforderungen zum lokalen Laden der gesamten Seite verwendet haben, können Sie mit beautifulsoup das HTML-Dom-Element bedienen, um den Textinhalt zu extrahieren.05ff9a9e18a7aecf8acff32163179ec7
Der spezifische Implementierungscode lautet wie folgt: Verwenden Sie die Funktion „soup.find_all“, um das Text-Tag zu finden, und speichern Sie dann den Inhalt des Textteils in der Datei a.html.
def parse_url_to_html(url): response = requests.get(url) soup = BeautifulSoup(response.content, "html5lib") body = soup.find_all(class_="x-wiki-content")[0] html = str(body) with open("a.html", 'wb') as f: f.write(html)
Der zweite Schritt besteht darin, alle URLs auf der linken Seite der Seite zu analysieren. Verwenden Sie dieselbe Methode, um die linke Menübezeichnung zu finden
818516a2aea8c5412fd444e4ed52d34a
Die spezifische Code-Implementierungslogik: Da es zwei Klassenattribute von uk-nav und uk-nav-side gibt auf der Seite, und die eigentliche Verzeichnisliste ist die zweite. Alle URLs wurden abgerufen und im ersten Schritt wurde die Funktion zum Konvertieren von URLs in HTML geschrieben.
def get_url_list(): """ 获取所有URL目录列表 """ response = requests.get("http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000") soup = BeautifulSoup(response.content, "html5lib") menu_tag = soup.find_all(class_="uk-nav uk-nav-side")[1] urls = [] for li in menu_tag.find_all("li"): url = "http://www.liaoxuefeng.com" + li.a.get('href') urls.append(url) return urls
Der letzte Schritt besteht darin, das HTML in eine PDF-Datei zu konvertieren. Das Konvertieren in eine PDF-Datei ist sehr einfach, da pdfkit die gesamte Logik gekapselt hat. Sie müssen nur die Funktion pdfkit.from_file
def save_pdf(htmls): """ 把所有html文件转换成pdf文件 """ options = { 'page-size': 'Letter', 'encoding': "UTF-8", 'custom-header': [ ('Accept-Encoding', 'gzip') ] } pdfkit.from_file(htmls, file_name, options=options)
aufrufen, um sie auszuführen Mit der Funktion save_pdf wird die E-Book-PDF-Datei generiert, das Rendering:
ZusammenfassungDie gesamte Codemenge summiert sich Auf weniger als 50 Zeilen wird im oben angegebenen Code jedoch verzichtet, wenn Sie möchten, dass der Titel des Artikels erhalten wird Um das Bild normal im PDF anzuzeigen, müssen Sie den relativen Pfad in absolute Pfade ändern und gespeicherte temporäre HTML-Dateien müssen gelöscht werden
Weitere Tutorials zur Python-Crawler-Implementierung, die in PDF-E-Books konvertiert wurden, finden Sie auf der chinesischen PHP-Website!