Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Парсинг страницы с редиректом (PHP)

Ответить
Настройки темы
[решено] Парсинг страницы с редиректом (PHP)

Новый участник


Сообщения: 44
Благодарности: 7

Профиль | Отправить PM | Цитировать


Изменения
Автор: Luzuk
Дата: 15-03-2012
Здравствуйте.
Мне тут дали такое задание:
С сайта elibrary.ru нужно сдёрнуть список с фамилиями сотрудников универа, а затем сделать по ним поиск на сайте самого вуза и в итоге собрать по ним суммарную инфу.

Все конечно можно вручную сделать, всего то около 100 человек
Но что-то, меня, как немного ленивому айтишнику, такая перспектива не устраивает. С учетом, что собранную статистику после еще обновлять скорей всего придется и думаю не раз. По этому и решил сразу написать скрипт по автоматизации этого дела.

Парсинг самих страниц и поиск по найденному уже почти сделал.
Но парсинг первого сайта пока работает только по уже скаченным вручную страницам, заставить его самого их качать ни как не получается.

Пробовал получить страницу через curl
PHP код: Выделить весь код

// 1. инициализация

$ch curl_init();
// 2. указываем параметры, включая url
curl_setopt($chCURLOPT_URL"http://elibrary.ru/defaultx.asp");
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_PROXY'х.х.х.х:3128');
curl_setopt($chCURLOPT_PROXYUSERPWD,'ххххх:ххххх');
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_UNRESTRICTED_AUTH1);
//curl_setopt($ch, CURLOPT_COOKIESESSION, 1);
// 3. получаем HTML в качестве результата
echo curl_exec($ch); 

А в результате получаю:
Цитата:
cURL Error: Maximum (20) redirects followed
Как я понял это из-за того что страница пытается получить сессию, и редиректиться из-за этого все время между главной страницей и страницей старта сессии.


Вообще данные которые мне нужны находятся тут...
А вот как их от туда вытащить не знаю, с учетом, что на страницу методом POST еще нужно параметры передавать.



Буду очень признателен, за оказанную помощь

Отправлено: 18:48, 15-03-2012

 

Новый участник


Сообщения: 44
Благодарности: 7

Профиль | Отправить PM | Цитировать


Сам нашел причину.

Кукис нужно сохранить
PHP код: Выделить весь код

curl_setopt ($chCURLOPT_COOKIEJAR'cookie.txt'); 


Но, все равно не получилось, что хотел.

Сниффером перехватил запрос, который передается при нажатии кнопки Поиска. И попробовал его также передать... но толку ни какого.

PHP код: Выделить весь код

// 1. инициализация
$ch curl_init();
// 2. указываем параметры, включая url
curl_setopt($chCURLOPT_URL"http://elibrary.ru/authors.asp");
curl_setopt($chCURLOPT_RETURNTRANSFER1);
//curl_setopt($ch, CURLOPT_PROXY, 'х.х.х.х:3128');
//curl_setopt($ch, CURLOPT_PROXYUSERPWD,'ххххх:ххххх'); 

curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_UNRESTRICTED_AUTH1);

curl_setopt ($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');
curl_setopt ($chCURLOPT_POST1);
curl_setopt ($chCURLOPT_POSTFIELDS'authors_all=&pagenum=&authorbox_name=&orgid=984&orgadminid=&surname=&countryid=&town=®ionid=&rubriccode=&orgname=%D0%92%D0%BB%D0%B0%D0%B4%D0%B8%D0%B2%D0%BE%D1%81%D1%82%D0%BE%D0%BA%D1%81%D0%BA%D0%B8%D0%B9+%D0%B3%D0%BE%D1%81%D');

curl_setopt ($chCURLOPT_COOKIEJAR'cookie.txt');
curl_setopt ($chCURLOPT_REFERER'http://elibrary.ru/authors.asp');
curl_setopt ($chCURLOPT_HTTPHEADER, array('Expect:'));
curl_setopt($chCURLOPT_HEADER1);
// 3. получаем HTML в качестве результата

$output curl_exec($ch); 

В результате, поля поиска не заполняются, и выводиться пустая форма...

Отправлено: 19:49, 15-03-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Deadooshka


Сообщения: 2517
Благодарности: 692

Профиль | Отправить PM | Цитировать


Да, там бесконечный редирект. Вроде бы если не шлются кукисы, или неправильные кукисы.
Цитата Luzuk:
//curl_setopt($ch, CURLOPT_COOKIESESSION, 1); »
CURLOPT_COOKIESESSION - начинает новую сессию, поэтому имхо нужно включить.

Сам пост-запрос можно отловить в браузере (каким-нть livehttpheaders в FF), или посмотреть хтмл формы (атрибуты name контролов)
см. CURLOPT_POST и CURLOPT_POSTFIELDS
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:54, 15-03-2012 | #3


Новый участник


Сообщения: 44
Благодарности: 7

Профиль | Отправить PM | Цитировать


Все заработало. Оказалось, что если указывать не верный идентификатор браузера, форма не возвращается.
указан был фаерфокс, а я тестил через хром и ИЕ6. Поставил USERAGENT Интернет Эксплорера 6го и в нем все заработало.
В итоге просто закоментил указание USERAGENT и все заработало в обоих браузерах.

Вот конечный вариант функции для пост запроса через прокси:
PHP код: Выделить весь код

function post_content ($url,$postdata) {
  
$uagent "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";

  
$ch curl_init$url );
  
curl_setopt($chCURLOPT_URL$url);
  
curl_setopt($chCURLOPT_RETURNTRANSFER1);
   
curl_setopt($chCURLOPT_PROXY'x.x.x.x:8080');
   
curl_setopt($chCURLOPT_PROXYUSERPWD,'xxx:xxx');
  
curl_setopt($chCURLOPT_HEADER0);
  
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
  
curl_setopt($chCURLOPT_ENCODING"");
//  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);
  
curl_setopt($chCURLOPT_TIMEOUT120);
  
curl_setopt($chCURLOPT_FAILONERROR1);
  
curl_setopt($chCURLOPT_AUTOREFERER1);
  
curl_setopt($chCURLOPT_POST1);
  
curl_setopt($chCURLOPT_POSTFIELDS$postdata);
  
curl_setopt($chCURLOPT_COOKIEJAR"d://coo.txt");
  
curl_setopt($chCURLOPT_COOKIEFILE,"d://coo.txt");

  
$content curl_exec$ch );
  
$err     curl_errno$ch );
  
$errmsg  curl_error$ch );
  
$header  curl_getinfo$ch );
  
curl_close$ch );

  
$header['errno']   = $err;
  
$header['errmsg']  = $errmsg;
  
$header['content'] = $content;
  return 
$header;
}

//(c) parsing-and-i.blogspot.com 


Отправлено: 18:06, 16-03-2012 | #4



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Парсинг страницы с редиректом (PHP)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
php способы получить данные со страницы в инете enikei Вебмастеру 2 13-10-2010 04:54
Нужна помощь с PHP редиректом blacks2 Вебмастеру 5 11-12-2009 21:50
[решено] Парсинг php файла Shym Вебмастеру 2 15-11-2009 02:30
[решено] подставлять значения в зависимости от открытой страницы PhP binders Вебмастеру 11 05-10-2009 00:53
Php разделение на страницы с картинками Maloy clickonline Вебмастеру 10 14-01-2005 23:08




 
Переход