Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LWP::UserAgent, + proxy-server 
V
    Опции темы
Bulat
Дата 7.8.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Занимаюсь "парсингом" сайтов. Юзаю ЛВП, разметку считываю через проксю, однако не всегда приходит нормально. У меня стоит проверка, если в ответе первая строка начинается с "HTTP 1.1 200 OK"(через регулярные выражения), то значит все пришло нормально и парсю разметку, если нет отправляю снова сдирать хтмл-разметку. Все что напарсил сохраняю в базе. И тут столкнулся с такой проблемой, что не всегда все что должно было распарситься есть в базе. Причем тестил несколько раз на одном и том же сайте, иной раз собирает все, иной раз нет, причем недобрать может по разному.

У самого пока есть две мысли, либо приходят битые пакеты, в которых есть начало ответа, но не полная или вообще отсутствует хтмл-разметка страницы(собственно поэтому ответ и проходит мою проверку на наличие строки "HTTP 1.1 200 OK"). Либо данной проверки не достаточно.

Кроме того мне как-то уже говорили что ЛВП еще тот модуль и слегка корявый.
Или может вся трабла на уровне прокси???




--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
ZeeLax
Дата 7.8.2007, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 4388
Регистрация: 20.8.2006
Где: Алма-Ата

Репутация: нет
Всего: 88



Цитата(Bulat @  7.8.2007,  23:10 Найти цитируемый пост)
приходят битые пакеты
Маловероятно. Попробуйте послушать сниффером пакеты, думаю, тогда виндее будет что и как.


--------------------
Utility is when you have one telephone, luxury is when you have two, opulence is when you have three — and paradise is when you have none.
— Doug Larson
PM MAIL WWW ICQ Skype Jabber   Вверх
nitr
Дата 7.8.2007, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Цитата(Bulat @  7.8.2007,  20:10 Найти цитируемый пост)
Кроме того мне как-то уже говорили что ЛВП еще тот модуль и слегка корявый.

В таком плане LWP некорявый smile и скорее всего имели ввиду - "недоработанны" smile (кстати свежая версия вышла)

Цитата(Bulat @  7.8.2007,  20:10 Найти цитируемый пост)
Или может вся трабла на уровне прокси???
Так проверьте smile цикл из 100... будет видно прокси или нет (отключив её)

Bulat, а как вы парсите ответ? smile Не проще ли,
Код

my $ua = LWP::UserAgent->new;
my $response = $ua->get('...');
if ($response and $response->is_success) {
    print $response->content;
} else {
    print $response->status_line;
}



--------------------
PM   Вверх
Bulat
Дата 8.8.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Цитата(ZeeLax @  7.8.2007,  22:17 Найти цитируемый пост)
послушать сниффером пакеты

можно поподробнее, я в этом пока мало разбираюсь

Цитата(nitr @  7.8.2007,  22:55 Найти цитируемый пост)
Так проверьте  цикл из 100... будет видно прокси или нет (отключив её)

скрипт без прокси работает - гуд, в начале писал и тестил на своем компе, без прокси все собирается. Когда уже перекинул все на сервак, тут все и началось, то собирает, то нет.

Вчера вечером кода при себе не было, поэтому по памяти не выкладывал, вообще прописал все так: 
Код

sub GetDataFromProxy {
    my ($url) = @_;

    my $doc;

    use LWP::UserAgent;

    eval {

        my $getFlag = "true";

        while ($getFlag eq "true") {

            my @proxyList = GetProxyArray();

            if (@proxyList) {
                my $ua = LWP::UserAgent -> new;
                my $flag = "false";
                my $proxyIndex = 0;

                while (($flag eq "false") && ($proxyIndex <= $#proxyList)) {
                    my $prox = "http://".$proxyList[$proxyIndex];

                    $ua -> agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
                    $ua -> proxy(['http', 'ftp'] => $prox);
                    my $req = HTTP::Request -> new(GET => $url);

                    $doc = $ua -> request($req) -> as_string;

                    if ($doc =~ m/^HTTP\/1\.\d 200 OK/) {
                        $flag = "true";
                    }

                    $proxyIndex++;
                }

                if ($flag eq "true") {
                    $getFlag = "false";
                }
            } else {
                sleep(60);
            }
        }
    };

....
}




nitr, ок, попробую так как вы написали smile

Это сообщение отредактировал(а) Bulat - 8.8.2007, 10:18


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
shamber
Дата 8.8.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: 17
Всего: 18



послушать сниффером пакеты очевидно у вас врядли получиться, так как я понял, вы не на своем серваке это делаете.
PM MAIL Jabber   Вверх
Bulat
Дата 8.8.2007, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



nitr, ух...

во-первых чего-то ругается на is_succes
во-вторых мой код совсем коряво работает

вот часть логов

Код

<TITLE>Error</TITLE>
<BODY>
<H1>Error</H1>
FW-1 at feuerwand: Unknown WWW server.</BODY>^M
" (perhaps you forgot to load "HTTP/1.0 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 90
Content-Type: text/html
Client-Date: Wed, 08 Aug 2007 07:40:43 GMT
Client-Peer: 200.47.151.10:1025
Client-Response-Num: 1
Title: Error

<TITLE>Error</TITLE>
<BODY>
<H1>Error</H1>
FW-1 at feuerwand: Unknown WWW server.</BODY>^M
"?) at ./parsers.pm line 53.
Wed Aug  8 11:40:43 2007: Can't locate object method "is_succes" via package "HTTP/1.0 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 90
Content-Type: text/html
Client-Date: Wed, 08 Aug 2007 07:40:43 GMT
Client-Peer: 200.47.151.10:1025
Client-Response-Num: 1
Title: Error

<TITLE>Error</TITLE>
<BODY>
<H1>Error</H1>
FW-1 at feuerwand: Unknown WWW server.</BODY>^M
" (perhaps you forgot to load "HTTP/1.0 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 90
Content-Type: text/html
Client-Date: Wed, 08 Aug 2007 07:40:43 GMT
Client-Peer: 200.47.151.10:1025
Client-Response-Num: 1
Title: Error

<TITLE>Error</TITLE>
<BODY>
<H1>Error</H1>
FW-1 at feuerwand: Unknown WWW server.</BODY>^M
"?) at ./parsers.pm line 53.


вот то как переправил, возможно по моему коду нужно более специфично прописать, то что вы дали

Код

                while (($flag eq "false") && ($proxyIndex <= $#proxyList)) {
                    my $prox = "http://".$proxyList[$proxyIndex];

                    $ua -> agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");
                    $ua -> proxy(['http', 'ftp'] => $prox);
                    my $req = HTTP::Request -> new(GET => $url);

                    $doc = $ua -> request($req) -> as_string;

#my $ua = LWP::UserAgent->new;
#my $response = $ua->get('...');
#if ($response and $response->is_success) {
#    print $response->content;
#    } else {
#        print $response->status_line;
#       }

                    if ($doc and $doc -> is_succes()) { #53 строка
                        $flag = "true";
                    }

                    #if ($doc =~ m/^HTTP\/1\.\d 200 OK/) {
                    #    $flag = "true";
                    #}

                    $proxyIndex++;
                }



 smile

Добавлено через 52 секунды
shamber, был бы у мну свой сервак smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
nitr
Дата 8.8.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Цитата(Bulat @  8.8.2007,  10:59 Найти цитируемый пост)
 is_succes

а я написал вроде is_success ;)


--------------------
PM   Вверх
Bulat
Дата 9.8.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



nitr, мля............ smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Bulat
Дата 9.8.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Однако, такая проверка, пропускает подобное
Код

500 Server closed connection without sending any data back


 и

Код

500 Chunked must be last Transfer-Encoding 'deflate'


А так вроде все гуд, вот на этот код проверку наложить, надеюсь собираться будет smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Bulat
Дата 14.8.2007, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



Приходится вернуться к аднной теме, пытался наложить проверку на вышеописанный код - 500, через регулярные выражения

последний вариант 
Код

$doc !~ m/^[\n\s\r]*?500.*/


но проверял и таким образом
Код

$doc -> content !~ m/^500.*/


и таким
Код

$doc -> status_line !~ m/^500.*/


или, я чего-то не допонимаю.... нид хелп, просто встрял на этом месте


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Bulat
Дата 14.8.2007, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: 5
Всего: 57



вопрос решен  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.