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.
Système d'exploitation: Ubuntu16.04 (Sakura VPS) python : version 3.5 mongoDB : version 2.6.10 PhantomJS : version 2.1.1
#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.
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.
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
Installez le package pymongo qui gère MongoDB à partir de python
pip3 install pymongo
sudo systemctl start mongod
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