[PYTHON] Festkomma-Beobachtung bestimmter Daten im Web durch automatische Ausführung des Webbrowsers auf dem Server (Ubuntu16.04) (3) ~ Cron automatische Ausführung ~

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 den Webbrowser mit Selen und verarbeiten Sie die WEB-Daten → Erklärt in Teil 2 (3) Speichern Sie die verarbeiteten Daten in mongoDB → Teil 3 (dieser Beitrag) (4) Führen Sie das py-Programm, das (1) bis (3) ausführt, automatisch mit cron → [Part3 (dieser Beitrag)] aus (http://qiita.com/gano/items/41111c320577779999a4). (5) Bei einer bestimmten Wertschwankung per E-Mail benachrichtigen → Bonus

Das Programm, das automatisch bestimmte Daten im Web in Part1 und Part2 erfasst. Nachdem dies erledigt ist, stellen Sie das Programm so ein, dass es automatisch auf CRON ausgeführt wird.

Umgebung

Betriebssystem: Ubuntu16.04 (Sakura VPS) python : version 3.5 mongoDB : version 2.6.10 PhantomJS : version 2.1.1

Schritt 1) Stellen Sie CRON ein

#Überprüfen der Funktion von cron
sudo service cron status

#Bearbeiten Sie die Cron-Konfigurationsdatei
crontab -e

In crontab wie folgt beschrieben

*/5 * * * * <path_to_python>/python3 /<path_to_file/test.py >> /<path_to_log>/test.log 2>>&1

Geben Sie das in Teil1, Teil2 erstellte Python-Programm wie oben beschrieben an. In diesem Fall startet der Browser alle 5 Minuten und ruft bestimmte Daten von einer bestimmten Site ab.

Schritt 2) Vorbereitung zum Speichern der abgerufenen Daten in der Datenbank

Es ist ein Bonus von hier. Ich habe dieses Festkomma-Beobachtungsprogramm mit dem Standard-Ubuntu erstellt. Notieren wir uns also auch den DB-Speicher.

Wenn die Ausgabe in die txt-Datei in Ordnung ist, muss sie nicht geschrieben werden.

Dateiausgabe


f = open( "test.txt", "a+" )
f.write( data )
f.close

Wird in Ordnung sein.

Ich speichere es tatsächlich in MongoDB.

MongoDB installieren </ b>

Führen Sie zur Installation die folgenden Schritte aus.

1)Einstellung des öffentlichen Schlüssels
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

2) mongodb.Erstelle Liste
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list

3)Eigentlich installieren
sudo apt-get update
#sudo apt-get install mongodb-10gen

4) mongod.Service erstellen
sudo vim /lib/systemd/system/mongod.service

 ▼mongod.Inhalt des Dienstes

 [Unit]
 Description=MongoDB Database Service
 Wants=network.target
 After=network.target

 [Service]
 ExecStart=/usr/bin/mongod --config /etc/mongod.conf
 ExecReload=/bin/kill -HUP $MAINPID
 Restart=always
 User=mongodb
 Group=mongodb
 StandardOutput=syslog
 StandardError=syslog

 [Install]
 WantedBy=multi-user.target

(Referenz-URL) http://qiita.com/pelican/items/bb9b5290bb73acedc282

Pymongo installieren </ b>

Installieren Sie das Pymongo-Paket, das MongoDB von Python aus betreibt

pip3 install pymongo

MongoDB starten </ b>

sudo systemctl start mongod

Schritt 3) Vollständiges Programm zur Festpunktbeobachtung von Daten im WEB durch automatische Ausführung des Browsers

Ein einfaches Festpunktbeobachtungsprogramm, das Teil1 und Teil2 und diesen Beitrag kombiniert. Ich werde schreiben.

Wie bei Part2 können die Daten, die ich tatsächlich beobachte, nicht veröffentlicht werden, sodass ich diesmal automatisch die Beiträge im Top-Feed von Qiita erhalte. Schreiben wir ein Programm.

Hier ist der Inhalt des Programms. (1) Starten Sie den Browser PhantomJS (2) Melden Sie sich automatisch bei Qiita an und erfassen Sie automatisch die 20 Beitragsnamen oben im Feed. (3) Speichern Sie den in (2) erhaltenen Beitragsnamen in der Liste und geben Sie ihn an MongoDB aus.   Der tatsächliche Programmcode lautet wie folgt.

import time
import datetime

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")

#Organisation der Post-Name-Daten
posts = []
for i in (0,len(posts_source)):
 posts[i] = post.text.strip()

#Holen Sie sich die Zeit der Festpunktbeobachtung
output = {}
output["date"] = str(datetime.date.today())
output["datetime"] = str(datetime.datetime.today().strftime("%H:%M:%S"))
output["content"] = posts

#In MongoDB speichern
mongo = MongoClient('localhost:27017')
db = mongo_client["qiita"]
new_posts = db_connect["new_posts"]
new_posts.insert(output)

#Browser schließen
browser.close()

Es ist so. Wenn Sie dieses Programm regelmäßig mit cron ausführen, werden die letzten 20 Postnamen aus dem Feed aufgezeichnet, nachdem Sie sich bei Qiita angemeldet haben. (Da es sich um ein Testprogramm zum Posten handelt, halte ich es für nicht praktikabel ^^;)

Durch Anwendung dieses Programms ist es möglich, Daten auf verschiedenen WEB-Seiten an festen Punkten zu beobachten, unabhängig davon, ob GET / POST vorhanden ist oder nicht.

Recommended Posts