我正在使用cheerio和nightmare的节点包从" Yelp.com"。我从Yelp.com检索数据。 但是yelp阻止了我的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 :(得分:0)
IP块已完成,因为所有请求都是从同一服务器IP地址生成的,这似乎是对服务器的黑客攻击。在此类要求中,应从正在从不同IP地址访问应用程序的客户端进行数据爬网。这将生成来自不同IP地址的流量,Yelp不会阻止它。
另一种选择是使用多个HTTP代理服务器,它们随机生成来自所有不同服务器的请求,以免阻止任何特定的IP地址。
另一种选择是使用http://www.screen-scraper.com
之类的东西答案 1 :(得分:0)
如果你不介意使用和api,你可以尝试https://gimmeproxy.com,它有很好的包装gimmeproxy-request。
它会自动从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()
});