Как вы занимаетесь 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 может иметь одного или нескольких детей в зависимости от ссылок, которые содержат дочерние страницы. Надеюсь, это поможет.