Просмотр полной версии : Научите правильно писать грабберы
Научите правильно писать грабберы! Скоко непытался, неробаит! Пишу код
<?php
$file = file ("http://site.ru?$QUERY_STRING");
$file = implode ("",$file);
$file = str_replace('То, что требуется заменить','То, на что надо заменить',$file);
//вырезаю разную рекламу
echo $f;
?>
Страница открывается, но дальше никуда немогу перейти! (url was not found)
Как вы пишете грабы?
http://www.google.ru/search?q=%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%B D%D0%B8%D0%B5+%D0%B3%D1%80%D0%B0%D0%B1%D0%B1%D0%B5 %D1%80%D0%BE%D0%B2+%D0%BD%D0%B0+php&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a
.::BARS::.
31.12.2008, 04:33
<?php
$accept = "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif,image/x-bitmap, */*;q=0.1\r\n";
$accept_language = "Accept-Language: ru, en;q=0.9\r\n";
$accept_charset = "Accept-Charset: utf-8;q=0.6 windows-1251;q=0.1 *;q=0.1\r\n";
$referer = "Referer: http://хост/страница.php\r\n"; //подумай что писать дабы не палить себя
$conection = "Connection: Close\r\n";
$host= "хост"; //в виде site.ru
$path="/страница.php?".$_SERVER['QUERY_STRING'];
$fp=fsockopen($host,80,$errno, $errstr,10);
if(!$fp) {
echo "$errstr ($errno)<br/>\n";
} else {
$data = "";$post=0;
foreach($_POST as $key=>$value){$post=1;
$data.="&$key=$value";}
if($data)$data=substr($data,1);
if($post)
$headers = "POST $path HTTP/1.0\r\n";else
$headers = "GET $path HTTP/1.0\r\n";
$headers .= "Host: $host\r\n";
$headers .= "Accept: *\r\n";
$headers .= "Accept-Charset: UTF-8\r\n";
$headers .= "Accept-Charset: *\r\n";
$headers .= "Accept-Encoding: deflate\r\n";
$headers .= "Accept-Language: ru\r\n";
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 9.50\r\n";
if($post){
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen ($data)."\r\n";
$headers .= "\r\n";
$headers .= $data;}else $headers.="\r\n";
@fwrite($fp, $headers);
while($file != "\r\n") $file = @fgets($fp, 128);
$file = '';
while(!feof($fp)) $file .= @fgets($fp, 4096);
@fclose($fp); }
$file=str_replace('что','на что',$file); //замена
echo $file;
?>
все описывать не буду, т.к. просто лень....
с @fclose($fp); } до echo $file;
каждый извращается как хочет.....
.::BARS::.
31.12.2008, 04:35
$accept = "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif,image/x-bitmap, */*;q=0.1\r\n";
$accept_language = "Accept-Language: ru, en;q=0.9\r\n";
$accept_charset = "Accept-Charset: utf-8;q=0.6 windows-1251;q=0.1 *;q=0.1\r\n";
$referer = "Referer: http://хост/страница.php\r\n"; //подумай что писать дабы не палить себя
$conection = "Connection: Close\r\n";
забыл, это в голову инклудь.. либо убери... на твое усмотрение...
.:EnoT:.
31.12.2008, 08:26
Читай про строковые функции и регулярки....вот и весь мега секрет)
и главное правило имхо...не пихай везде сокеты и особенно курл....многие страницы легче получать через fopen() или file_get_conyents(), а не изображать из себя крутого чувака который пихает курл везде...
BARS спасибо! Седня попробую!
Вот пример http://fankk.ru/serv/sport.php
Код <?php
error_reporting(0);
$accept = "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif,image/x-bitmap, */*;q=0.1\r\n";
$accept_language = "Accept-Language: ru, en;q=0.9\r\n";
$accept_charset = "Accept-Charset: utf-8;q=0.6 windows-1251;q=0.1 *;q=0.1\r\n";
$referer = "Referer: http://fank.ru/index.php\r\n"; //подумай что писать дабы не палить себя
$conection = "Connection: Close\r\n";
$host= "m.sports.ru"; //в виде site.ru
$path="/index.php?".$_SERVER['QUERY_STRING'];
$fp=fsockopen($host,80,$errno, $errstr,10);
if(!$fp) {
echo "$errstr ($errno)<br/>\n";
} else {
$data = "";$post=0;
foreach($_POST as $key=>$value){$post=1;
$data.="&$key=$value";}
if($data)$data=substr($data,1);
if($post)
$headers = "POST $path HTTP/1.0\r\n";else
$headers = "GET $path HTTP/1.0\r\n";
$headers .= "Host: $host\r\n";
$headers .= "Accept: *\r\n";
$headers .= "Accept-Charset: UTF-8\r\n";
$headers .= "Accept-Charset: *\r\n";
$headers .= "Accept-Encoding: deflate\r\n";
$headers .= "Accept-Language: ru\r\n";
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 9.50\r\n";
if($post){
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen ($data)."\r\n";
$headers .= "\r\n";
$headers .= $data;}else $headers.="\r\n";
@fwrite($fp, $headers);
while($file != "\r\n") $file = @fgets($fp, 128);
$file = '';
while(!feof($fp)) $file .= @fgets($fp, 4096);
@fclose($fp); }
$file=str_replace('Реклама','',$file);
$file=str_replace('<img src="/logo.gif" width="115" height="36" alt=""/>','',$file);
$file=str_replace('<a href="http://waplog.net/ru/c.shtml?38290"><img src="http://c.waplog.net/ru/38290.cnt?trafsports=1" alt="waplog" border="0" /></a>','',$file);
$file=str_replace('http://m.sports.ru/index.php','http://fankk.ru/serv/sport.php',$file);
echo $file;
?> Страницу открывает, Но нечиго неробит! Где я допустил ошибки?
inlanger
31.12.2008, 16:05
А шо он должен робить? Песни петь?
.:EnoT:.
31.12.2008, 16:12
Песни петь и на ложках играть)
Асепты кстати ни к чему..
.::BARS::.
31.12.2008, 16:15
<?php
error_reporting(0);
$accept = "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif,image/x-bitmap, */*;q=0.1\r\n";
$accept_language = "Accept-Language: ru, en;q=0.9\r\n";
$accept_charset = "Accept-Charset: utf-8;q=0.6 windows-1251;q=0.1 *;q=0.1\r\n";
$referer = "Referer: http://m.sports.ru/index.php\r\n"; //подумай что писать дабы не палить себя
$conection = "Connection: Close\r\n";
$host= "m.sports.ru"; //в виде site.ru
$path="/index.php?".$_SERVER['QUERY_STRING'];
$fp=fsockopen($host,80,$errno, $errstr,10);
if(!$fp) {
echo "$errstr ($errno)<br/>\n";
} else {
$data = "";$post=0;
foreach($_POST as $key=>$value){$post=1;
$data.="&$key=$value";}
if($data)$data=substr($data,1);
if($post)
$headers = "POST $path HTTP/1.0\r\n";else
$headers = "GET $path HTTP/1.0\r\n";
$headers .= "Host: $host\r\n";
$headers .= "Accept: *\r\n";
$headers .= "Accept-Charset: UTF-8\r\n";
$headers .= "Accept-Charset: *\r\n";
$headers .= "Accept-Encoding: deflate\r\n";
$headers .= "Accept-Language: ru\r\n";
$headers .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 9.50\r\n";
if($post){
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen ($data)."\r\n";
$headers .= "\r\n";
$headers .= $data;}else $headers.="\r\n";
@fwrite($fp, $headers);
while($file != "\r\n") $file = @fgets($fp, 128);
$file = '';
while(!feof($fp)) $file .= @fgets($fp, 4096);
@fclose($fp); }
$file=str_replace('Реклама','',$file);
$file=str_replace('<img src="/logo.gif" width="115" height="36" alt=""/>','',$file);
$file=str_replace('<a href="http://waplog.net/ru/c.shtml?38290"><img src="http://c.waplog.net/ru/38290.cnt?trafsports=1" alt="waplog" border="0" /></a>','',$file);
$file=str_replace('http://m.sports.ru/index.php','http://kysaka.org/test/?',$file);
$file=str_replace('/?f','/test/?f',$file);
echo $file;
?>
Все работает. http://kysaka.org/test/
Действуй по примеру...
Ток исходный код смотри.. там полно шлака... Вырезать тебе придется все....
лучше используй explode(); реж от и до...
inlanger
31.12.2008, 16:17
а нахрена, собственно, эти все навороты? file_get_contents уже отменили?
.::BARS::.
31.12.2008, 16:19
error_reporting(0); - не прячь ошибки, лучше исправляй их...
.::BARS::.
31.12.2008, 16:20
а нахрена, собственно, эти все навороты? file_get_contents уже отменили?
Собственно нет!
.::BARS::.
31.12.2008, 16:22
<?php
$file = file_get_contents("http://m.sports.ru/?$QUERY_STRING");
$file = implode ("",$file);
$file=str_replace('Реклама','',$file);
$file=str_replace('<img src="/logo.gif" width="115" height="36" alt=""/>','',$file);
$file=str_replace('<a href="http://waplog.net/ru/c.shtml?38290"><img src="http://c.waplog.net/ru/38290.cnt?trafsports=1" alt="waplog" border="0" /></a>','',$file);
$file=str_replace('http://m.sports.ru/index.php','http://kysaka.org/test/?',$file);
$file=str_replace('/?f','/test/?f',$file);
echo $file;
?>
Но все же... Я извращенец...
inlanger
31.12.2008, 16:23
вместо $file = file ("http://m.sports.ru/?$QUERY_STRING");
лучше написать $file = file_get_contents ("http://m.sports.ru/?$QUERY_STRING");
INLANGER ДАЛЬШЕ ПО ССЫЛКАМ ПЕРЕХОДИТЬ, А НЕ ВЫКИДЫВАТЬ НА ГЛАВНУЮ!
.::BARS::.
01.01.2009, 08:45
INLANGER ДАЛЬШЕ ПО ССЫЛКАМ ПЕРЕХОДИТЬ, А НЕ ВЫКИДЫВАТЬ НА ГЛАВНУЮ!
А типа не переходит?
Ехоууу... Все робит! Спасибо Барс! Спасибо всем!
вот пример http://fankk.ru/test/index.php
.::BARS::.
02.01.2009, 07:10
Ехоууу... Все робит! Спасибо Барс! Спасибо всем!
вот пример http://fankk.ru/test/index.php
<br />
<b>Warning</b>: Unexpected character in input: ''' (ASCII=39) state=1 in <b>/home/fankk275/data/www/fankk.ru/test/index.php</b> on line <b>52</b><br />
ошибочка
<?xml version="1.0" encoding="utf-8"?><html><head><link rel="stylesheet" type="text/css" href="/inc/style.css" /><title>Sports.ru</title><meta name="viewport" content="width=240">
это посреди страницы.. ты не все вырезал...
Грабберы всего лишь скачивают все или часть страниц из сайта, который ты ему задал, обрабатывают их, а потом парсят на необходимые данные, которые записывают куда-нибудь. Если будешь писать прокси-граббер, скорре всего было бы хорошо сделать проверку на валидность проксей. Но все же легко сказать, а реализовать это - немного тяжелее.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot