2011-03-06 19 views
63

Node.jsを使用してウェブサイトのコンテンツをスクラップするのは良いことでした私は非常に高速なものを構築してkayak.comのスタイルで検索を実行することができます。ここでは、1つのクエリがいくつかの異なるサイトに送られ、結果がスクラップされ、利用可能になったときにクライアントに返されます。Node.jsを使用してリアルタイムでWebページをスクラップ

このスクリプトは結果をJSON形式で提供するだけで、ブラウザや他のWebアプリケーションで直接処理することができます。

いくつかの出発点:

Using node.js and jquery to scrape websites

誰もが任意のアイデアがありますか?

+0

あなたの2番目のリンクが自分の質問に答えるように感じます –

+0

@sirhc - node.ioは_exactly_のように見えます...ありがとう! – Avishai

+19

私はこれを保証することができます;) – chriso

答えて

24

Node.ioは、あなたが常にjQueryをする必要はありません:-)

+15

私は、node.ioを保証することができます;) – chriso

+2

Node.ioはもはや維持されていません。それは死んで、元のドメイン名が売却された。この回答は最新ではありません。 –

1

ケーキを取るように見えます。あなたがjsdomから返されたDOMを使って遊んでいる場合、あなたは自分で必要なものを簡単に取ることができます(xbrowserの問題について心配する必要はないと考えても)。https://gist.github.com/1335009はnode.ioからまったく離れていません。それに応じて自分で行うことができます...

5

上記のすべての解決策は、スクレーパーをローカルで実行することを前提としています。これは、パフォーマンスが大幅に制限されることを意味します(シーケンスまたは限られたスレッドセットで実行されるため)。より良いアプローチは、既存の、商用ではあるが、スクレイピンググリッドに依存することです。ここで

var bobik = new Bobik("YOUR_AUTH_TOKEN"); 
bobik.scrape({ 
    urls: ['amazon.com', 'zynga.com', 'http://finance.google.com/', 'http://shopping.yahoo.com'], 
    queries: ["//th", "//img/@src", "return document.title", "return $('script').length", "#logo", ".logo"] 
}, function (scraped_data) { 
    if (!scraped_data) { 
    console.log("Data is unavailable"); 
    return; 
    } 
    var scraped_urls = Object.keys(scraped_data); 
    for (var url in scraped_urls) 
    console.log("Results from " + url + ": " + scraped_data[scraped_urls[url]]); 
}); 

、スクレイピングがリモートで実行され、コールバックが結果は(彼らが利用可能になるとの結果を収集するオプションもあります)準備ができている場合にのみ、あなたのコードに発行されます。ここでは

は一例です。

あなたが自分自身は私が研究を行ってきたhttps://github.com/emirkin/bobik_javascript_sdk

2

Bobik client proxy SDKをダウンロードすることができ、かつhttps://npmjs.org/package/wscraper

、高速で柔軟、かつリーンcheerio.jsに基づいてウェブスクレーパーエージェントとしての地位を誇っていますコアjQueryの実装。 request.jsの上に構築されています。 〜によって誘発された http-agent.js

非常に低い使用量(npmjs.orgによる)が、利害関係者を探す価値があります。

0

汎用スクラッパーを使用するのは簡単ですhttps://github.com/harish2704/html-scrapperはNode.JSのために書かれています 定義済みのスキーマに基づいて情報を抽出することができます。 スキーマ定義には、CSSセレクタとデータ抽出機能が含まれています。 現在、dom解析にcheerioを使用しています。

1

あなたはWebサーバ上のリソースを取得します

  1. にはいくつかの方法を使用したいスクレイピングしている

通常ES7 /約束を使用して新しい方法(通常はHTML文書)

  • そのリソースを読んで、
    1. DOM /ツリー構造をナビゲート可能にする
    2. これをSASのようなものでトークンドキュメントとして解析します。
  • ツリー、およびトークン解析の両方が利点を持っていますが、木は通常、実質的に単純です。私たちはそれをします。それがどのように動作するかである、ここで、request-promiseをチェックアウト:

    const rp = require('request-promise'); 
    const cheerio = require('cheerio'); // Basically jQuery for node.js 
    
    const options = { 
        uri: 'http://www.google.com', 
        transform: function (body) { 
         return cheerio.load(body); 
        } 
    }; 
    
    rp(options) 
        .then(function ($) { 
         // Process html like you would with jQuery... 
        }) 
        .catch(function (err) { 
         // Crawling failed or Cheerio 
    

    これは(つまり、ウィンドウオブジェクト、またはjsdomを必要としない)は、本質的に軽量なサーバー側のjQuery風のライブラリであるcheerioを使用しています。

    約束を使っているので、これを非同期関数で書くこともできます。これは、同期を見ていきますが、それはES7と非同期になるでしょう:

    私はほとんど見
    async function parseDocument() { 
        let $; 
        try { 
         $ = await rp(options); 
        } catch (err) { console.error(err); } 
    
        console.log($('title').text()); // prints just the text in the <title> 
    } 
    
    0

    は等々cheerioで正しい道に答えると、しかし、あなたはポイントを取得後、どこ解析する必要がとJavaScript(ala SPA以上)を実行すると、https://github.com/joelgriffith/navalia(私は著者です)をチェックアウトします。 Navaliaは、ヘッドレスブラウザのコンテキストでスクレイピングをサポートするように構築されており、かなり高速です。ありがとう!

    関連する問題