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.
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.
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.
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.
▼ 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