| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > грабер аякс сайтов |
| Автор: burakov 20.4.2011, 16:41 |
| Добрый день, подскажите пожалуйста технологию грабинга сайтов на аякс (ну или ему подобных), если использую LWP::Simple метод get ($url), получаю в результате не содержимое, а сплошные java коды. Вопрос: при помощи perl такие сайты нельзя сграбить? (как пример 999.md) и Вопрос2 - чем все таки можно сграбить такие сайты. (Поведение броузера файрфокс (при просмотров фрагмента кода) навело на мысль что это как то можно сделать при помощи java (jscript)?) То есть нужно как то разобрать уже отработанное на клиента содержимое... Или же я чего принципиально НЕДОПОНИМАЮ? в какую сторону смотреть? Спасибо |
| Автор: Pfailed 20.4.2011, 16:55 |
| WWW::Mechanize::Firefox уже смотрели? |
| Автор: burakov 21.4.2011, 23:38 |
| Поставил модуль Смысл понятен. Все работает, но то ли они там на сайте чего дополнительно назащищали, то ли так и должно быть, короче $mech->save_content ($file); или $mech->content отрабатывают также как если бы я просмотрел исходный код страницы -итог js функции вместо текста, который на экране. а опытным путем я делал так выделял всю страницу и делал "Исходный код выделенного фрагмента" и тогда было все "ОК" - никаких функций - нормальная html страничка на окошке еще интересно так пишется: "исходный код DOM выделенного фрагмента" - что наводит на мысль, что это совсем не то, что получить исходный код страницы (который похоже просто с сервера тянется)! А как получить вот этот вот код DOM?? страничка для экспериментов кому интересно http://999.md/Board/All.aspx?catId=659 |
| Автор: Pfailed 22.4.2011, 08:13 |
Возможно так $mech->document->{body}->{innerHTML} |
| Автор: burakov 22.4.2011, 10:35 |
| Да, работает... Спасибо, очень помогло. а если все таки грабер должен крутится на хостинге. Там ведь файрфокс не запустишь. Тогда на java Нужно писать? Просто интересно, апи файрфокс - это ж своего рода обманка, приспособа. Может есть модуль какой на перл, который сэмулирует работу броузера и позволит выполниться java скриптам? посмотрел "java" на Cpan - есть модули, которые позволяет использовать java классы В перловой программе... Может я вообще чего не так спрашиваю...?? путаюсь в технологии... не могу отследить цепочку. Раньше было понятно - послал на сервер запрос - он тебе ответ. ответ разобрал и все. А сейчас он тебе ответ , а там jscript овый текст. Чем еще (кроме настоящего броузера) можно заставить его выполниться и дать нормальную страничку? Должны же уже придумать какой то объект для выполнения в нем java Скриптов? |
| Автор: Pfailed 22.4.2011, 11:51 |
| На обычном shared хостинге нет. А на dedicated/vps сервере пожалуйста, ставьте Xvfb вместо полноценного X сервера и запускайте firefox. Есть еще WWW::Scripter с JavaScript плагином, там насколько знаю браузер не нужен. |
| Автор: burakov 22.4.2011, 15:05 |
$content = $mech->document->{body}->{innerHTML} отдает контент в кодировке utf8 и потом print на это контенте ругается "wide character .........." Хотя и принтует (и в файл пишет если надо) . После записи и извлечения из файла - на нем уже нормально работает encode, а до перезаписи переменной в файл - ругается "wide character...' приходится лишний раз перезаписывать в файл (он при этом тоже ругается , но пишет), а потом читать из файла и делать encode. Как убрать эту ошибку в Tk я делал так $str = decode ('cp1251', $str); - помогало а здесь не прокатывает пробовал как положено $str = encode ('cp1251', decode ('utf8', $str)); тоже не прокатывает. |
| Автор: alezzz 22.4.2011, 18:08 |
| Сталкивался с проблемой "wide character ..........", посмотрите http://forum.vingrad.ru/forum/topic-327136/kw-encode-utf.html , может что-то поможет. |
| Автор: burakov 22.4.2011, 21:03 | ||
| Друзья, спасибо всем мне в данном случае помогло вот что привожу ссылку http://habrahabr.ru/blogs/perl/53578/ и мое решение - может кому поможет
|
| Автор: EcSYZ 24.4.2011, 15:28 |
| Тоже столкнулся с подобной проблемой недавно. Есть такая зверюшка, зовётся "phantomJS" - minimalistic headless WebKit-based with JavaScript API, или же просто webkit из консоли. Лично пока только в этом варианте вижу хоть какуюто возможность работы с сайтами, где всё на JS, хотя даже этот способ весьма медленный, накладный и геморойный, но по крайней мерее рабочий. |
| Автор: ming 28.4.2011, 05:19 | ||||
ваше решение уже вшито в модуль Encode
|