Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Розыскивается скриптец
Новая тема
Ответить
цитата
14/06/12 в 13:25
Starforce
В общем идея такова, точнее задача. Скрипт, локальный или серверный, который умеет из заданого набора domain.com|desc, выдрать все ссылки на большие картинки и записать это в файл форматом domain.com/im/1.jpg,domain.com/im/2.domain.com/im/3.jpg|decs.
Кто чего может подсказать, или может кто может написать ?
по сути, это простой парсер
Последний раз редактировалось: Starforce (
14/06/12 в 14:46
), всего редактировалось 1 раз
цитата
14/06/12 в 14:05
Moma
а шо тут подсказывать тут делать надо
цитата
14/06/12 в 14:07
Starforce
дельцы то есть ? ))
цитата
14/06/12 в 14:10
Moma
тогда меня интересует 2 вопроса:
1.время(сроки)
2.деньги(на сколько ты готов раскошелиться)
цитата
14/06/12 в 14:29
Yacc
А меня только один: формат исходных данных.
цитата
14/06/12 в 14:38
Starforce
формат же указан
задаем
domain.com|desc
получаем на выходе
domain.com/im/1.jpg,domain.com/im/2.domain.com/im/3.jpg|decs
цитата
14/06/12 в 15:04
FXIX
непонятно.
короче есть файл. в формате:
domain1.com|desc (что за деск?)
...
domainN.com|desc
скрипт парсит файл. заходит на морду домена. выдергивает все картинки. складывает в файл в формате:
domain1.com/im/1.jpg,domain.com/im/2.domain.com/im/3.jpg|decs
...
domainN.com/im/1.jpg,domain.com/im/2.domain.com/im/3.jpg|decs
так?
цитата
14/06/12 в 15:17
Starforce
все именно так, ничго не скачивается, выдираются только линки на большие пикчи
в данном случае это применяется к фхг
цитата
14/06/12 в 15:36
Yacc
Starforce писал:
выдираются только линки на большие пикчи
Осталось выяснить как отличать большие картинки от всех остальных.
Примерно будет так:
function getHtml( $url, $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)' ) {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, $userAgent );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_FAILONERROR, true );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
$html = curl_exec($ch);
if( $html !== false ) {
return $html;
}
else {
echo 'curl error:'.curl_error($ch);
exit;
}
}
function getHtmlAttr( $domain, $tag = 'img', $attr = 'src', $protocol = 'http://' ) {
$html = getHtml( $protocol.$domain );
$dom = new DOMDocument();
@$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );
$images = $xpath->evaluate( '/html/body//'.$tag );
$result = array();
for( $i = 0; $i < $images->length; $i += 1 ) {
$image = $images->item( $i );
$src = $image->getAttribute( $attr );
if( stripos( $src, 'http' ) !== 0 )
$src = $protocol.$domain.$src;
$result[] = $src;
}
return $result;
}
$data = file( 'data.txt' );
$result = array();
foreach( $data as $s ) {
list( $domain, $desc ) = explode( '|', $s, 2 );
$result[] = implode( '|', getHtmlAttr( $domain ) ).'|'.$desc;
}
file_put_contents( 'result.txt', $result );
Последний раз редактировалось: Yacc (
14/06/12 в 17:05
), всего редактировалось 1 раз
цитата
14/06/12 в 15:41
Starforce
Yacc писал:
Осталось выяснить как отличать большие картинки от всех остальных.
Примерно будет так:
Код:
function getHtml( $url, $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)' ) {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, $userAgent );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_FAILONERROR, true );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
$html = curl_exec($ch);
if( $html !== false ) {
return $html;
}
else {
echo 'curl error:'.curl_error($ch);
exit;
}
}
function getHtmlAttr( $domain, $tag = 'img', $attr = 'src', $protocol = 'http://' ) {
$html = getHtml( $protocol.$domain );
$dom = new DOMDocument();
@$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );
$images = $xpath->evaluate( '/html/body//'.$tag );
$result = array();
for( $i = 0; $i < $images->length; $i += 1 ) {
$image = $images->item( $i );
$src = $image->getAttribute( $attr );
if( stripos( $src, 'http' ) !== 0 )
$src = $protocol.$domain.$src;
$result[] = $src;
}
return $result;
}
$data = file( 'data.txt' );
$result = array();
foreach( $data as $s ) {
list( $domain, $desc ) = explode( '|', $s, 2 );
$result[] = implode( '|', getHtmlAttr( $domain ) ).'|'.$desc;
}
file_put_contents( 'result.txt', $result );
картинки можно узнавать по коду если ответ ОК, то берем линк, праадв в этом случае наверное придетс яограничить размеры картинок, тчобы не соибрать мусор, ну либо знать как то иным способом, что это именно то, что нужно, наверное можно ссылку *.jpg сопоставлять ссылке на *.jpg
цитата
14/06/12 в 16:23
Lexikon
$getHeadersImg = get_headers( $img );
$lineArray = implode("|", $getHeadersImg);
$nfo = strpos( $getHeadersImg[0], "200" );
preg_match("/Content-Length: [0-9]+/i", $lineArray, $contentLength);
$fileSize = trim( preg_replace("/[^0-9]/", "", $contentLength[0] ) );
if ( $nfo === false || $fileSize < 10000) { continue; }
У меня примерно такой фрагмент кода который отвечает за проверку на существование и минимальный размер.
Но я не особый знаток ПХП, тут есть хорошие спецы
, они и мне помогали с вопросами.
цитата
14/06/12 в 17:01
Yacc
Код:
function getHtml( $url, $userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)' ) {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_USERAGENT, $userAgent );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_FAILONERROR, true );
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_TIMEOUT, 10 );
$html = curl_exec($ch);
if( $html !== false ) {
return $html;
}
else {
echo 'curl error:'.curl_error($ch);
exit;
}
}
function getHtmlAttr( $domain, $tag = 'a/img/..', $attr = 'href', $protocol = 'http://' ) {
$domain = preg_replace( '#\?.+$#', '', $domain );
$html = getHtml( $protocol.$domain );
$dom = new DOMDocument();
@$dom->loadHTML( $html );
$xpath = new DOMXPath( $dom );
$links = $xpath->evaluate( '/html/body//'.$tag );
$result = array();
for( $i = 0; $i < $links->length; $i += 1 ) {
$link = $links->item( $i );
$href = $link->getAttribute( $attr );
if( stripos( $href, '.jpg' ) === ( strlen( $href ) - 4 ) ) {
if( stripos( $href, 'http' ) !== 0 )
$href = $protocol.$domain.$href;
$result[] = $href;
}
}
return $result;
}
$data = file( 'data.txt' );
$result = array();
foreach( $data as $s ) {
list( $domain, $desc ) = explode( '|', $s, 2 );
$result[] = implode( '|', getHtmlAttr( $domain ) ).'|'.$desc;
}
file_put_contents( 'result.txt', $result );
Работать будет только стандартных галях типа
promo.averotica.com/gals/20120425-1692-alice/?wm=xxxxxxx
picture6.18stream.com/tb/379/h/10/?nats=xxxxxxxxxx
Последний раз редактировалось: Yacc (
14/06/12 в 17:33
), всего редактировалось 1 раз
цитата
14/06/12 в 17:01
Moma
а зачем
$images = $xpath->evaluate( '/html/body//'.$tag );
не проще $elements = $this->_xpath->query("//*/a/@href");
итого получите ВСЕ href на страничке
и еще хорошо бы не только от гугла и иметь массив имен браузеров и рандомно выбирать на 1 соединение кого-то из них
Новая тема
Ответить
Эта страница в полной версии