используйте node.js для очистки веб-сайта в Windows

Попытка заставить jsdom (модуль node.js) работать на окнах. Продолжает жаловаться на то, что он не создан для моей версии узла.

Получил узел (та же версия, 0.5.9, из исходного кода), установленный на машине с Linux, и загрузил его узлом. затем я скопировал его на машину Windows (в node_modules)

Все равно не пройти...

Любые идеи? или другие рекомендации по разбору HTML, которые я получаю из ответа на запрос, который я делаю из узла?

Было бы неплохо использовать jquery через jsdom.

Ваше здоровье.


person Shh    schedule 18.10.2011    source источник


Ответы (4)


Мне жаль говорить, что для jsdom (>=0.2.3) в настоящее время требуется надстройка C++, которая плохо работает с окнами. Я думаю, что вам лучше всего попробовать установить [email protected] и обойти утечку памяти, вызванную выполнением javascript в контексте окна jsdom.

Обходные пути включают в себя:

  • создать новый процесс для каждого домена
  • повторно использовать окно и заменить DOM с помощью document.body.innerHTML = '..new markup..';

Намерение состоит в том, чтобы отойти от надстройки C++, но, к сожалению, в настоящее время это невозможно.

person tmpvar    schedule 24.10.2011

Если node.js не является обязательным, проверьте pjscrape от нашего коллеги по SO-ist @nrabinowitz. . Это проверено и доказано.

Кроме того, node-scraper кажется подходящим инструментом для вашей работы с 222 наблюдателями и 11 forks он также кажется довольно активным. Пример использования можно найти в readme или прямо здесь, на SO.

person vzwick    schedule 18.10.2011
comment
Хорошо, я проверил. Не идти. node-scraper требует контекста, та же ошибка - person Shh; 19.10.2011
comment
не могу установить контекстифай. он жалуется, что он не был создан для моей версии узла (0.5.9 в Windows). Поскольку в Windows нет node-waf, я попытался установить node 0.5.9 в Linux, загрузить contextify и собрать его, а затем перенести в папку node_modules в Windows, но он все еще жалуется. - person Shh; 19.10.2011

Я точно не знаю, что вы пытаетесь сделать, но у node.io есть парсинг framework, который может соответствовать всем требованиям.

person hross    schedule 18.10.2011
comment
Спасибо, это я тоже проверю. - person Shh; 19.10.2011
comment
Нет. Жалуется на отсутствие модуля, даже не сообщая мне, какой именно. - person Shh; 19.10.2011
comment
Если вы используете Windows, вам нужно просмотреть файл package.js и вручную загрузить модули, необходимые для разрешения зависимостей. Или вы можете попробовать экспериментальную версию npm для Windows и выполнить установку npm (ознакомьтесь с файлом readme) . - person hross; 19.10.2011
comment
ну, это зависит от jsdom, который был исходной проблемой. - person Shh; 20.10.2011

Я только что поигрался с модулем node.js Cheerio, и по сравнению с jsdom он:

  • Намного быстрее
  • Гораздо проще установить
  • Гораздо более устойчив к поврежденному HTML (по сравнению с jsdom)
  • И предоставляет большинство функций jQuery, которые вы могли бы использовать на стороне сервера.

http://matthewmueller.github.com/cheerio/


Пример парсинга:

var request = require('request'),
    cheerio = require('cheerio');

request('http://encosia.com', function(error, response, body) {

  // Hand the HTML response off to Cheerio and assign that to
  // a local $ variable to provide familiar jQuery syntax.
  var $ = cheerio.load(body);

  // Exactly the same code that we used in the browser before:
  $('h2').each(function() {
      console.log($(this).text());
  });

});
person Simon East    schedule 31.03.2013