@Pogran

Как спарсить этот сайт?

Интересуют страницу глав. типо вот такие readmanga.me/sheng_wang/vol1/7 readmanga.me/sheng_wang/vol1/7#page=2 и т.д. Пробовал через simple_html_dom но не парсило нормально, т.к там есть динамический контент, который грузится через время. Затем начал смотреть в сторону slimerjs, но он почему-то после первой страницы не хочет парсить следующие. К примеру на slimer вот такой код

var page = require('webpage').create();
// the urls to navigate to
var urls = [
    'http://phantomjs.org/',
    'https://twitter.com/sidanmor',
    'https://github.com/sidanmor',
    'http://readmanga.me/sheng_wang/vol1/7',
    'http://readmanga.me/sheng_wang/vol1/7#page=2',
    'http://readmanga.me/sheng_wang/vol1/7#page=3'
];

var i = 0;

// the recursion function
var genericCallback = function () {
    return function (status) {
        console.log("URL: " + urls[i]);
        console.log("Status: " + status);
        // exit if there was a problem with the navigation
        if (!status || status === 'fail') slimer.exit();

        i++;

        if (status === "success") {

            /*var images = page.evaluate(function() {
                var images = [];
                function getImgDimensions($i) {
                    return {
                        top : $i.offset().top,
                        left : $i.offset().left,
                        width : $i.width(),
                        height : $i.height()
                    }
                }
                var image = $("#fotocontext img");
                var img = getImgDimensions(image);
                images.push(img);

                return images;
            });

            images.forEach(function(imageObj, index, array){
                page.clipRect = imageObj;
                page.render('images/'+ i +'.png')
            });*/

            if (i < urls.length) {
                // navigate to the next url and the callback is this function (recursion)
                page.open(urls[i], genericCallback());
            } else {
                // try navigate to the next url (it is undefined because it is the last element) so the callback is exit
                page.open(urls[i], function () {
                    slimer.exit();
                });
            }
        }
    };
};

// start from the first url
page.open(urls[i], genericCallback());


после ссылки 'readmanga.me/sheng_wang/vol1/7', парсер не хочет работать

вот такая ошибка падает prntscr.com/dy2oja
  • Вопрос задан
  • 767 просмотров
Решения вопроса 1
art1z
@art1z
Программист-многостаночник в EffectiveSoft
Все работает как и должно.
С точки зрения браузера readmanga.me/sheng_wang/vol1/7 и readmanga.me/sheng_wang/vol1/7#page=2 - это один урл, якоря имеют смысл только в браузере.
А ошибка как раз и описана в комменте:
// try navigate to the next url (it is undefined because it is the last element) so the callback is exit
page.open(urls[i], function () {
slimer.exit();
});

сделай просто slimer.exit();

и еще обработчик page.onError не помешал бы
stackoverflow.com/questions/19459247/how-to-ignore...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы