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

mailagent

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

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

function getID($pages) {
       global $links;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://redtube.com/?page=$pages");
        curl_setopt($ch, CURLOPT_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($ch, CURLOPT_REFERER, 'http://google.com');
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'redtube'); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $res = curl_exec($ch);
        preg_match_all('#redtube.com/(\d{5})#i',$res, $links);
           
}
function getPages($url) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "http://$url");
        curl_setopt($ch, CURLOPT_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($ch, CURLOPT_REFERER, 'http://redtube.com');
        curl_setopt($ch, CURLOPT_COOKIEJAR, 'redtube'); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $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);
}
?>
 
спасибо за код, но парсер у меня тоже есть. я не программист, не совсем понял, что делает твой скрипт, но вроде флв ссылки не парсит.
на другом форуме подсказали, что тубы также используют привязку по айпи. как ее можно обойти?
 
скрипт выше парсит прямые ссылки на флв видео. если нужно парсить сам ролик, в чем проблема, прямая ссылка есть.. в принципе чуть подправить его, будеть также тайтлы парсить и все что надо со страницы ролика.
алгоритм такой:
проходим заданое число страниц с тумбами, с каждой парсим линк на страницу второго уровня (страница ролика), и с этой страницы выдираем ссылку. кста насчет привязки туба по айпи, обойти легко можно, так как ролики зачем к себе на сервак скачивать? место, бендвич.. гораздо проще поставить линк на их ролик в свой плеер :) в итоге на твоем сайте играет порно ролик и ты не платишь не за траф, не за нагрузку сервака -> профит :)

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


ну это понятно, что ролики должны играться с их серверов. в этом-то вся и проблема- нужно постоянно их защиту от этого обходить. а в чем суть привязки по айпи? насколько я понял- это каждому посетителю (с уникальным айпи) формируется уникальная ссылка. как можно обойти эту защиту?
 
я думал защита по айпи имеется ввиду ограничение роликов на 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($ch, CURLOPT_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($ch, CURLOPT_REFERER, 'http://www.redtube.com/?page='.mt_rand(2,10));
	curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
	curl_setopt($ch, CURLOPT_COOKIEJAR, 'redtube_cookies');
	curl_setopt($ch, CURLOPT_COOKIEFILE, 'redtube_cookies');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	$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');

?>
[/spoil]
аналог для порнхаба:
[spoil]
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($ch, CURLOPT_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($ch, CURLOPT_REFERER, 'http://www.pornhub.com/video?o=mr&page='.mt_rand(2,10));
	curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
	curl_setopt($ch, CURLOPT_COOKIEJAR, 'pornhub_cookies');
	curl_setopt($ch, CURLOPT_COOKIEFILE, 'pornhub_cookies');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	$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
 
что с туба, что с хаба одна и та же ошибка
Parse error: syntax error, unexpected ':' in Z:\home\localhost\www\vvv\vv.php on line 14
как исправить?
 
Знающие люди, подскажите новый префикс к .flv линку redtub'a
 
пару постов выше скрипт пхп мой, проверил, все еще тянет линки на ролики (файл в аттаче). если сам неможешь тот код разобрать, спроси точнее что есть и что нужно. если что, скрипт выдергивает урл на ролик просто с страницы редтуба, можешь в сурсе сам его найти.

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

Вложения

  • redtube_links.txt
    7,9 KB · Просмотры: 53
Назад
Сверху