Как вы паук с PhantomJS - PullRequest
       38

Как вы паук с PhantomJS

15 голосов
/ 16 ноября 2011

Я пытаюсь использовать PhantomJS и паук на весь домен. Я хочу начать с корневого домена, например www.domain.com - получить все ссылки (a.href), а затем получить очередь для извлечения каждой новой ссылки и добавления новых ссылок в очередь, если они не были просканированы или находятся в очереди.

Идеи, Помогите?

Заранее спасибо!

Ответы [ 3 ]

20 голосов
/ 07 декабря 2011

Возможно, вас заинтересует Pjscrape (заявление об отказе: это мой проект), библиотека с открытым исходным кодом, созданная на основе PhantomJS.Он имеет встроенную поддержку паутинных страниц и извлечения информации с каждой из них по мере продвижения.Вы можете сделать паук всего сайта, просматривая каждую ссылку, с помощью короткого скрипта, подобного следующему:

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();
    }
});

По умолчанию это пропустит страницы, на которых уже есть ссылки, и будет следовать только по ссылкам в текущем домене, хотя они могут обаизменить в ваших настройках.

5 голосов
/ 23 мая 2015

Это старый вопрос, но, чтобы его обновить, удивительный современный ответ: http://www.nightmarejs.org/ (github: https://github.com/segmentio/nightmare)

Цитируя убедительный пример со своей домашней страницы:

ФАНТОМЫ СЫРЬЯ:

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 голосов
/ 17 ноября 2011

Сначала выберите все привязки на странице индекса и составьте список значений href.Вы можете сделать это либо с помощью селектора документов PhantomJS, либо с помощью селекторов jQuery.Затем для каждой страницы делайте то же самое, пока на странице больше не будет никаких новых ссылок.У вас должен быть основной список всех ссылок и список ссылок для каждой страницы, чтобы можно было определить, была ли ссылка уже обработана.Вы можете думать о веб-ползании как о дереве.Корневой узел дерева - это страница индекса, а дочерние узлы - это страницы, связанные со страницей индекса.Каждый дочерний узел может иметь одного или нескольких дочерних узлов в зависимости от ссылок, содержащихся на дочерних страницах.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...