Schnelles Web-Scraping mit Python (unterstützt das Laden von JavaScript)

Einführung

Es ist häufig der Fall, dass Sie ein bestimmtes Element von einer Webseite extrahieren und ein Durcheinander verursachen möchten. (Ich möchte alle 5 Minuten den Bestand und den Preis eines bestimmten Produkts auf einer bestimmten EC-Site anzeigen. Ich möchte den Text für die Klassifizierung von Dokumenten usw. genau extrahieren.) Eine solche Elementextraktion wird als Web-Scraping bezeichnet, und Python ist in solchen Fällen ebenfalls nützlich.

Übrigens gibt es Crawler / Scraping Adventskalender 2014, der perfekt für diesen Zweck geeignet ist, und die folgenden Artikel sind gut organisiert. (Ich habe seine Existenz vor einiger Zeit bemerkt) http://orangain.hatenablog.com/entry/scraping-in-python

Lass es uns zuerst versuchen

Wie am Ende des vorherigen Artikels erwähnt, sind `Anfragen``` und` lxml``` beim Scraping in Python im Allgemeinen ausreichend.

pip install requests
pip install lxml

Lassen Sie uns nun den Textteil von der folgenden Seite der Tele-Asa-Nachrichten extrahieren. http://news.tv-asahi.co.jp/news_politics/articles/000041338.html

Lassen Sie uns zunächst sehen, wie die Seite organisiert ist. In Chrome gibt es standardmäßig Entwicklertools (siehe unten) (Firebug in Firefox). Wenn Sie es starten, klicken Sie auf das Lupensymbol und bewegen Sie den Mauszeiger auf den Teil, den Sie extrahieren möchten. Sie können das Zielelement problemlos treffen Sie können sehen, was für eine Seitenstruktur ist.

Screen Shot 2014-12-24 at 23.00.00.png

<div class="maintext" id="news_body">Unter dem Tag<p>Sie können sehen, dass der gewünschte Satz weiter unter dem Tag liegt. Dieser Speicherort kann mithilfe des CSS-Selektors als `` `# news_body> p``` ausgedrückt werden, sodass der Scraping-Code, der diesen Teil des Textes schließlich extrahiert, wie folgt geschrieben werden kann:

vgl. Zusammenfassung der CSS-Selektoren http://weboook.blog22.fc2.com/blog-entry-268.html

import lxml.html
import requests

target_url = 'http://news.tv-asahi.co.jp/news_politics/articles/000041338.html'
target_html = requests.get(target_url).text
root = lxml.html.fromstring(target_html)
#text_content()Die Methode ruft den gesamten Text unter diesem Tag ab
root.cssselect('#news_body > p').text_content()

Wenn `ImportError: cssselect nicht installiert zu sein scheint. Wenn Sie wütend werden, können Sie ``pip install cssselect``` ausführen. Wie Sie sehen können, ist es sehr einfach.

Laden Sie JavaScript

Der nächste schwierige Teil ist der Teil, der in JavaScript gerendert wird. Wenn ich es mit den Entwicklertools wie zuvor betrachte, denke ich, dass es auf die gleiche Weise verwendet werden kann, aber tatsächlich ist dies das Ergebnis des Ladens und Renderns von JavaScript.

Screen Shot 2014-12-25 at 0.10.25.png

Das HTML vor dem Laden von JavaScript ist einfach so.

<!--ähnliche Neuigkeiten-->
<div id="relatedNews"></div>

Selbst wenn Sie versuchen, das durch Anfragen erhaltene HTML so zu analysieren, wie es ist, funktioniert es nicht. Hier kommen Selen und PhantomJS ins Spiel.

Pip installieren Selen und PhantomJS[hier in der Gegend](http://tips.hecomi.com/entry/20121229/1356785834)Bitte installieren Sie es unter Bezugnahme auf.


 Dann sieht die Version, die JavaScript lädt, so aus.
 Wenn Sie HTML über Selen & PhantomJS erhalten, ist der Rest des Prozesses der gleiche.

```py
import lxml.html
from selenium import webdriver

target_url = 'http://news.tv-asahi.co.jp/news_politics/articles/000041338.html'
driver = webdriver.PhantomJS()
driver.get(target_url)
root = lxml.html.fromstring(driver.page_source)
links = root.cssselect('#relatedNews a')
for link in links:
    print link.text

Ausführungsergebnis

Das 3. Abe-Kabinett wird in Kürze ins Leben gerufen. Nur der Verteidigungsminister wird ersetzt.
Shinzo Abe zum 97. Premierminister des Repräsentantenhauses ernannt
Einberufung eines Sonderparlaments heute: Das 3. Abe-Kabinett wurde nachts eingerichtet
Zur Errichtung des 3. Abe-Kabinetts lehnt Verteidigungsminister Eto die Wiederernennung ab
"Ein fruchtbares Jahr" Premierminister Abe blickt auf dieses Jahr zurück

Zusammenfassung

Wie oben erwähnt, konnte ich nicht nur normale HTML-Seiten, sondern auch Seiten mit JavaScript-Rendering schnell und einfach kratzen. Wenn Sie tatsächlich verschiedene Websites kratzen, haben Sie häufig Probleme mit Zeichencodeproblemen. Wenn Sie jedoch Web-Scraping durchführen können, können Sie verschiedene Aufgaben automatisieren, also in verschiedenen Situationen Es ist persönlich nützlich. Ich wünsche Ihnen ein schönes Weihnachts- und Web-Scraping-Leben.

Recommended Posts

Schnelles Web-Scraping mit Python (unterstützt das Laden von JavaScript)
Web Scraping mit Python + JupyterLab
Web Scraping Anfänger mit Python
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Scraping mit Python
WEB-Scraping mit Python (für persönliche Notizen)
Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Pferderennseite Web Scraping mit Python
[Python] Eine schnelle Webanwendung mit Bottle!
Erste Schritte mit Python Web Scraping Practice
Üben des Web-Scrapings mit Python und Selen
Einfaches Web-Scraping mit Python und Ruby
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Web Scraping mit Python (Wettervorhersage)
Web Scraping mit Python (Aktienkurs)
Scraping in Python (Vorbereitung)
Versuchen Sie es mit Python.
Scraping mit Python + PhantomJS
Schaben mit Selen [Python]
Scraping mit Python + PyQuery
Scraping von RSS mit Python
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Einfaches Scraping mit Python (JavaScript / Proxy / Cookie-kompatible Version)
Python-Anfänger bleiben beim ersten Web-Scraping stecken
Ich habe versucht, mit Python zu kratzen
Schaben mit Selen in Python
Schaben mit Selen + Python Teil 1
Festliches Scraping mit Python, Scrapy
Speichern Sie Bilder mit Web Scraping
Einfaches Web-Scraping mit Scrapy
Scraping mit Tor in Python
Web-API mit Python + Falcon
Web Scraping mit Selenium (Python)
Kratzwettervorhersage mit Python
Schaben mit Selen + Python Teil 2
Webanwendung mit Python + Flask ② ③
Ich habe versucht, mit Python zu kratzen
Optimieren Sie die Websuche mit Python
Webanwendung mit Python + Flask ④
Webcrawlen, Web-Scraping, Zeichenerfassung und Speichern von Bildern mit Python
Versuchen Sie es mit Python + Beautiful Soup
Scraping mit Node, Ruby und Python
Scraping mit Selen in Python (Basic)
Kratzen mit Python und schöner Suppe
Überwachen Sie Python-Webanwendungen mit Prometheus
Holen Sie sich Web-Screen-Capture mit Python
Der HTTP-Zugriff über einen Proxy in Python Web Scraping war bei Anfragen einfach
Lassen Sie uns mit Python Image Scraping durchführen
Holen Sie sich Qiita-Trends mit Python-Scraping
Web Scraping für Anfänger in Python (1)
Web Scraping für Anfänger in Python (4) -1
"Scraping & maschinelles Lernen mit Python" Lernnotiz