2012-06-18 9 views

答えて

7

サーバーサイドのJavaScriptを使用すると可能です。 あなたがのNode.js

を見てみる必要があると、クローラの例は、リンク怒鳴るで見つけることができます:

一般

http://www.colourcoding.net/blog/archive/2010/11/20/a-node.js-web-spider.aspx

+0

これはサーバー側である必要はありません。 Webアプリケーションである必要はありません(ノードを使用している場合)。 – Quentin

+0

は確かしかし、私は、ノードが主にサーバー側の論理としてcatagorizedしなければならない私の意見ではので、ビジネスロジックを処理することを考えたいです。 –

+0

あなたがノードでコマンドラインアプリケーションを書くことができ、およびコマンドラインアプリが問題の要件を満たしています。サーバー側ではないため、Webアプリケーションではないため(サーバー側がないため) – Quentin

14

、ブラウザのJavaScriptが唯一のドメイン内でクロールすることができますページの取得はAjaxで行われますが、これはSame-Origin Policyによって制限されています。

クローラスクリプトを実行しているページがwww.example.comにある場合、そのスクリプトはwww.example.comのすべてのページをクロールできますが、他のすべてのページはクロールできます例えば、Access-Control-Allow-Originヘッダーは、他のサーバーのページに設定されています)。

あなた本当にはブラウザJSでのフル機能を備えたクローラを書きたい場合は、ブラウザ拡張機能を書くことができます。たとえば、Chrome extensionscross-origin Ajaxを含む特別な権限を持つパッケージ化されたWebアプリケーションの実行です。このアプローチの難しさは、複数のブラウザをサポートしたい場合は、複数のバージョンのクローラを作成する必要があるということです。

+0

最近のほとんどのブラウザはJavaScriptで書かれた拡張だけではなく、Chromeをサポート - あなただけのあなたの答えでChromeを言及私はなぜだろうか? – lucideer

+0

は公正な質問@lucideer - 私はもともと少し良い説明を書いたが、それはあまりにも長い間ったらしいだと思いました。私は最後の段落を少しはっきりと編集しました。 – apsillers

+0

ブラウザ環境の制限について説明し、これまでの回答を完了してください。 PhantomJSについては –

1

私の典型的な設定は、クローラーコードとjQueryの両方を注入するクロスオリジン特権を持つブラウザー拡張を使用することです。

もう一つは、Javascriptのクローラを取るJSと同一生成元ポリシーを回避する方法があります(幻の力を高め)phantomJSまたはcasperJSなどのヘッドレスブラウザ

+0

+1。 –

1

を使用することです。私は友人や友人の友達からのFacebookプロフィールの情報を収集し、性別、現在の場所、年齢、武道の状態(あなたは私のドリフトを捕まえる)で結果をフィルタリングすることを許可したFacebookのクローラを書いた。それは簡単だった。私はちょうどコンソールからそれを走らせた。こうすることで、あなたのスクリプトは現在のドメインでリクエストを行うための権限を取得します。ブックマークレットを作成してブックマークからスクリプトを実行することもできます。

もう1つの方法は、PHPプロキシを提供することです。あなたのスクリプトは現在のドメイン上のプロキシにアクセスし、PHPを使用して別のクライアントにファイルをリクエストします。それらに慎重にしてください。あなたが慎重でない場合、これらは第三者によってハイジャックされ、公共の代理人として使用される可能性があります。私は:-)

1

を行ったよう

幸運は、多分あなたはプロセスで友人や2を作るこれは何が必要ですhttp://zugravu.com/products/web-crawler-spider-scraping-javascript-regular-expression-nodejs-mongodb 彼らはNodeJSを使用し、GUI

+2

あなたの答えにあなたのリンクからいくつかの重要な点を引用してみてください。そうすれば、サイトがダウンしたり、コンテンツが適切なリダイレクトなしに別のURLに移動したりしても、その答えが役立ちます。 – ydaetskcoR

2

などのMongoDBとExtJSの私たちは、クロールできヘッドレスWebkitの助けを借りてサーバ側からJavascriptを使用してページ。クロールのために、私たちはPhantomJS、CasperJSのようなライブラリはほとんどありません。また、PhantomJSにNightmare JSという新しいラッパーがあり、作業が楽になります。

0

はい、それはnodeJSにおけるNPM(サードパーティのモジュールを扱うパッケージマネージャ)

  • NodeJSで使用PhantomJS(サードパーティのモジュールがあり

    1. 使用NODEJS(そのサーバサイドJS)
    2. 可能ですウェブサイトをクロールできるのはPhantomJSです)
  • 0

    FirefoxのGreasemonkeyの拡張機能を使用するクライアント側のアプローチがあります。 Greasemonkeyでは、指定したURLを開くたびに実行されるスクリプトを作成することができます。ここ

    例:

    あなたはこれらのようなURLがある場合:

    http://www.example.com/products/pages/1

    http://www.example.com/products/pages/2

    を、あなたは(これを実行する製品のリストを含むすべてのページを開くには、このようなものを使用することができます手動)

    var j = 0; 
    for(var i=1;i<5;i++) 
    { 
        setTimeout(function(){ 
        j = j + 1; 
        window.open('http://www.example.com/products/pages/ + j, '_blank'); 
    
    }, 15000 * i); 
    

    }

    次に、製品リストページごとに新しいウィンドウですべての製品を開くスクリプトを作成し、このURLをGreasemonkeyに含めることができます。

    http://www.example.com/products/pages/ *その後、

    とデータを抽出し、その上のデータと密接なウィンドウを渡してWebサービスを呼び出すとする各商品ページのスクリプト。

    0

    githubでjavascriptクローラーの例を作成しました。

    イベント駆動型で、すべてのリソース(つまり、URL)を格納するためにメモリ内のキューを使用します。

    どのようにここで私はちょうどあなたのjavascriptのクローラーの2コア方法を示すよあなたノード環境で

    var Crawler = require('../lib/crawler') 
    var crawler = new Crawler('http://www.someUrl.com'); 
    
    // crawler.maxDepth = 4; 
    // crawler.crawlInterval = 10; 
    // crawler.maxListenerCurrency = 10; 
    // crawler.redisQueue = true; 
    crawler.start(); 
    

    を使用します。

    Crawler.prototype.run = function() { 
        var crawler = this; 
        process.nextTick(() => { 
        //the run loop 
        crawler.crawlerIntervalId = setInterval(() => { 
    
         crawler.crawl(); 
    
        }, crawler.crawlInterval); 
        //kick off first one 
        crawler.crawl(); 
        }); 
    
        crawler.running = true; 
        crawler.emit('start'); 
    } 
    
    
    Crawler.prototype.crawl = function() { 
        var crawler = this; 
    
        if (crawler._openRequests >= crawler.maxListenerCurrency) return; 
    
    
        //go get the item 
        crawler.queue.oldestUnfetchedItem((err, queueItem, index) => { 
        if (queueItem) { 
         //got the item start the fetch 
         crawler.fetchQueueItem(queueItem, index); 
        } else if (crawler._openRequests === 0) { 
         crawler.queue.complete((err, completeCount) => { 
         if (err) 
          throw err; 
         crawler.queue.getLength((err, length) => { 
          if (err) 
          throw err; 
          if (length === completeCount) { 
          //no open Request, no unfetcheditem stop the crawler 
          crawler.emit("complete", completeCount); 
          clearInterval(crawler.crawlerIntervalId); 
          crawler.running = false; 
          } 
         }); 
         }); 
        } 
    
        }); 
    }; 
    

    ここにgithubのリンクhttps://github.com/bfwg/node-tinycrawlerがあります。 これは、1000行のコードで書かれたjavascript Webクローラーです。 これは正しい軌道に乗るはずです。

    0

    Google's Chrome team has released puppeteer(2017年8月)、ヘッドレスと非ヘッドレスの両方のChrome(ヘッドレスChromeの利用可能なsince 59)の高レベルAPIを提供するノードライブラリ。

    これはChromiumの埋め込みバージョンを使用しているため、そのままの状態で動作することが保証されています。あなたが特定のChromeバージョンを使用する場合は、パラメータとして実行可能ファイルのパスと人形遣いを起動して行うことができ、例えば:

    const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'}); 
    

    Webページに移動し、そこからスクリーンショットを撮るの例が示しシンプルです(GitHubページから取得):

    const puppeteer = require('puppeteer'); 
    
    (async() => { 
        const browser = await puppeteer.launch(); 
        const page = await browser.newPage(); 
        await page.goto('https://example.com'); 
        await page.screenshot({path: 'example.png'}); 
    
        await browser.close(); 
    })(); 
    
    関連する問題