Как вы занимаетесь PhantomJS
Я пытаюсь использовать PhantomJS и паук всего домена. Я хочу начать с корневого домена, например. www.domain.com - потяните все ссылки (a.href), а затем запустите выборки новых ссылок и добавьте новые ссылки в очередь, если они не были сканированы или в que.
Идеи, помощь?
Спасибо заранее!
Ответы
Ответ 1
Вам может быть интересно проверить Pjscrape (отказ от ответственности: это мой проект), библиотека скремблирования с открытым исходным кодом, построенная поверх PhantomJS. Он имеет встроенную поддержку для разметки страниц и очистки информации от каждого по мере ее продвижения. Вы могли бы развернуть весь сайт, глядя на каждую привязку привязки, с коротким script следующим образом:
pjs.addSuite({
url: 'http://www.example.com/your_start_page.html',
moreUrls: function() {
// get all URLs from anchor links,
// restricted to the current domain by default
return _pjs.getAnchorUrls('a');
},
scraper: function() {
// scrapers can use jQuery
return $('h1').first().text();
}
});
По умолчанию это будет пропускать уже запущенные страницы и только следовать ссылкам в текущем домене, хотя они могут быть изменены в ваших настройках.
Ответ 2
Это старый вопрос, но для обновления удивительный современный ответ http://www.nightmarejs.org/ (github: https://github.com/segmentio/nightmare)
Цитата из убедительного примера на главной странице:
RAW PHANTOMJS:
phantom.create(function (ph) {
ph.createPage(function (page) {
page.open('http://yahoo.com', function (status) {
page.evaluate(function () {
var el =
document.querySelector('input[title="Search"]');
el.value = 'github nightmare';
}, function (result) {
page.evaluate(function () {
var el = document.querySelector('.searchsubmit');
var event = document.createEvent('MouseEvent');
event.initEvent('click', true, false);
el.dispatchEvent(event);
}, function (result) {
ph.exit();
});
});
});
});
});
С НОЧЬЮ:
new Nightmare()
.goto('http://yahoo.com')
.type('input[title="Search"]', 'github nightmare')
.click('.searchsubmit')
.run();
Ответ 3
Сначала выберите все привязки на индексной странице и создайте список значений href. Вы можете сделать это с помощью селектора документов PhantomJS или с помощью селекторов jQuery. Затем для каждой страницы делайте то же самое, пока страница больше не содержит никаких новых ссылок. У вас должен быть главный список всех ссылок и список ссылок для каждой страницы, чтобы определить, была ли ссылка уже обработана. Вы можете думать о веб-сканировании, как о дереве. Корень node дерева - это индексная страница, а дочерние узлы - страницы, связанные с индексной страницей. Каждый ребенок node может иметь одного или нескольких детей в зависимости от ссылок, которые содержат дочерние страницы. Надеюсь, это поможет.