HP: PhantomJS Als Referenz: Warum ist "WebKit" zwischen Google und Apple so wichtig?
Kurz gesagt, ein Webkit-basierter Headless-Browser. Webkit ist eine Rendering-Engine, die hauptsächlich in Webbrowsern verwendet wird. PhantomJS verwendet eine im Webkit integrierte Javascript-Engine namens JavaScriptCore (die auch Safari verwendet). Es kann auch zum Scraping und zur Bildschirmaufnahme verwendet werden.
Als ich versuchte, mit Python 3.4 zu kratzen, stieß ich auf eine Site mit JavaScript-Rendering. Schnelles Web-Scraping mit Python (während das Laden von JavaScript unterstützt wird) Ich habe mich entschlossen, der Site als Referenz zu folgen. ..
Installation
Die Installation hat also tatsächlich begonnen.
$ brew install phantomjs
Experiment #0
Ich werde verschiedene Dinge ausprobieren, indem ich auf Schnellstart verweise, der im Internet veröffentlicht wurde. Grundsätzlich werden wir die Javascript-Sprache verwenden.
Experiment #1 Hello, World!
Wechseln Sie in das Verzeichnis, in das Sie auf das Terminal (oder den Dateinamen mkdir) projizieren möchten. Erstellen Sie eine Datei mit touch hello.js
im Projektverzeichnis und beginnen Sie mit open hello.js
.
hello.js
console.log('Hello, World!');
phantom.exit();
Wenn ich "phantomjs hello.js" auf dem Terminal ausführe, wird "Hello, World!" Zurückgegeben. Die erste Zeile, console.log
, wirft die Zeichenfolge Hallo Welt!
In das Terminal. Die ausgelösten Informationen werden tatsächlich vom Befehl phantom.exit ()
ausgeführt. Der Code wird übrigens nur verarbeitet, wenn Sie den Befehl phantom.exit ()
schreiben.
Experiment #2 Page Loading Mit PhantomJS können Sie auf jeder Webseite ein Objekt erstellen und die Webseite laden, analysieren und generieren.
page_loading.js
//Machen Sie einen kopflosen Browser
var page = require('webpage').create();
//Öffnen Sie die angegebene URL
page.open('https://google.com', function(status) {
console.log("Status: " + status);
if(status === "success") {
//screen capture
page.render('google.png');
}
phantom.exit();
});
Wenn dies erfolgreich ist, sollte "Status: Erfolg" angezeigt werden und Sie sollten eine Google-Bildschirmaufnahme in Ihrem Arbeitsverzeichnis haben. Außerdem können Sie anscheinend die Geschwindigkeit beim Laden von Seiten messen. Wenn Sie beispielsweise wissen möchten, wie schnell eine Seite auf "http: // www.google.com" geladen wird,
loadspeed.js
var page = require('webpage').create(),
system = require('system'),
t, address;
//<>Geben Sie die angegebene URL ein
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();
});
Wenn Sie es auf "phantomjs loadspeed.js http: // www.google.com" ausführen, wird es "http://www.google.com" geladen Das Ausführungsergebnis wie Ladezeit 698 ms wird angezeigt.
Experiment #3 Code Evaluation
Grundsätzlich können Sie die Funktion evalu ()
verwenden, um die JavaScript-Daten im Web abzurufen. Wenn Sie beispielsweise den Titel auf einer Webseite abrufen möchten,
//Erstellen Sie einen kopflosen Browser
var page = require('webpage').create();
//Öffne URL
page.open('http://www.google.com', function(status) {
//Holen Sie sich Daten über JS im Browser
var title = page.evaluate(function() {
return document.title;
});
console.log('Page title is ' + title);
phantom.exit();
});
Wenn ich es auf dem Terminal ausführe, heißt es "Seitentitel ist Google".
Supplemental tryout Sie können sogar PhantomJs verwenden, um eine Fahranleitung basierend auf Google Map bereitzustellen.
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();
});
}
In ein geeignetes Verzeichnis und führen Sie es auf dem Terminal unter "phantomjs direction.js Abflugpunkt Ankunftspunkt" aus. Als ich es mit phantomjs direction.js Tokyo Osaka
als Test lief,
Head south
Biegen Sie an der Metropolitan Government South (Kreuzung) rechts in Richtung Metropolitan Route 431 ab
Im Kakumei Inhabitant Center (Kreuzung),Fahren Sie weiter auf der Metropolitan Route 431
Biegen Sie am Nishi-Shinjuku 4-chome (Kreuzung) links auf die Yamate-dori ab/Route 317
Fahren Sie geradeaus weiter, um auf Yamate-dori zu bleiben/Route 317
Nehmen Sie die Auffahrt rechts zur Metropolitan Expressway Central Circular Route
Toll road
Fahren Sie weiter bis zur Ausfahrt Hatsudai Minami Toll Office
Toll road
Fahren Sie auf die Metropolitan Expressway Central Circular Route
Toll road
Nehmen Sie die Ausfahrt Ohashi JCT auf der rechten Seite in Richtung Tomei / Ring im Stadtzentrum
Toll road
Keep left at the fork,Folgen Sie der Beschilderung nach Tomei und fahren Sie auf die Shibuya-Linie Nr. 3 des Metropolitan Expressway
Toll road
Halten Sie sich rechts, um auf dem Tomei Expressway weiterzufahren
Toll road
Halten Sie sich an der Gabelung rechts, um auf dem Tomei Expressway zu bleiben,Folgen Sie den Schildern zur richtigen Route, Shizuoka, Gotenba
Toll road
Nehmen Sie die Ausfahrt Gotenba JCT in Richtung Shintomei / Shizuoka / Nagoya
Toll road
Fahren Sie weiter auf dem New Tomei Expressway
Toll road
Fahren Sie weiter bis zur Ausfahrt Inasa Hamamatsu JCT
Toll road
Keep right at the fork,Folgen Sie der Beschilderung nach Tomei / Tokio / Nagoya und fahren Sie auf den New Tomei Expressway
Toll road
Nehmen Sie die Ausfahrt Mikaday JCT auf der rechten Seite in Richtung Tomei / Nagoya
Toll road
Fahren Sie auf den Tomei Expressway
Toll road
Nehmen Sie die Ausfahrt Toyoda JCT in Richtung Tokai Ring, Isewan Coastal Road, Ausfahrt Toyoda East, Toki JCT, Yokkaichi, Shinmeijin
Toll road
Keep right at the fork,Folgen Sie den Schildern zur Isewan Coastal Road, Yokkaichi, Shinmeijin und fahren Sie auf die Isewan Coastal Road
Toll road
Nehmen Sie die Ausfahrt Highspeed Tobishima IC auf der rechten Seite in Richtung Ise Bay Expressway
Toll road
Fahren Sie weiter auf dem Ise Gulf Expressway
Toll road
Nehmen Sie die Ausfahrt Yokkaichi JCT auf der rechten Seite in Richtung Tomei Hando / Osaka / Ise Road
Toll road
Fahren Sie auf den Tomeihan Expressway
Toll road
Nehmen Sie die Ausfahrt Kameyama JCT in Richtung New Meishin / Kyoto / Osaka
Toll road
Fahren Sie weiter auf den Shinmeijin Expressway
Toll road
Nehmen Sie die Ausfahrt Kusatsu JCT in Richtung Kusatsu PA / Meishin / Keiji / Kyoto / Osaka
Toll road
Halten Sie sich an der Gabelung rechts, um an der Ausfahrt Kusatsu PA weiterzufahren,Folgen Sie den Schildern nach Meishin und fahren Sie auf den Meishin Expressway
Toll road
Halten Sie sich an der Gabelung rechts, um auf dem Meishin Expressway zu bleiben,Folgen Sie den Schildern zur richtigen Route
Toll road
Nehmen Sie die Ausfahrt Toyonaka IC in Richtung Hanshin Expressway, Toyonaka Exit, Osaka City
Toll road
Keep left at the fork,Folgen Sie der Beschilderung nach Osaka City / allgemeine Straßenausfahrt / Hanshin Highway
Toll road
Halten Sie sich an der Gabelung rechts, um am High Speed Toyonaka IC weiterzufahren,Folgen Sie den Schildern nach Hanshin High Speed
Toll road
Fahren Sie weiter bis zur Ausfahrt Meishin Hanshin Charge Simultaneous Collection Toll Office
Toll road
Fahren Sie auf den Hanshin Expressway Nr. 11 Ikeda Line
Toll road
Fahren Sie auf die Hanshin Expressway No. 1 Loop Line
Toll road
Nehmen Sie die Ausfahrt Toshitaka Kitahama in Richtung Kitahama
Partial toll road
Biegen Sie bei Sugawaramachi Nishi (Kreuzung) rechts auf Sakaisuji ab
Etwas rechts, um auf Sakaisuji zu bleiben
Leicht rechts auf Tenjinbashisuji
Biegen Sie bei Tenjinbashi (Kreuzung) rechts ab auf Tosabori-dori/Präfekturroute 168
Biegen Sie an der Kitahama 2 (Kreuzung) rechts ab in Richtung Nakanoshima-dori
Turn is not allowed 8:00 AM – 8:00 PM
Biegen Sie links ab in Richtung Nakanoshima Dori
Biegen Sie links ab auf Nakanoshima Dori
Destination will be on the left
Abgesehen von der Genauigkeit scheint es sich vorerst zu bewegen. Es stellt sich heraus, dass Sie mit PhantomJS allein verschiedene Dinge ausprobieren können. Referenz: direction.js
Recommended Posts