2012-03-14 4 views
0

Я создаю скребок, который получает основные изображения (на основе Content-Length прямо сейчас) со страницы. Он проходит через все элементы <img> и делает запрос HEAD. Но некоторые страницы, особенно. мобильные, имеют изображения, вставленные после загрузки страницы. Любые идеи о том, как справиться с этим?Скребок страницы после загрузки JS DOM injection

Я пользуюсь node.js.

+0

Вы должны были бы запустить соответствующие JS на сервере, чтобы повторить то, что эти страницы делают. –

+0

@MarcB: Как запустить соответствующий JS на моем сервере? Есть ли библиотека или я сам писал бы это? Я использую [запрос] (https://github.com/mikeal/request) прямо сейчас. –

ответ

0

Я не могу быть уверен, что он решает вашу проблему, но вы можете изучить использование jsdom, так как он может извлекать и выполнять скрипты на странице и предоставляет DOM на сервере. Что-то вроде:

var request = require('request'), 
    jsdom = require('jsdom').jsdom; 

request(url, function(err, response, body) { 
    if(err) return console.error(err); 

    var doc = jsdom(body, null, { 
    FetchExternalResources: ['script', 'img'] 
    }); 
    var window = doc.createWindow(); 

    var images = doc.getElementsByTagName('img'); 
}); 
+0

jsdom имеет множество проблем. Это ломается очень часто, чтобы сказать по меньшей мере .. –

+0

Что я могу сказать, я просто пытаюсь помочь. Вышеупомянутое работает для меня, извлекает страницу, которая динамически добавляет теги «img». –

+0

Я уверен, что он работает и благодарит за это. Я использовал этот 'jsdom' раньше, и он использовал для разбивки многих сайтов с не идеальным HTML. Итак, для меня «jsdom» - это не вариант, извините! –

0

Используйте PhantomJS. Это «безглазый WebKit с JavaScript API». Подумайте об этом, как о целом браузере, которым вы можете управлять через JavaScript API. Поскольку это браузер, он полностью выполнит страницы, а затем вы сможете их очистить.

Это несколько аналогичный для Node.js, но на самом деле это полный браузер, в котором ваши сценарии имеют полный доступ к DOM страницы, на которую вы ее сбрасываете. Так что проще «очистить» страницу, используя доступ к DOM, используя что-то вроде jQuery, вместо того, чтобы просто обращаться к необработанному HTML.

Вот пример на DOM manipulation

+0

Это звучит интересно, но это может быть слишком много излишества. Но спасибо. :) –

Смежные вопросы