[PYTHON] Observation en virgule fixe de données spécifiques sur le Web en exécutant automatiquement le navigateur Web sur le serveur (Ubuntu16.04) (3) ~ Exécution automatique Cron ~

Contexte

Il y avait des données sur le WEB dont les valeurs changeaient en temps réel. J'ai décidé de créer un programme pour vérifier régulièrement la valeur, mais il était difficile d'écrire le code de scraping car je devais me connecter à la page. En guise de contre-mesure, j'ai décidé d'utiliser du sélénium pour faire fonctionner un navigateur Web et gratter. Je vais résumer le processus dans un mémorandum.

De plus, il était normal d'utiliser le PC à portée de main et d'exécuter automatiquement le navigateur Web par traitement par lots, mais c'était un obstacle pour lancer le navigateur Web sur mon propre PC que j'utilise habituellement. Exécutons-le sur le serveur de location (Ubuntu16.04) sans autorisation.

Plus précisément, ce sera l'image suivante. (1) Lancer un navigateur Web via python → Expliqué dans Part1 (2) Utilisez le navigateur Web avec du sélénium et traitez les données WEB → Expliqué dans Part2 (3) Stocker les données traitées dans mongoDB → Expliqué dans Part3 (this post) (4) Exécuter automatiquement le programme py qui exécute (1) à (3) avec cron → Part3 (this post) (5) S'il y a une certaine fluctuation de la valeur, notifier par e-mail → Bonus

Le programme qui acquiert automatiquement des données spécifiques sur le Web dans Part1 et Part2 Maintenant que c'est fait, configurez le programme pour qu'il s'exécute automatiquement sur CRON.

environnement

Système d'exploitation: Ubuntu16.04 (Sakura VPS) python : version 3.5 mongoDB : version 2.6.10 PhantomJS : version 2.1.1

Étape 1) Réglez CRON

#Vérification du fonctionnement de cron
sudo service cron status

#Modifier le fichier de configuration cron
crontab -e

Décrit dans crontab comme suit

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

Spécifiez le programme python créé dans Part1, Part2 comme le travail décrit ci-dessus. Si vous le faites, le navigateur démarrera toutes les 5 minutes et récupérera des données spécifiques à partir d'un site spécifique.

Étape 2) Préparation pour enregistrer les données extraites dans DB

C'est un bonus d'ici. J'ai créé ce programme d'observation en virgule fixe avec Ubuntu par défaut, alors notons également le stockage de la base de données.

Si la sortie dans le fichier txt est correcte, il n'est pas nécessaire de l'écrire,

Sortie de fichier


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

Sera bien.

Je le stocke en fait dans MongoDB.

Installation de MongoDB </ b>

Suivez les étapes ci-dessous pour installer.

1)Paramètre de clé publique
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10

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

3)En fait installer
sudo apt-get update
#sudo apt-get install mongodb-10gen

4) mongod.Créer un service
sudo vim /lib/systemd/system/mongod.service

 ▼mongod.Contenu du service

 [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

(URL de référence) http://qiita.com/pelican/items/bb9b5290bb73acedc282

Installation de pymongo </ b>

Installez le package pymongo qui gère MongoDB à partir de python

pip3 install pymongo

Démarrage de MongoDB </ b>

sudo systemctl start mongod

Étape 3) Programme complet pour l'observation en virgule fixe des données sur le WEB par exécution automatique du navigateur

Un simple programme d'observation en virgule fixe qui combine Part1 et Part2 et cet article. J'écrirai.

Comme pour Part2, les données que j'observe réellement ne peuvent pas être publiées, donc cette fois j'obtiendrai automatiquement les messages dans le fil supérieur de Qiita. Écrivons un programme.

Voici le contenu du programme. (1) Lancez le navigateur PhantomJS (2) Connectez-vous automatiquement à Qiita et obtenez automatiquement les 20 noms de poste en haut du flux. (3) Stockez le nom de publication obtenu dans (2) dans la liste et envoyez-le à MongoDB.   Le code de programme réel est le suivant.

import time
import datetime

from selenium import webdriver
from bs4 import BeautifulSoup

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

#Démarrage automatique de PhantomJS et accès à Qiita
browser = webdriver.PhantomJS(executable_path='<path/to/phantomjs>')
browser.get(URL)
time.sleep(3)

#Page de connexion
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)

#Obtenez une liste de publications sur l'écran d'accueil
html = browser.page_source.encode('utf-8')
soup = BeautifulSoup(html, "lxml")
posts_source = soup.select(".item-box-title > h1 > a")

#Organisation des données de nom de poste
posts = []
for i in (0,len(posts_source)):
 posts[i] = post.text.strip()

#Obtenez l'heure de l'observation en point fixe
output = {}
output["date"] = str(datetime.date.today())
output["datetime"] = str(datetime.datetime.today().strftime("%H:%M:%S"))
output["content"] = posts

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

#Fermer le navigateur
browser.close()

C'est comme ça. En exécutant ce programme régulièrement avec cron, les 20 derniers noms de publication seront enregistrés à partir du flux après la connexion à Qiita. (Parce que c'est un programme de test pour l'affichage, je pense que ce n'est pas pratique ^^;)

En appliquant ce programme, il sera possible d'observer des données dans différentes pages WEB à des points fixes indépendamment de la présence ou de l'absence de GET / POST.

Recommended Posts