Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Парсинг google/yandex (https://forum.antichat.xyz/showthread.php?t=55825)

guest3297 15.12.2007 09:09

Парсинг google/yandex
 
Нужен скрипт на php выполняющий такие действий.

Зашел на сайт пропарсил index на содежание слова
Код:

875934875983775398475398759387458973
Если нету данного текста сделал гет запрос на http://ya.ru/ и записал полученное в файл ya.ru.txt

Далее пропарсил второй сайт (index) на текст
Код:

4098029840203498023498230489029348
и если текта нету делал бы запрос на http://google.com и записал полученное в файл google.com.txt

NOmeR1 15.12.2007 11:17

PHP код:

<?
$site1 
'сайт #1';
$site2 'сайт #2';
$zapros1 '875934875983775398475398759387458973';
$zapros2 '4098029840203498023498230489029348';
if( 
substr_count(file_get_contents($site1), $zapros1) < )
{
     
$handle fopen('ya.ru.txt''w');
     
fwrite($handlefile_get_contents('http://ya.ru'));
     
fclose($handle);
}
if( 
substr_count(file_get_contents($site2), $zapros2) < )
{
     
$handle fopen('google.com.txt''w');
     
fwrite($handlefile_get_contents('http://google.com'));
     
fclose($handle);
}
?>

Так? Я лично не понял что собственно надо =)

AkyHa_MaTaTa 15.12.2007 15:35

Если реально ya.ru и google.com то скорее так:
file_get_contents("http://www.ya.ru/yandsearch?text=$zapros1);
file_get_contents("http://www.google.com/search?hl=ru&q=$zapros2");

Sn@k3 15.12.2007 16:06

хм, он просил в теле страницы найти совпадения, а не найти в поиске =\

Isis 15.12.2007 18:44

Sn@k3, а что по втойму file_get_contents делает? =\

ENFIX 15.12.2007 19:02

Isis, ты не понял, скрипт записывает не результат поиска, а сам html исходник поисковика

DWORD 16.12.2007 23:22

Цитата:

Сообщение от .::Gh0st::.
GET http://$host/search?q=$query HTTP/1.0

1) Читаем RFC:
"The absoluteURI form is only allowed when the request is being made to a proxy ...". Ваше счастье, если google сделал защиту от "дурака" в ущерб стандарту.
2) Что-то не слышно про ограничения на query, его нужно urlencode'ить в уме? Может быть тогда проще посылать запрос телнетом? :)

Цитата:

Сообщение от .::Gh0st::.
for ($n = 0; $n < $num; )
{
...

$n = $n + 10;
$page = "";
}

Цитата:

Сообщение от .::Gh0st::.
for ($i = 1; $i < 20 ; $i++)
{
....
$i = $i + 1;
}

Как там говорится-то: Ыыыыы.

k1b0rg 17.12.2007 13:59

Цитата:

$handle = fopen($filename, "w");
Непонял зачем перезаписывать файл в каждой итерации цикла?

.::Gh0st::. 18.12.2007 20:14

2dword
1) исправлено
2) исправлено
3) исправлено

2kib
исправлено
делал для того, чтобы при подвисании скрипта сохранились данные за последнию итерацию, не использовал "a", потому что надо было чтобы при новом запуске скрипта файл очищался. сейчас немного по другому сделал, файл либо создается, либо очищается при старте и информация записывается после каждого прохода

2all
я тут немного не понял суть претензий - я вообще-то накатал скриптег за некоторое время и скинул в топ, в надежде помочь. критерием оценки работы служило "лишь бы работало". в общем я все замечания учел, но все же, я же не за деньги это делаю, так что надо бы понимать что это просто сэмпл, а не какой-то готовый продукт. шевелите мозгами иногда.

код:
PHP код:

<?php
$host 
"www.google.com";
$query "snitch";
$num 20;
$filename "links.txt";

$handle fopen($filename"w");
fclose($handle);

function 
grab_links($page)
{
        
$links "";
        
$result preg_split('/<span class=a>| - [0-9]*k - <\/span>/i'$page);
        for (
$i 1$i 20$i += 2)
        {
                
$clean str_replace("<b>"""$result[$i]);
                
$clean str_replace("</b>"""$clean);
                
$clean str_replace(" """$clean);
                
$links .= "$clean\r\n";
        }
        return 
$links;
}

for (
$n 0$n <= $num$n += 10)
{
        
$request "GET /search?q=".urlencode($query)."&start=$n HTTP/1.0\r\n";
        
$request .= "Host: $host\r\n";
        
$request .= "Connection: Close\r\n";
        
$request .= "\r\n";

        
$sock fsockopen($host80$errno$errstr10);
        
stream_set_timeout($sock60);
        
fputs($sock$request);

        while(!
feof($sock)){$page .= fgets($sock);}
        
fclose($sock);

        
$links grab_links($page);
        
//echo $links;
        
$page "";
        
        
$handle fopen($filename"a");
        
fwrite($handle$links);
        
fclose($handle);
}
?>

з.ы
минусов много, скрипт собирает лишние ссылки с рекламы и прочего, так как регекспы писались тоже на скорую руку. правьте сами по желанию.


Время: 08:03