[PYTHON] Essayez différentes choses avec PhantomJS

Qu'est-ce que PhantomJS?

HP: PhantomJS Pour référence: Pourquoi "WebKit" entre Google et Apple est-il si important?

En un mot, un navigateur Headless basé sur Webkit. Webkit est un moteur de rendu principalement utilisé dans les navigateurs Web. PhantomJS utilise un moteur javascript appelé JavaScriptCore (qui utilise également safari) intégré à Webkit. Il peut également être utilisé pour le grattage et la capture d'écran.

Comment avez-vous rencontré PhantomJS?

Lorsque j'essayais de gratter avec Python 3.4, je suis tombé sur un site avec un rendu JavaScript. J'ai décidé de suivre le site [http://qiita.com/beatinaniwa/items/72b777e23ef2390e13f8#comment-8ec96aa8e93ceb9cf3ea) pour un scraping web rapide avec Python (tout en supportant le chargement JavaScript). ..

Installation

L'installation a donc commencé. $ brew install phantomjs

Experiment #0

Je vais essayer diverses choses en me référant à Quick Start publié sur le net. En gros, nous utiliserons le langage Javascript.

Experiment #1 Hello, World! Déplacez-vous vers le répertoire où vous souhaitez projeter sur le terminal (ou le nom du fichier mkdir). Créez un fichier avec touch hello.js dans le répertoire du projet et commencez à fleshing avec ʻopen hello.js`.

hello.js


console.log('Hello, World!');
phantom.exit();

Quand je lance phantomjs hello.js sur le terminal, il renvoie Hello, World!. La première ligne, console.log, lance la chaîneHello, world! ʻDans le terminal. Les informations lancées sont en fait exécutées par la commandephantom.exit (). Au fait, le code n'est pas traité à moins que vous n'écriviez la commande phantom.exit ()`.

Experiment #2 Page Loading Il est possible de créer un objet sur n'importe quelle page Web à l'aide de PhantomJS et de charger, analyser et générer la page Web.

page_loading.js


//Créer un navigateur sans tête
var page = require('webpage').create();

//Ouvrez l'URL spécifiée
page.open('https://google.com', function(status) {
  console.log("Status: " + status);
  if(status === "success") {
  	//screen capture
    page.render('google.png');
  }
  phantom.exit();
});

En cas de succès, vous devriez voir «Statut: succès» et vous devriez avoir une capture d'écran Google dans votre répertoire de travail. De plus, il semble que vous puissiez mesurer la vitesse de chargement des pages. Par exemple, si vous voulez savoir à quelle vitesse une page se charge sur "http: // www.google.com",

loadspeed.js


var page = require('webpage').create(),
  system = require('system'),
  t, address;

//<>Mettez l'URL spécifiée dans
if (system.args.length === 1) {
  console.log('Usage: loadspeed.js <http://www.google.com>');
  phantom.exit();
}

t = Date.now();
address = system.args[1];
page.open(address, function(status) {
  if (status !== 'success') {
    console.log('FAIL to load the address');
  } else {
    t = Date.now() - t;
    console.log('Loading ' + system.args[1]);
    console.log('Loading time ' + t + ' msec');
  }
  phantom.exit();
});

Si vous l'exécutez sur phantomjs loadspeed.js http: // www.google.com, il sera Loading http://www.google.com Le résultat de l'exécution tel que le temps de chargement 698 msec s'affiche.

Experiment #3 Code Evaluation En gros, vous pouvez obtenir des données JavaScript sur le Web en utilisant la fonction ʻevaluate () `. Par exemple, lorsque vous souhaitez obtenir le titre sur une page Web,

//Créer un navigateur sans tête
var page = require('webpage').create();

//Ouvrir le lien
page.open('http://www.google.com', function(status) {
  //Obtenez des données via JS dans le navigateur
  var title = page.evaluate(function() {
    return document.title;
  });
  console.log('Page title is ' + title);
  phantom.exit();
});

Lorsque je l'exécute sur le terminal, il est dit "Le titre de la page est Google".

Supplemental tryout Vous pouvez même utiliser PhantomJs pour fournir des conseils de conduite basés sur google map.

direction.js


// Get driving direction using Google Directions API.

var page = require('webpage').create(),
    system = require('system'),
    origin, dest, steps;

if (system.args.length < 3) {
    console.log('Usage: direction.js origin destination');
    console.log('Example: direction.js "San Diego" "Palo Alto"');
    phantom.exit(1);
} else {
    origin = system.args[1];
    dest = system.args[2];
    page.open(encodeURI('http://maps.googleapis.com/maps/api/directions/xml?origin=' + origin +
                '&destination=' + dest + '&units=imperial&mode=driving&sensor=false'), function (status) {
        if (status !== 'success') {
            console.log('Unable to access network');
        } else {
            steps = page.content.match(/<html_instructions>(.*)<\/html_instructions>/ig);
            if (steps == null) {
                console.log('No data available for ' + origin + ' to ' + dest);
            } else {
                steps.forEach(function (ins) {
                    ins = ins.replace(/\&lt;/ig, '<').replace(/\&gt;/ig, '>');
                    ins = ins.replace(/\<div/ig, '\n<div');
                    ins = ins.replace(/<.*?>/g, '');
                    console.log(ins);
                });
                console.log('');
                console.log(page.content.match(/<copyrights>.*<\/copyrights>/ig).join('').replace(/<.*?>/g, ''));
            }
        }
        phantom.exit();
    });
}

Vers un répertoire approprié et exécutez-le sur le terminal au point d'arrivée du point de départ phantomjs direction.js. Quand je l'ai couru avec phantomjs direction.js Tokyo Osaka comme essai,

Head south
Tourner à droite à Metropolitan Government South (intersection) en direction de la route métropolitaine 431
Au centre des habitants de Kakumei (intersection),continuer sur la route métropolitaine 431
Tourner à gauche à Nishi-Shinjuku 4-chome (intersection) sur Yamate-dori/Route 317
Continuer tout droit pour rester sur Yamate-dori/Route 317
Prendre la bretelle à droite vers Metropolitan Expressway Central Circular Route
Toll road
Continuer sur la sortie Hatsudai Minami Toll Office
Toll road
Rejoindre l'itinéraire circulaire central de l'autoroute métropolitaine
Toll road
Prendre la sortie Ohashi JCT sur la droite en direction de Tomei / anneau du centre-ville
Toll road
Keep left at the fork,suivez les panneaux pour Tomei et rejoignez la Metropolitan Expressway n ° 3 Shibuya Line
Toll road
Restez à droite pour continuer sur l'autoroute Tomei
Toll road
Restez à droite à l'embranchement pour rester sur l'autoroute Tomei,suivre les panneaux indiquant la bonne route, Shizuoka, Gotenba
Toll road
Prendre la sortie Gotenba JCT en direction de Shintomei / Shizuoka / Nagoya
Toll road
Continuer sur New Tomei Expressway
Toll road
Continuer sur la sortie Inasa Hamamatsu JCT
Toll road
Keep right at the fork,suivre les panneaux pour Tomei / Tokyo / Nagoya et rejoindre la nouvelle autoroute Tomei
Toll road
Prendre la sortie Mikaday JCT à droite en direction de Tomei / Nagoya
Toll road
Rejoindre l'autoroute Tomei
Toll road
Prendre la sortie Toyoda JCT en direction de Tokai Ring, Isewan Coastal Road, Toyoda East Exit, Toki JCT, Yokkaichi, Shinmeijin
Toll road
Keep right at the fork,suivre les panneaux indiquant la route côtière d'Isewan, Yokkaichi, Shinmeijin et rejoindre la route côtière d'Isewan
Toll road
Prendre la sortie à grande vitesse Tobishima IC sur la droite en direction d'Ise Bay Expressway
Toll road
Continuer sur Ise Gulf Expressway
Toll road
Prendre la sortie Yokkaichi JCT sur la droite en direction de Tomei Hando / Osaka / Ise Road
Toll road
Rejoindre l'autoroute Tomeihan
Toll road
Prendre la sortie Kameyama JCT en direction de New Meishin / Kyoto / Osaka
Toll road
Continuer sur Shinmeijin Expressway
Toll road
Prendre la sortie Kusatsu JCT en direction de Kusatsu PA / Meishin / Keiji / Kyoto / Osaka
Toll road
Restez à droite à l'embranchement pour continuer sur la sortie Kusatsu PA,suivre les panneaux indiquant Meishin et rejoindre l'autoroute Meishin
Toll road
Restez à droite à l'embranchement pour rester sur l'autoroute Meishin,suivre les panneaux indiquant la bonne route
Toll road
Prendre la sortie Toyonaka IC en direction de l'autoroute Hanshin, sortie Toyonaka, Osaka City
Toll road
Keep left at the fork,suivre les panneaux indiquant la ville d'Osaka / la sortie de la route générale / l'autoroute Hanshin
Toll road
Restez à droite à l'embranchement pour continuer sur la sortie High Speed Toyonaka IC,suivre les panneaux pour Hanshin High Speed
Toll road
Continuer sur la sortie Meishin Hanshin Charge Bureau de péage de collecte simultanée
Toll road
Rejoignez la ligne 11 Ikeda de l'autoroute Hanshin Expressway
Toll road
Rejoindre la ligne de boucle de l'autoroute Hanshin n ° 1
Toll road
Prendre la sortie Toshitaka Kitahama vers la sortie Kitahama
Partial toll road
Tourner à droite à Sugawaramachi Nishi (intersection) sur Sakaisuji
Tourner légèrement à droite pour rester sur Sakaisuji
Tourner légèrement à droite sur Tenjinbashisuji
Tourner à droite à Tenjinbashi (intersection) sur Tosabori-dori/Route Préfectorale 168
Tourner à droite à Kitahama 2 (intersection) vers Nakanoshima-dori
Turn is not allowed 8:00 AM – 8:00 PM
Tourner à gauche vers Nakanoshima Dori
Tourner à gauche sur Nakanoshima Dori
Destination will be on the left

Mis à part la précision, il semble bouger pour le moment. Il s'avère que vous pouvez essayer différentes choses avec PhantomJS seul. Référence: direction.js

Recommended Posts

Essayez différentes choses avec PhantomJS
Conseils personnels lorsque vous faites diverses choses avec Python 3
Essayez de gratter avec Python.
Essayez SNN avec BindsNET
Différentes barres de couleurs avec Matplotlib
Essayez la régression avec TensorFlow
J'ai essayé différentes choses avec Python: le grattage (Beautiful Soup + Selenium + PhantomJS) et l'analyse morphologique
Essayez de défier le sol par récursif
Essayez l'optimisation des fonctions avec Optuna
Essayez l'apprentissage en profondeur avec TensorFlow
Essayez d'utiliser PythonTex avec Texpad.
Essayez d'afficher diverses informations utiles pour le débogage avec python
Essayez la détection des bords avec OpenCV
Essayez d'implémenter RBM avec chainer.
Essayez Google Mock avec C
Essayez d'utiliser matplotlib avec PyCharm
Essayez de programmer avec un shell!
Essayez la programmation GUI avec Hy
Essayez Auto Encoder avec Pytorch
Essayez l'opération matricielle avec NumPy
Essayez d'implémenter XOR avec PyTorch
Essayez d'exécuter CNN avec ChainerRL
Essayez le Deep Learning avec FPGA
Ajout d'une seule ligne avec divers scripts
Manipulez diverses bases de données avec Python
Essayez d'exécuter Python avec Try Jupyter
Essayez d'implémenter le parfum avec Go
Développé avec Choregraphe et divers mémorandums
Essayez Selenium Grid avec Docker
Essayez la reconnaissance faciale avec Python
Essayez OpenCV avec Google Colaboratory
Essayez le machine learning à la légère avec Kaggle
Essayez TensorFlow MNIST avec RNN
Essayez de créer Jupyter Hub avec Docker
Essayez d'utiliser le folium avec anaconda
Essayez diverses distributions Linux avec VMware ESXi arm edition + essayez le démarrage USB
Essayez le Deep Learning avec les concombres FPGA-Select
Essayez de gratter avec Python + Beautiful Soup
Renforcer l'apprentissage 13 Essayez Mountain_car avec ChainerRL.
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
Essayez l'invite http avec un accès http interactif
Essayez le traitement du signal audio avec librosa-Beginner
Essayez de prédire les courses de chevaux avec Chainer
Essayez de profiler avec ONNX Runtime
SVM essayant l'apprentissage automatique avec scikit-learn
Essayez L Chika avec raspberrypi
Essayez la reconnaissance faciale avec python + OpenCV
Essayez d'exécuter Jupyter avec VS Code
Divers réglages fins avec Mobilenet v2
Essayez de miner Bitcoin avec le hashlib de Python
Débutant RNN (LSTM) | Essayer avec Keras
Essayez de déplacer 3 servos avec Raspeye
Essayez la simulation de contrôle de fréquence avec Python
Essayez de brouiller l'image avec opencv2
Essayez l'apprentissage de la représentation commune avec le chainer
Essayez de produire de l'audio avec M5 STACK
Essayez les données en parallèle avec TensorFlow distribué
Essayez d'utiliser le networkx de Python avec AtCoder
[PyStan] Essayez le lasso graphique avec Stan.
Gère divers formats de date avec des pandas