как обойти защиту от парсинга flv ссылок на тубах?

Тема в разделе "Тех. вопросы", создана пользователем mailagent, 17 янв 2011.

  1. mailagent

    mailagent Создатель

    Регистр.:
    23 ноя 2010
    Сообщения:
    14
    Симпатии:
    0
    вопрос к тем, кто парсит флв ссылку на видео с крупных западных тубов (порнхаб, редтуб) и грузит ее в свой плеер- какая у них используется защита и как вы ее обходите? например, если парсить с xvideos, как часто они меняют ссылки? по поводу обхода защиты я пока только один способ придумал- с помощью скрипта периодически сверять ссылку на флв (заходить на страницу с роликом и парсить ее). если она отличается на моем сайте и у них, то заливать себе новую ссылку. правда на практике пока не пробовал. интересно услышать ваши идеи по поводу защиты тубов и методов их обхода.
     
  2. ShaDeRzz

    ShaDeRzz

    Регистр.:
    16 окт 2007
    Сообщения:
    176
    Симпатии:
    65
    Я с редтуба парсю так:

    PHP:

    <?php
    set_time_limit
    (0);
    $pages 1#количество страниц парсинга

    function getID($pages) {
           global 
    $links;
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_URL"http://redtube.com/?page=$pages");
            
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"); 
            
    curl_setopt($chCURLOPT_REFERER'http://google.com');
            
    curl_setopt($chCURLOPT_COOKIEJAR'redtube'); 
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
    $res curl_exec($ch);
            
    preg_match_all('#redtube.com/(\d{5})#i',$res$links);
               
    }
    function 
    getPages($url) {
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_URL"http://$url");
            
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"); 
            
    curl_setopt($chCURLOPT_REFERER'http://redtube.com');
            
    curl_setopt($chCURLOPT_COOKIEJAR'redtube'); 
            
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
            
    $res curl_exec($ch);
    preg_match("#hashlink=(.*)\" \/>#i",$res$url_file);
                    
    $gg preg_replace("#%3A#"":"$url_file[1]);
                    
    $gg preg_replace("#%2F#""/"$gg);
                    
    $gg preg_replace("#%3D#""="$gg);
                    
    $gg preg_replace("#%3F#""?"$gg);
                    
    $gg preg_replace("#%26#""&"$gg);
                    @
    file_put_contents('parse_tube.txt'$gg "\r\n"FILE_APPEND);
    }
    for (
    $i=0$i<$pages$i++) { 
         
    getID($pages);
    foreach (
    $links[0] as $url
             
    getPages($url);
    }
    ?>

     
  3. mailagent

    mailagent Создатель

    Регистр.:
    23 ноя 2010
    Сообщения:
    14
    Симпатии:
    0
    спасибо за код, но парсер у меня тоже есть. я не программист, не совсем понял, что делает твой скрипт, но вроде флв ссылки не парсит.
    на другом форуме подсказали, что тубы также используют привязку по айпи. как ее можно обойти?
     
  4. satih

    satih

    Регистр.:
    19 сен 2008
    Сообщения:
    429
    Симпатии:
    710
    скрипт выше парсит прямые ссылки на флв видео. если нужно парсить сам ролик, в чем проблема, прямая ссылка есть.. в принципе чуть подправить его, будеть также тайтлы парсить и все что надо со страницы ролика.
    алгоритм такой:
    проходим заданое число страниц с тумбами, с каждой парсим линк на страницу второго уровня (страница ролика), и с этой страницы выдираем ссылку. кста насчет привязки туба по айпи, обойти легко можно, так как ролики зачем к себе на сервак скачивать? место, бендвич.. гораздо проще поставить линк на их ролик в свой плеер :) в итоге на твоем сайте играет порно ролик и ты не платишь не за траф, не за нагрузку сервака -> профит :)

    ShaDeRzz
    кучу preg_replace можно заменить наurldecodeплюс ты вроде выдираешь слишком много инфы, нужно от 'hashlink=' до '&embed', регулярка hashlink=([^&]+)
    PHP:
    preg_match("#hashlink=([^&]+)#i",$res$url_file);
     
    mailagent нравится это.
  5. mailagent

    mailagent Создатель

    Регистр.:
    23 ноя 2010
    Сообщения:
    14
    Симпатии:
    0

    ну это понятно, что ролики должны играться с их серверов. в этом-то вся и проблема- нужно постоянно их защиту от этого обходить. а в чем суть привязки по айпи? насколько я понял- это каждому посетителю (с уникальным айпи) формируется уникальная ссылка. как можно обойти эту защиту?
     
  6. satih

    satih

    Регистр.:
    19 сен 2008
    Сообщения:
    429
    Симпатии:
    710
    я думал защита по айпи имеется ввиду ограничение роликов на 1 айпи, поэтому предложил вставлять их в плеер, потому что так ролик тянет юзер. раньше когда писал похожий парсер, такого небыло, да и это легко проверить, зайти на туб, посмотреть линк на ролик, стереть куки, поменять айпи, зайти снова, посмотреть на линк снова.. проверю у себя для интереса. посмотрел заодно туба соседа, pornhub, тоже дают линки на странице, сделаю может под него тоже по быстрому скрипт
    ---------- Post added at 16:47 ---------- Previous post was at 14:48 ----------
    сделал свою версию скрипта ShaDeRzz, проверил насчет айпи, ложь, ролики парсятся после смены айпи.. короче кому интересно, выкладываю скрипт, если что, пишите. урлы на ролики складываются в папку с скриптом. сами ролики если и скачивать, то уж точно не пхп.

    PHP:
    <?php
    /*
    парсит прямые линки на flv ролики с redtube.
    паук проходит по страницам редтуба, http://www.redtube.com/?page=1 и т.д. с них парсит линки страниц роликов, http://www.redtube.com/85874, с которых парсит прямые линки на flv ролики, кои складывает в текстовой файл, redtube_links.txt
    */

    /*
    ----    конфиг
    */
    //количество страниц первого уровня парсинга, на каждой 20 роликов для парсинга
    $pages 2;
    // пауза в секундах между парсингом страницы с роликом
    $pause_flv 3;
    /*
    ----    конец конфига, дальше можно не трогать :)
    */


    set_time_limit(0);

    chdir(__DIR__);

    /*
    парсит линки на страницы роликов (второго уровня)
    принимает: $page - количество страниц первого уровня для парсинга
    возвращает: $links - массив номеров спаршеных линков (линк всегда выглядит как http://www.redtube.com/42238, поэтому достаточно запомнить 42238)
    */
    function GetID($page) {
        
    $html GetUrl("http://www.redtube.com/?page=$page");
        
    preg_match_all('|<div class="video">\n\t\t\t\t\t\t<a href="http://www\.redtube\.com/(\d+)|'$html$links);
        return 
    $links[1];
    }

    /*
    парсит линки на flv ролики с страницы ролика (страница второго уровня)
    принимает: $url - номер из урла страницы ролика
    возвращает: $flv - линк на flv ролик
    */
    function GetPages($url) {
        
    $html GetUrl("http://www.redtube.com/$url");
        
    preg_match('|hashlink=([^&]+)|'$html$flv);
        
    $flv trim(urldecode($flv[1]));
        return 
    $flv;
    }

    /*
    парсит курлом страницу по полученому линку
    принимает: $url - линк страницы которую требуется спрасить
    возвращает: $html - сурс спаршеной страницы
    */
    function GetUrl($url) {
        
    $ch curl_init("$url");
        
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"); 
        
    curl_setopt($chCURLOPT_REFERER'http://www.redtube.com/?page='.mt_rand(2,10));
        
    curl_setopt($chCURLOPT_ENCODING'gzip, deflate');
        
    curl_setopt($chCURLOPT_COOKIEJAR'redtube_cookies');
        
    curl_setopt($chCURLOPT_COOKIEFILE'redtube_cookies');
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    $html curl_exec($ch);
        if (
    curl_errno($ch)) echo 'Curl error: '.curl_error($ch)."\r\n";
        
    curl_close($ch);
        
        return 
    $html;
    }

    /*
        Main
    */
    $pages++;
    // переименовываем файл линков, если он уже есть, чтоб не потереть новым
    if (file_exists('redtube_links.txt')) rename('redtube_links.txt''redtube_links_old_'.time().'.txt');
    $handle fopen('redtube_links.txt''w');
    for (
    $i 1$i $pages$i++) {
        
    $links_str '';
        
    // парсим урлы страниц с роликом
        
    $links GetID($i);
        foreach (
    $links as $link) {
            
    // парсим урл самого ролика
            
    $flv GetPages($link);
            
    $links_str .= $flv."\r\n";
            
    sleep($pause_flv);
        }
        
    // записывам 20 урлов flv роликов
        
    fwrite($handle$links_str);
    }

    fclose($handle);
    unlink('redtube_cookies');

    ?>

    аналог для порнхаба:
    PHP:
    <?php
    /*
    парсит прямые линки на flv ролики с pornhub.
    паук проходит по страницам порнхаба, http://www.pornhub.com/video?o=mr&page=1 и т.д. с них парсит линки страниц роликов, http://www.pornhub.com/view_video.php?viewkey=85874, с которых парсит прямые линки на flv ролики, кои складывает в текстовой файл, pornhub_links.txt
    */

    /*
    ----    конфиг
    */
    //количество страниц первого уровня парсинга, на каждой 28 роликов для парсинга
    $pages 3;
    // пауза в секундах между парсингом страницы с роликом
    $pause_flv 3;
    /*
    ----    конец конфига, дальше можно не трогать :)
    */


    set_time_limit(0);

    chdir(__DIR__);

    /*
    парсит линки на страницы роликов (второго уровня)
    принимает: $page - количество страниц первого уровня для парсинга
    возвращает: $links - массив номеров спаршеных линков (линк всегда выглядит как http://www.redtube.com/42238, поэтому достаточно запомнить 42238)
    */
    function GetID($page) {
        
    $html GetUrl("http://www.pornhub.com/video?o=mr&page=$page");
        
    preg_match_all('|<h5 class="title">\n\t\t\t<a href="http://www\.pornhub\.com/view_video\.php\?viewkey=(\d+)|'$html$links);
        return 
    $links[1];
    }

    /*
    парсит линки на flv ролики с страницы ролика (страница второго уровня)
    принимает: $url - номер из урла страницы ролика
    возвращает: $flv - линк на flv ролик
    */
    function GetPages($url) {
        
    $html GetUrl("http://www.pornhub.com/view_video.php?viewkey=$url");
        
    preg_match('|"video_url","([^"]+)|'$html$flv);
        
    $flv trim(urldecode($flv[1]));
        return 
    $flv;
    }

    /*
    парсит курлом страницу по полученому линку
    принимает: $url - линк страницы которую требуется спрасить
    возвращает: $html - сурс спаршеной страницы
    */
    function GetUrl($url) {
        
    $ch curl_init("$url");
        
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 (.NET CLR 3.5.30729)"); 
        
    curl_setopt($chCURLOPT_REFERER'http://www.pornhub.com/video?o=mr&page='.mt_rand(2,10));
        
    curl_setopt($chCURLOPT_ENCODING'gzip, deflate');
        
    curl_setopt($chCURLOPT_COOKIEJAR'pornhub_cookies');
        
    curl_setopt($chCURLOPT_COOKIEFILE'pornhub_cookies');
        
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
        
    $html curl_exec($ch);
        if (
    curl_errno($ch)) echo 'Curl error: '.curl_error($ch)."\r\n";
        
    curl_close($ch);
        
        return 
    $html;
    }

    /*
        Main
    */
    $pages++;
    // переименовываем файл линков, если он уже есть, чтоб не потереть новым
    if (file_exists('pornhub_links.txt')) rename('pornhub_links.txt''pornhub_links_old_'.time().'.txt');
    $handle fopen('pornhub_links.txt''w');
    for (
    $i 1$i $pages$i++) {
        
    $links_str '';
        
    // парсим урлы страниц с роликом
        
    $links GetID($i);
        foreach (
    $links as $link) {
            
    // парсим урл самого ролика
            
    $flv GetPages($link);
            
    $links_str .= $flv."\r\n";
            
    sleep($pause_flv);
        }
        
    // записывам 28 урлов flv роликов
        
    fwrite($handle$links_str);
    }

    fclose($handle);
    unlink('pornhub_cookies');

    ?>


    ----------------------------------------------------------

    спрашивают как запускать.. менять в принципе стоит только 2 вещи, все в конфиге:
    1. сколько страниц парсить
    2. пауза между парсингом страниц

    все в принципе указано в комментах. запускать откуда угодно, пока есть php и curl
     
    Sachek нравится это.
  7. dimentiy89

    dimentiy89 Постоялец

    Регистр.:
    19 дек 2009
    Сообщения:
    63
    Симпатии:
    5
    что с туба, что с хаба одна и та же ошибка
    Parse error: syntax error, unexpected ':' in Z:\home\localhost\www\vvv\vv.php on line 14
    как исправить?
     
  8. kuguk

    kuguk

    Регистр.:
    5 мар 2009
    Сообщения:
    182
    Симпатии:
    19
    Знающие люди, подскажите новый префикс к .flv линку redtub'a
     
  9. satih

    satih

    Регистр.:
    19 сен 2008
    Сообщения:
    429
    Симпатии:
    710
    пару постов выше скрипт пхп мой, проверил, все еще тянет линки на ролики (файл в аттаче). если сам неможешь тот код разобрать, спроси точнее что есть и что нужно. если что, скрипт выдергивает урл на ролик просто с страницы редтуба, можешь в сурсе сам его найти.

    на всякий загрузил мою папку пхп, а то у человека 1 постом над тобой тоже не работало, с денвера запускал, незнаю что у денвера не так (и в лом разбиратся :) ), но с этой папкой по его словам заработало
    http://www.multiupload.com/HZ0KN05XRM
     

    Вложения:

  10. ron666

    ron666 Писатель

    Регистр.:
    14 мар 2012
    Сообщения:
    1
    Симпатии:
    0
    чет не пашетЖ(((