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.
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 commande
phantom.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(/\</ig, '<').replace(/\>/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