Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > парсер гугл


Автор: burakov 7.6.2012, 08:39
Добрый день.

поставили задачу написать парсер поисковой выдачи google.ru 
пытаюсь сделать это при помощи lwp
но вместо желаемого гугл отдает кучу jscript кода.

подскажите на перл возможно написать такой парсер?
и в какую сторону смотреть?

спасибо.

p.s.
может можно какому то модулю на вход подать эти скрипты, 
а на выходе получить результат выполнения этих скриптов?

или может быть как то можно LWP с поддержкой jscript собрать?
или какая то консольная утилита-броузер есть, которая бы на выходе отдавала отработку js скриптов?

технология firefox+mozrepl не подходит (все дожно работать в консоли).

Автор: EcSYZ 7.6.2012, 12:33
Гугл прекрасно парсится.
Не знаю зачем там JS, но если посмотрите ниже - найдёте собственно все результаты в html виде, который очень просто разобрать через dom-парсер.

Автор: burakov 7.6.2012, 13:15
ничего не понимаю

вот урл
http://www.google.ru/#hl=ru&newwindow=1&sclient=psy-ab&q=%D0%BA%D1%83%D1%80%D1%81+%D0%B5%D0%B2%D1%80%D0%BE&fp=1

файл который получился после отработки lwp
прилагаю


ничего похожего того, что есть на экране -- 
в файле найти не могу.


может как то не так ссылку в LWP подставляю (но если вставить ее в адресную строку броузера -- все нормально)

Автор: infarch 7.6.2012, 14:30
По запросу "http://www.google.com/search?q=euro+exchange+rate" получил вполне приличный результат.

Автор: EcSYZ 7.6.2012, 15:01
Кривой запрос и как следствие кривой результат - страница с одним полем для ввода запроса.
Конечно же там нету никаких результатов.
Кстати сразу предупрежу - гугл любит частенько предлагать ввести капчу, так что не стоит пытатся его парсить без привязки к сервису по разбору капчей.

https://github.com/ecsyz/WVS/blob/master/lib/WVS/SEP.pm - сусть думаю оттуда можно будет понять.

Автор: burakov 7.6.2012, 15:44
большое спасибо.

вот этот запрос
http://www.google.com/search?q=euro+exchange+rate
у меня нормально отработал (хоть увидел, что реально все в файле есть).
значит дело в запросе.
антикапчу подключу, спасибо за предупреждение.


Автор: GR0Mi 5.7.2012, 14:21
хм. у пеня на перле парсер хорошо работает. разве чтокапчу жрет и парсит только 100 страниц гугл больше не выдает нужно запрос менять

Автор: Lisssa 7.8.2012, 16:04
Цитата(GR0Mi @ 5.7.2012,  14:21)
хм. у пеня на перле парсер хорошо работает. разве чтокапчу жрет и парсит только 100 страниц гугл больше не выдает нужно запрос менять

Код

use LWP::UserAgent;
use HTTP::Request::Common;
my $ua = LWP::UserAgent->new;
$res=$ua->request(POST 'http://antigate.com/in.php',
       Content_Type => 'form-data',
       Content      => [ method => 'post',
                         key => 'кодкапчи',
                         file => ["pic.jpg"],
                       ]
);

$res->decoded_content=~/OK\|(.*)/;
$id=$1;
print "id:$id\n";
$res=$ua->get("http://antigate.com/res.php?key=кодкапчи&action=get&id=$id");
while($res->decoded_content=~/CAPCHA_NOT_READY/)
{
    print ".";
    sleep(3);
    $res=$ua->get("http://antigate.com/res.php?key=кодкапчи&action=get&id=$id");
}
$res->decoded_content=~/OK\|(.*)/;
$c=$1;
print $c;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)