Spusťte své vlastní Scraping API s PhearJS

Takzvané „dynamické vykreslování na straně klienta“ poskytuje klientům skvělé zážitky, ale ztěžuje pochopení pro stroje. V případě, že chcete provádět dolování dat, odstraňovat webové stránky nebo odesílat statické verze své úhledné jednostránkové aplikace společnosti Altavista, v podstatě potřebujete prohlížeč. To je zvláště důležité vzhledem k množství webů, které používají React, Angular, jQuery nebo nějaký jiný efektní Javascriptový framework.

PhearJS je open-source software, který odhaluje sílu bezhlavého prohlížeče PhantomJS prostřednictvím HTTP API. Odešlete HTTP-požadavky na vaše PhearJS API, abyste načetli webovou stránku a získali pěkný JSON obsahující vykreslený HTML a relevantní metadata.

V tomto tutoriálu se podíváme, jak to můžete mít.

Nastavení

PhearJS alespoň běží na populárních nedávných distribucích Linuxu a Mac OS X. Nejprve potřebujeme nějaké závislosti:

  • Memcached , proveďte:brew install memcached . Nahraďte brew s něčím jako apt-get v závislosti na vašem operačním systému.
  • NodeJS , pravděpodobně to máte, ale pokud ne, pořiďte si to.
  • PhantomJS 2+ , instalace verze 2+ se v současné době mezi operačními systémy dost liší, takže je nejlepší postupovat podle jejich pokynů k instalaci.

Woo! Závislosti dolů, nyní získejte PhearJS:

git clone https://github.com/Tomtomgo/phearjs.git
cd phearjs
npm install

Bum, to je ono! Spuštěním PhearJS můžete ověřit, že je v pořádku, měli byste vidět nějaké informace na terminálu:

node phear.js

Pokud otevřete prohlížeč a přejdete na http://localhost:8100/status, měl by vám zobrazit nějaké statistiky na serveru.

Zadávání žádostí

Dobře, takže nyní máme spuštěný PhearJS. Vykreslení webové stránky je jednoduché, zde použiji cUrl, ale můžete také použít svůj prohlížeč s pluginem prohlížeče JSON:

# URL is URL-encoded, like you'd do with encodeURIComponent()
curl "http://localhost:8100/" \
      "?fetch_url=https%3A%2F%2Fdavidwalsh.name%2F"

Asi za pět sekund uvidíte odpověď JSON s vykresleným HTML a metadaty, jako jsou záhlaví požadavků. Zkuste to znovu a okamžitě to získáte.

Ale počkat, proč to poprvé trvá pět sekund? Těchto pět sekund je zpoždění, které používáme záměrně. Umožňuje PhearJS nějaký čas na načítání požadavků AJAX a vykreslování. Následné požadavky jsou obsluhovány z mezipaměti, a proto jsou rychlé.

Nyní, pokud máte pomalé připojení nebo víte, že budete odstraňovat těžké stránky, můžete toto zpoždění prodloužit:

curl "http://localhost:8100/" \
      "?fetch_url=https%3A%2F%2Fdavidwalsh.name%2F" \
      "&parse_delay=10000" \ # milliseconds
      "&force=true" # force a cache refresh

Toto je nejjednodušší použití PhearJS. Existuje mnoho dalších možností konfigurace a běhu, které jsou zdokumentovány na Github.

Seškrabování

Podívejme se na běžný případ použití pro PhearJS:scraping. Řekněme, že chceme získat obrázky ze stránky blogu, které nejsou viditelné bez aktivovaného JavaScriptu, např. https://davidwalsh.name/.

Závislosti

K analýze a vytváření požadavků použijeme Cheerio a Request:

npm install cheerio requests

Zápis scrape.js

Jakmile to uděláme, můžeme projít několika jednoduchými kroky k načtení všech obrázků na této stránce:

// 1. load dependencies
var cheerio = require('cheerio'),
    request = require('request'),
    url = require('url');

var page_url = 'https://davidwalsh.name';
var results = [];

// 2. encode the URL and add to PhearJS endpoint
var target = 'http://localhost:8100?fetch_url=' + encodeURIComponent(page_url);

// 3. use request to GET the page
request.get(target, function(error, response, body) {

    // 4. load the DOM from the response JSON
    var $ = cheerio.load(JSON.parse(body).content);

    // 5. use cheerio's jQuery-style selectors to get all images
    $("img").each(function(i, image) {

        // 6. resolve absolute URL and add to our results array
        results.push(url.resolve(page_url, $(image).attr('src')));
    });

    // 7. and boom! there's our images
    console.log(results);
});

Spusťte to!

Spuštěním tohoto skriptu získáte seznam všech obrázků na stránce:

# run PhearJS
node phear.js

# in another shell run the script
node scrape.js
[ <url>, ..., <url> ]

Další

Toto je velmi triviální škrábání s PhearJS. Je na vás, zda jej použijete na různé scénáře, jako je procházení nebo automatizace pro dávkové škrábání, cokoliv. Zajímalo by mě, k čemu jste PhearJS používali!

Závěr

PhearJS je software s otevřeným zdrojovým kódem, který vám umožňuje spouštět vlastní scraping nebo předvykreslování „mikroslužby“. Vykresluje webové stránky a vrací je jako JSON přes HTTP.

Zde jsme se zaměřili na to, jak nastavit PhearJS pro velmi jednoduchý úkol seškrabávání. SEO je další důležitý aspekt, pro který může být relevantní middleware phearjs-express.