Ответ 1
Лично я использую Node IO для очистки некоторых веб-сайтов. https://github.com/chriso/node.io
Подробнее о скребке можно найти в wiki!
Завершить Node.js noob, поэтому не судите меня...
У меня есть простое требование. Сканирование веб-сайта, поиск всех страниц продукта и сохранение некоторых данных на страницах продукта.
Проще говоря, тогда это сделано.
Глядя на образцы Node.js, я не могу найти что-то подобное.
Есть скребок запроса:
request({uri:'http://www.google.com'}, function (error, response, body) {
if (!error && response.statusCode == 200) {
var window = jsdom.jsdom(body).createWindow();
jsdom.jQueryify(window, 'path/to/jquery.js', function (window, jquery) {
// jQuery is now loaded on the jsdom window created from 'body'
jQuery('.someClass').each(function () { /* Your custom logic */ });
});
}
});
Но я не могу понять, как называть его сам, если он удаляет корневую страницу или заполняет массив или URL-адрес, который нужно очистить.
Тогда существует способ http-агента:
var agent = httpAgent.create('www.google.com', ['finance', 'news', 'images']);
agent.addListener('next', function (err, agent) {
var window = jsdom.jsdom(agent.body).createWindow();
jsdom.jQueryify(window, 'path/to/jquery.js', function (window, jquery) {
// jQuery is now loaded on the jsdom window created from 'agent.body'
jquery('.someClass').each(function () { /* Your Custom Logic */ });
agent.next();
});
});
agent.addListener('stop', function (agent) {
sys.puts('the agent has stopped');
});
agent.start();
Что берет массив местоположений, но опять же, как только вы начинаете его с массива, вы не можете добавлять к нему дополнительные места, чтобы просматривать все страницы продуктов.
И я не могу даже получить работу Apricot, по какой-то причине я получаю сообщение об ошибке.
Итак, как мне изменить любой из приведенных выше примеров (или что-то еще не перечисленное выше), чтобы очистить сайт, найти все страницы продукта, найти там некоторые данные (пример jquery.someclass должен сделать трюк) и что сохранить это в db?
Спасибо!
Лично я использую Node IO для очистки некоторых веб-сайтов. https://github.com/chriso/node.io
Подробнее о скребке можно найти в wiki!
У меня был неплохой успех, обход и соскабливание с помощью Casperjs. Это довольно красивая библиотека, построенная поверх Phantomjs. Мне это нравится, потому что это довольно лаконично. Обратные вызовы могут быть выполнены как foo.then(), которые очень просто понять, и я даже могу использовать jQuery, поскольку Phantomjs является реализацией webkit. Например, следующее будет создавать экземпляр Каспера и нажимать все ссылки на странице архива на массив под названием "ссылки".
var casper = require("casper").create();
var numberOfLinks = 0;
var currentLink = 0;
var links = [];
var buildPage, capture, selectLink, grabContent, writeContent;
casper.start("http://www.yoursitehere.com/page_to/scrape/", function() {
numberOfLinks = this.evaluate(function() {
return __utils__.findAll('.nav-selector a').length;
});
this.echo(numberOfLinks + " items found");
// cause jquery makes it easier
casper.page.injectJs('/PATH/TO/jquery.js');
});
// Capture links
capture = function() {
links = this.evaluate(function() {
var link = [];
jQuery('.nav-selector a').each(function() {
link.push($(this).attr('href'));
});
return link;
});
this.then(selectLink);
};
Затем вы можете использовать node fs (или что-то еще, что вам нужно, действительно), чтобы подталкивать ваши данные в XML, CSV или что угодно. Пример для соскабливания фотографий BBC был исключительно полезен, когда я построил свой скребок.
Это вид с 10 000 футов, что может сделать игрок. Он обладает очень мощным и широким API. Я выкапываю его, если вы не можете сказать:).
Мой полный пример очистки: https://gist.github.com/imjared/5201405.