используйте node.js для очистки веб-сайта в Windows - PullRequest
2 голосов
/ 18 октября 2011

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

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

Все еще не уходи ...

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

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

Приветствие.

Ответы [ 4 ]

2 голосов
/ 25 октября 2011

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

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

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

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

1 голос
/ 18 октября 2011

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

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

0 голосов
/ 31 марта 2013

Я только что играл с модулем 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());
  });

});
0 голосов
/ 18 октября 2011

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

...