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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> парсинг xml.yandex.ru, yandex, xml 
:(
    Опции темы
Paul56
Дата 1.12.2009, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У сервиса XML.Yandex.ru есть отличный инструмент для получения результатов в виде XML
Но есть ограничение на его использования. 
Для использования необходимо:

1. Залогиниться
2. зарегистрировать IP с которого будут идти запросы.
3. в сутки разрешено не больше 1000 запросов.

Возникает резонный вопрос, если нужно больше 1000 то как быть ?
Уважаемые коллеги, поделитесь своим опытом в данном направлений.
PM ICQ   Вверх
Pfailed
Дата 2.12.2009, 09:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Мы просто докупили десяток ip на наш сервер.


--------------------
PM MAIL   Вверх
Paul56
Дата 4.12.2009, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Попробую представить быстрое решение.

1. Залогиниться получилось
Споткнулся на втором при регистрации ip адреса:

Ответ приходит 403

Код

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common;
use HTTP::Cookies;
use LWP;

my $ua = LWP::UserAgent->new;
my $cookie_c = HTTP::Cookies -> new (file => 'lwp_cookies.dat',autosave => 1,);
$ua ->cookie_jar($cookie_c);

my ($url,$response);

$url = 'http://passport.yandex.ru/passport?mode=auth';

$response=$ua->request(POST $url,

        [
         login => "Ваш логин",
         passwd => "Ваш пароль",
        ]);
    
    my $ip = 'Ваш ip';
    $url = 'http://xml.yandex.ru/ip_set.xml?ip='.$ip.'&submit=%C7%E0%EF%EE%EC%ED%E8%F2%FC+%3E';
    my $req = HTTP::Request -> new ( GET => $url);
    $req -> content_type ('application/xml');
    $response = $ua -> request ($req);
    print $response -> content;


Ткните носом, что не так делаю ?
PM ICQ   Вверх
Itsys
Дата 5.12.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Цитата(Paul56 @  4.12.2009,  23:02 Найти цитируемый пост)
Ткните носом, что не так делаю

Скорее всего не учитываете куки, которые передаются с ответом от сервера, а потом не включаете их в запрос.
PM MAIL WWW Skype   Вверх
Pfailed
Дата 5.12.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



 $req -> content_type ('application/xml');  -  не нужно


--------------------
PM MAIL   Вверх
Logo
Дата 5.12.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

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



Залогинится и прописать ip нужно только один раз, это можно вручную сделать, тем более там все равно капча, вроде.
PM MAIL   Вверх
Paul56
Дата 6.12.2009, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Появился определённый прогресс:

1. Теперь скрипт логинится
2. Регистрирует ip
3. Делает XML запрос
4. Пишет результат в файл.
----------
Может кто то подскажет как лучше построить смену ip адреса при условии если за сутки исчерпан лимит запросов на Яше.

Код

#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common;
use HTTP::Cookies;
use LWP;

my $ua = LWP::UserAgent->new;
my $cookie_c = HTTP::Cookies -> new (file => 'lwp_cookies.dat',autosave => 1);
$ua ->cookie_jar($cookie_c);
my ($url,$response);
$url = 'http://passport.yandex.ru/passport?mode=auth';
$response=$ua->request(POST $url,
        [
         login => "Ваш логин",
         passwd => "пароль",
        ]);

$cookie_c->extract_cookies($response);
$cookie_c->save('lwp_cookies.dat');
my $ip= '195.211.28.2';   #ip
my $domen = 'http://xml.yandex.ru/ip_set.xml?ip='.$ip;
my $hdrs=HTTP::Headers->new('Accept'=>'text/plain','UserAgent'=>'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');

my $reqG=HTTP::Request->new('GET',$domen,$hdrs);

$cookie_c->add_cookie_header($reqG);

$response=$ua->request($reqG);

my $doc = <<DOC;
<?xml version='1.0' encoding='windows-1251'?>
<request>
    <query>Распарсить Яшу</query>
    <page>0</page>
    <maxpassages>0</maxpassages>
    <groupings>
        <groupby attr='d' mode='deep' groups-on-page='10' docs-in-group='1' curcateg='-1'/>
    </groupings>
</request>
DOC

my $req = HTTP::Request -> new ( POST => 'http://xmlsearch.yandex.ru/cgi-bin/xmlsearch.pl');
   $req -> content_type ('application/xml');
   $req -> content ("$doc");
   $response = $ua -> request ($req);

open LOG , ">wegothim.htm";
print LOG $response -> content; 
close(LOG);


PM ICQ   Вверх
Itsys
Дата 6.12.2009, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Цитата(Paul56 @  6.12.2009,  01:40 Найти цитируемый пост)
Может кто то подскажет как лучше построить смену ip адреса при условии если за сутки исчерпан лимит запросов на Яше.

1. Для того, чтобы "подстроить" надо знать есть ли они в наличии?
2. Если есть, то на какую карту подключены
3. Научиться работать с маршрутизацией
4. Лучше настраивать не по моменту "исчерпания лимита", а по очереди посылать запросы с каждого ip.

ЗЫ На сайте есть готовые примеры на perl (как подключиться, получить данные)...
PM MAIL WWW Skype   Вверх
Paul56
Дата 6.12.2009, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Itsys @ 6.12.2009,  10:45)
1. Для того, чтобы "подстроить" надо знать есть ли они в наличии?
2. Если есть, то на какую карту подключены
3. Научиться работать с маршрутизацией
4. Лучше настраивать не по моменту "исчерпания лимита", а по очереди посылать запросы с каждого ip.

ЗЫ На сайте есть готовые примеры на perl (как подключиться, получить данные)...

Да Вы совершенно правы, на сайте есть примеры.
В моём примере часть кода позаимствована именно оттуда.
Но там примеры с одного ip адреса.

Не совсем понятно для чего делать запросы с разных ip адресов. С этого сервиса никто банить не будет, поскольку есть просто лимит 1000 запросов.
Может я что то не до понял ?


PM ICQ   Вверх
Itsys
Дата 6.12.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

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



Для того, чтобы делать запросы с разных ip надо либо подключить их себе, т.е. заказать у провайдера либо делать запросы через прокси...
PM MAIL WWW Skype   Вверх
Paul56
Дата 6.12.2009, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну вот хотелось бы узнать как их подключать (ip). То что их заказать нужно у прова это понятно.
Есть примерчики, что то гугл не привел к результатам.
PM ICQ   Вверх
Pfailed
Дата 6.12.2009, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

Репутация: 2
Всего: 39



Куда подключить?
К LWP так: @LWP::Protocol::http::EXTRA_SOCK_OPTS = (LocalAddr => $ip);



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


Шустрый
*


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

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



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


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

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


 




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


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

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