Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP-парсер для Vsetv

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребят, доброго времени суток.
Мучу для себя парсер программы от все-тв.
Честно говоря интересует всего один канал вот по этой ссылке:
http://www.vsetv.com/schedule_channel_886_day_2016-11-29_nsc_1.html
Но парсить тот ХТМЛ-мусор, что есть на странице весьма муторно.
Хочется чистоты.
Есть замечательная ссылочка:
http://www.vsetv.com/schedule_printversion_withoutdesc.html
Но она работает только после посещения страницы указанной первой.
Собственно в этом проблема и состоит...
Как CURL-ом (именно им, т.к. нужно представиться браузером) сначала посетить одну страницу, а потом перейти на другую, с сохранением настроек?

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 18:36 28-11-2016
ManHunter



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Первую страницу загружаешь с  
curl_setopt($ch, CURLOPT_HEADER, true);
 
из полученного заголовка извлекаешь печеньки, в частности PHPSESSID, возможно, потребуется еще и cookietest=1
 
вторую страницу загружаешь с  
curl_setopt($ch, CURLOPT_COOKIE, 'PHPSESSID='.[переданная печенька]);
 
больше там ничего не используется.

Всего записей: 3091 | Зарегистр. 20-03-2004 | Отправлено: 18:50 28-11-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
из полученного заголовка извлекаешь печеньки, в частности PHPSESSID, возможно, потребуется еще и cookietest=1  

можно просто  

Код:
curl_setopt($curl_handle, CURLOPT_COOKIESESSION, true);
curl_setopt($curl_handle, CURLOPT_COOKIEJAR, '/path/file.txt');
curl_setopt($curl_handle, CURLOPT_COOKIEFILE, '/path/file.txt');

и все будет автоматом

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 21:25 28-11-2016
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Попытался сделать так:

Код:
 
    $url1 = "http://www.vsetv.com/login.php";
    $url2 = "http://www.vsetv.com/schedule_package_personal_day_".$dateurl."_nsc_1.html";
    $url3 = "http://www.vsetv.com/schedule_printversion_withoutdesc.html";
 
    $ch1 = curl_init();
    curl_setopt($ch1, CURLOPT_URL, $url1);
    curl_setopt($ch1, CURLOPT_VERBOSE, 1);
    curl_setopt($ch1, CURLOPT_POST, 1);
    curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch1, CURLOPT_POSTFIELDS,"inlogin=".$login."&inpassword=".$password);
    curl_setopt($ch1, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
    curl_setopt($ch1, CURLOPT_HEADER, 1);
    curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch1, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch1, CURLOPT_COOKIEJAR, "/tmp/vsetv.01.txt");
 
    $ch2 = curl_init();
    curl_setopt($ch2, CURLOPT_URL, $url2);
    curl_setopt($ch2, CURLOPT_REFERER, $url1);
    curl_setopt($ch2, CURLOPT_VERBOSE, 1);
    curl_setopt($ch2, CURLOPT_POST, 1);
    curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch2, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
    curl_setopt($ch2, CURLOPT_HEADER, 1);
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch2, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch2, CURLOPT_COOKIEFILE, "/tmp/vsetv.01.txt");
    curl_setopt($ch2, CURLOPT_COOKIEJAR, "/tmp/vsetv.02.txt");
 
    $ch3 = curl_init();
    curl_setopt($ch3, CURLOPT_URL, $url3);
    curl_setopt($ch3, CURLOPT_REFERER, $url2);
    curl_setopt($ch3, CURLOPT_VERBOSE, 1);
    curl_setopt($ch3, CURLOPT_POST, 1);
    curl_setopt($ch3, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch3, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
    curl_setopt($ch3, CURLOPT_HEADER, 1);
    curl_setopt($ch3, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch3, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch3, CURLOPT_COOKIEFILE, "/tmp/vsetv.02.txt");
 
 
    $src1 = curl_exec($ch1);
        if ($src1 === FALSE) {
            echo "cURL Error: " . curl_error($ch1);
        }
 
    $src2 = curl_exec($ch2);
        if ($src2 === FALSE) {
            echo "cURL Error: " . curl_error($ch2);
        }
 
    $src3 = curl_exec($ch3);
        if ($src3 === FALSE) {
            echo "cURL Error: " . curl_error($ch3);
        }
 
    $src = $src3;
    $src = iconv("cp1251", "utf-8", $src);
 
 

Ни фига не получилось... Разбираю $src, а там все по дефолту...

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 14:41 29-11-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Grafus

Цитата:
curl_setopt($ch2, CURLOPT_COOKIESESSION, true);  

вы бы прочитали, сначала, что это делает ) ну и файл для кук лучше использовать один, как и нет смысла везде делать POST (в зависимости от настроек скрипта или сервера это может и не сработать)

Код:
$ua =  "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4";
$file = '/path/cookie.txt';
 
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, $url1);
curl_setopt($ch1, CURLOPT_POST, 1);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch1, CURLOPT_POSTFIELDS, "inlogin=" . $login . "&inpassword=" . $password);
curl_setopt($ch1, CURLOPT_USERAGENT, $ua);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_COOKIESESSION, true);
curl_setopt($ch1, CURLOPT_COOKIEJAR, $file);
 
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $url2);
curl_setopt($ch2, CURLOPT_REFERER, $url1);
curl_setopt($ch2, CURLOPT_USERAGENT, $ua);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_COOKIEFILE, $file);
curl_setopt($ch2, CURLOPT_COOKIEJAR, $file);
 
$ch3 = curl_init();
curl_setopt($ch3, CURLOPT_URL, $url3);
curl_setopt($ch3, CURLOPT_REFERER, $url2);
curl_setopt($ch3, CURLOPT_USERAGENT, $ua);
curl_setopt($ch3, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch3, CURLOPT_COOKIEFILE, $file);

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 22:45 29-11-2016 | Исправлено: Mavrikii, 22:56 29-11-2016
Grafus



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
СПС. Так работает значительно шустрее. Но вот загрузка корректной страницы печати происходит со второго раза. Грешу на время формирования файла кук. Может есть возможность хранить куки в памяти? Так должно быть шустрее их формирование... И, по идее, тогда корректно должно будет прогружаться с первого раза?
 
Добавлено:
Плус всплыл неприятный баг.
$url2 сделан для отображения страницы печати за определенную дату. А этого не происходит. Все отображается только за текущую...

Всего записей: 389 | Зарегистр. 15-12-2004 | Отправлено: 09:57 30-11-2016
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Грешу на время формирования файла кук. Может есть возможность хранить куки в памяти? Так должно быть шустрее их формирование

создание файла медленнее запроса к серверу ?) не смешите меня )
 

Цитата:
Плус всплыл неприятный баг.  
$url2 сделан для отображения страницы печати за определенную дату.

я протестировал, все нормально. и заходит с первого раза и $url2 отображает нужную дату.

Всего записей: 15100 | Зарегистр. 20-09-2014 | Отправлено: 10:17 30-11-2016
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP-парсер для Vsetv


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru