2017-02-28 5 views
0

"Yelp.com"からのクロールのためにcheerioとnightmareのノードパッケージを使用しています。私はYelp.comからデータを取得しています。 しかし、yelpが私のIPをブロックしました。 いずれかはここでは、事前に私たちのIPをブロックせずにyelp.comからデータをクロールする方法

を溶液またはsuggestions.Thanksを提供することができますしてくださいすべての要求があるように思われる同じサーバーIPアドレスから生成されているので、私のコード

var Nightmare = require('nightmare'); 
var fs  = require('fs'); 
var http  = require('http'); 
var cheerio = require('cheerio'); 
var request = require('request'); 

function yelpmenuitemsscrap(url) 
{ 
    // console.log(url); 

var menuitems = new Nightmare(); 

menuitems.goto(url); 
menuitems.wait(); 

menuitems.evaluate(function() { 
    var objs = []; 
    $('div.menu-sections div.media-block.menu- 
    item').each(function(index){ 

     objs.push($(this).find('div.media-story h4').text().trim()); 

    }); 
    return objs; 
    },function (html) {}); 
    menuitems.run(function(err, nightmare) { 
    if (err) 
    { 
     return console.log(err); 
    } 
    else 
    { 
     console.log(nightmare); 
    }; 


    }); 
} 

答えて

0

IPブロックが行われていますサーバーのハッキング攻撃。このような要件では、異なるIPアドレスからアプリケーションにアクセスしているクライアントからデータクロールを実行する必要があります。これは異なるIPアドレスからのトラフィックを生成し、Yelpはそれをブロックしません。

もう1つの選択肢は、特定のIPアドレスをブロックしないように、すべての異なるサーバーからの要求をランダムに生成する複数のHTTPプロキシサーバーを使用することです。

別のオプションは、使用しておよびAPI気にしない場合、あなたは素敵なラッパーgimmeproxy-requestを持ってhttps://gimmeproxy.comを試すことができますhttp://www.screen-scraper.com

+0

プロキシサーバを作成し、要件のためにオンラインにそれらを使用するために利用できる市販のソフトウェアツールオフがあります。 「ソフトウェアプロキシサーバ」でGoogle検索を行うと、あなたの要件に合ったものになります。 –

+0

私は、複数のプロキシサーバを作成するために幾分試しました。しかし、私は得られませんでした。プロキシサーバーとその使用法を作成するためのサンプルコードを教えてください。 – siva

+0

あなたの提案をありがとう – siva

0

のようなものを使用することです。

GimmeProxyから自動的にプロキシを取得し、失敗した場合に別のプロキシ経由でリクエストを再ルーティングします。

このラッパーでリクエストを作成する方法例:

const setup = require('gimmeproxy-request').setup; 
 
const request = require('gimmeproxy-request').request; 
 
    
 
setup({ 
 
    api_key: 'your api key', 
 
    query: 'get=true&cookies=true&country=US&supportsHttps=true&maxCheckPeriod=1800&minSpeed=10', // additional gimmeproxy query parameters 
 
    retries: 5, // max retries before fail 
 
    test: (body, response) => body.indexOf('captcha') === -1 && response.statusCode === 200 // test function 
 
}); 
 
    
 
request('https://example.com', { 
 
    timeout: 10000 // additional request parameters, see https://github.com/request/request 
 
}, 
 
function(err, res, body) { 
 
    console.log('err', err) 
 
    console.log('res', res) 
 
    console.log('body', body) 
 
    process.exit() 
 
});

関連する問題