[PYTHON] Festpunktbeobachtung bestimmter Daten im Web durch automatische Ausführung eines Webbrowsers auf dem Server (Ubuntu16.04) (2) -Web Scraping-

Hintergrund

Es gab Daten im WEB, deren Werte sich in Echtzeit änderten. Ich habe beschlossen, ein Programm zu erstellen, um den Wert regelmäßig zu überprüfen, aber es war mühsam, den Scraping-Code zu schreiben, da ich mich auf der Seite anmelden musste. Als Gegenmaßnahme entschied ich mich, Selen zu verwenden, um einen Webbrowser zu betreiben und zu kratzen. Ich werde den Prozess als Memorandum zusammenfassen.

Darüber hinaus war es in Ordnung, den vorhandenen PC zu verwenden und den Webbrowser automatisch durch Stapelverarbeitung auszuführen. Es war jedoch ein Hindernis, den Webbrowser auf meinem eigenen PC zu starten, den ich normalerweise verwende. Lassen Sie es uns ohne Erlaubnis auf dem Mietserver (Ubuntu16.04) ausführen.

Genauer gesagt wird es das folgende Bild sein. (1) Starten Sie einen Webbrowser über Python → Erklärt in Teil1 (2) Betreiben Sie einen Webbrowser mit Selen, um WEB-Daten zu verarbeiten → Teil2 (dieser Beitrag) (3) Speichern Sie die verarbeiteten Daten in mongoDB → Erklärt in Teil3 (4) Führen Sie das py-Programm, das (1) bis (3) ausführt, automatisch mit cron aus → Erklärt in Teil3 (5) Bei einer bestimmten Wertschwankung per E-Mail benachrichtigen → Bonus

Letztes Mal schrieb bis zum Starten eines Webbrowsers (PhantomJS) von Python unter Ubuntu. Dieses Mal möchte ich die Informationen erhalten, die Sie wirklich kratzen sollen.

Schritt 1) Melden Sie sich automatisch mit Selen auf der angemeldeten Webseite an

Wie ich im vorherigen "Zweck" geschrieben habe, besteht mein ursprünglicher Zweck darin, die Daten nach der Anmeldung regelmäßig zu erfassen und in der Datenbank auf der Webseite zu speichern, auf der sich die Anmeldung befindet. Die Seite, die tatsächlich automatisch Daten erfasst, kann hier nicht geschrieben werden. Daher wird das Python-Programm, das sich automatisch bei Qiita anmeldet, unten als Beispiel gezeigt.

Automatische Anmeldung bei Qiita mit PhantomJS


import time
from selenium import webdriver

URL = "https://qiita.com/"
USERID = "<YOUR_USER_ID>"
PASS = "<YOUR_PASSWORD>"

#Automatischer Start von PhantomJS und Zugriff auf Qiita
browser = webdriver.PhantomJS(executable_path='<path/to/phantomjs>')
browser.get(URL)
time.sleep(3)

#Loginseite
browser.find_element_by_id("identity").send_keys(USERID)
browser.find_element_by_id("password").send_keys(PASS)
browser.find_element_by_xpath('//input[@name="commit"]').click()
time.sleep(5)

print(browser.title)

browser.close()
display.stop()

Nach dem Ausführen des obigen Vorgangs wird "Home - Qiita" ausgegeben. Sie können sehen, dass Sie nach dem Anmelden auf den oberen Bildschirm Ihres Kontos zugreifen können.

Schritt 2) Installieren Sie BeautifulSoup4

Da es eine große Sache ist, werde ich die Seite, auf die PhantomJS zugreift, kratzen. Es gibt verschiedene Möglichkeiten, mit Python zu kratzen, diesmal jedoch mit BeautifulSoup4. Die Installation selbst ist einfach,

pip3 install bs4

Ist in Ordnung.

Schritt 3) Scraping des Bildschirms nach dem Anmelden

Lassen Sie uns den oberen Bildschirm abkratzen, nachdem Sie sich bei Qiita angemeldet haben.

Nach dem Anmelden bei Qiita wird die Liste der neuesten Beiträge auf der Registerkarte "Feed" im oberen Bildschirm angezeigt. Es werden bis zu 20 Titel angezeigt. Erstellen Sie jedoch ein Programm, das diese 20 Titel automatisch erfasst. (Es gibt nicht viel praktische Bedeutung, nur ein Beispiel.)

▼ Erhalten Sie insbesondere den Beitragsnamen im Feed auf dem Bildschirm unten.

スクリーンショット 2016-08-31 22.43.58.png

▼ Der Programmcode lautet wie folgt.

import time
from selenium import webdriver
from bs4 import BeautifulSoup

URL = "https://qiita.com/"
USERID = "<YOUR_USER_ID>"
PASS = "<YOUR_PASSWORD>"

#Automatischer Start von PhantomJS und Zugriff auf Qiita
browser = webdriver.PhantomJS(executable_path='<path/to/phantomjs>')
browser.get(URL)
time.sleep(3)

#Loginseite
browser.find_element_by_id("identity").send_keys(USERID)
browser.find_element_by_id("password").send_keys(PASS)
browser.find_element_by_xpath('//input[@name="commit"]').click()
time.sleep(5)

#Holen Sie sich eine Liste der Beiträge auf dem Startbildschirm
html = browser.page_source.encode('utf-8')
soup = BeautifulSoup(html, "lxml")
posts_source = soup.select(".item-box-title > h1 > a")

#Ausgabe des Postnamens
i = 1
for post in posts_source:
 print(str(i) + ":" + post.text.strip())
 i += 1

browser.close()
display.stop()

▼ Es ist in Ordnung, wenn das Ausführungsergebnis des Programms wie folgt angezeigt wird.

1:babel-Sprechen Sie über das Veröffentlichen im npm-Repository mit babe to light mit nur cli
2:Verwenden von UX302NC mit Raspberry Pi
3:N in Rails und MySQL-Implementieren Sie die Volltextsuche mit FULL TEXT INDEX unter Verwendung von Grammdaten
4:Ich habe ein Modul erstellt, um Barrierefreiheitsfunktionen mit Atom zu ermöglichen
5:Verwenden Sie Emoji nicht auf dem Spickzettel auf GitHub
....

Wie Sie dem obigen Programmcode entnehmen können, ist beim Betreiben des Browsers über Selen die Quelle der aktuell geöffneten Seite

browser.page_source

Ich habe es bekommen. Falls erforderlich, codieren Sie es mit der im Beispiel gezeigten Codierungsmethode.

Der erhaltene HTML-Code wird in ein BeautifulSoup-Objekt geändert, sodass der Wert des angegebenen Tags abgerufen wird. In der Probe

posts_source = soup.select(".item-box-title > h1 > a")

Wir rufen also das untergeordnete Element a des h1-Tags des untergeordneten Elements von div.item-box-title ab. Weitere Informationen zum Abkratzen von Beautiful Soup finden Sie auf den folgenden beiden Websites.

Ich habe ein Beispiel für ein Programm genommen, das automatisch Informationen vom Qiita-Startbildschirm abruft, aber Sie können sehen, dass dieser Code eine breite Palette von Anwendungen hat, indem Sie einfach den obigen Code ausführen.

Bisher haben wir den Browser sogar automatisch ausgeführt, um bestimmte Daten abzurufen. Alles was Sie tun müssen, ist das Programm regelmäßig mit CRON usw. auszuführen. Details weiter bis Nächstes Mal.

Recommended Posts

Festpunktbeobachtung bestimmter Daten im Web durch automatische Ausführung eines Webbrowsers auf dem Server (Ubuntu16.04) (2) -Web Scraping-
Festkomma-Beobachtung bestimmter Daten im Web durch automatische Ausführung des Webbrowsers auf dem Server (Ubuntu16.04) (1) -Webbrowser-Installation-
Sammeln Sie nur Gesichtsbilder einer bestimmten Person mit Web Scraping
Speichern Sie die vom Browser erfassten Sprachdaten im WAV-Format auf dem Server
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
Festpunktbeobachtung bestimmter Daten im Web durch automatische Ausführung eines Webbrowsers auf dem Server (Ubuntu16.04) (2) -Web Scraping-
Festkomma-Beobachtung bestimmter Daten im Web durch automatische Ausführung des Webbrowsers auf dem Server (Ubuntu16.04) (1) -Webbrowser-Installation-
Speichern Sie die vom Browser erfassten Sprachdaten im WAV-Format auf dem Server
Ich habe versucht, die Daten des Laptops durch Booten unter Ubuntu zu retten
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
[Einführung in AWS] Memorandum zum Erstellen eines Webservers auf AWS
Gibt das Ergebnis der morphologischen Analyse mit Mecab an einen WEB-Browser aus, der mit Sakura Server / UTF-8 kompatibel ist
Sammeln Sie nur Gesichtsbilder einer bestimmten Person mit Web Scraping
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Ein Briefing über die Wut, die durch das Schaben verursacht wurde
[Einführung in AWS] Memorandum zum Erstellen eines Webservers auf AWS
Gibt das Ergebnis der morphologischen Analyse mit Mecab an einen WEB-Browser aus, der mit Sakura Server / UTF-8 kompatibel ist
[Persönliches Memo] Holen Sie sich Daten im Web und machen Sie daraus einen DataFrame
Die Geschichte der Entwicklung einer WEB-Anwendung, die automatisch Fangkopien generiert [MeCab]
[Python] Ich habe einen Web-Scraping-Code erstellt, der automatisch den Nachrichtentitel und die URL von Nihon Keizai Shimbun erfasst.
Lassen Sie uns einen WEB-Server mit Chromebook einrichten
Veröffentlichen Sie das aktuelle Verzeichnis auf dem Webserver
Versuchen Sie, die Umweltkonzentration organischer Fluorverbindungen mit offenen Daten auf einer Karte darzustellen
Die Niederschlagsdaten der Meteorologischen Agentur kratzen und auf M5Stack anzeigen
Link zu den Datenpunkten des von jupyterlab & matplotlib erstellten Diagramms
[Python] Zeichnen Sie Daten nach Präfektur auf einer Karte (Anzahl der Autos im ganzen Land)