Forum Webscript.Ru

Программирование => PHP => Тема начата: obytatel от 25 Января 2003, 03:14:31

Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 25 Января 2003, 03:14:31
Какой забугорный поисковик проще подходит для грабанья линков?
Если можно киньте скриптом-грабером для этого поисковика.

Уточняю задачу: поиск должен быть сложным, т.е. есть два текстовых файла, например:
1.txt:
win
linux

2.txt:
apache
mysql
perl
php

На основе этих файлов генеряться запросы:
win + apache
win + mysql
win + perl
win + php
linux + apache
linux + mysql
linux + perl
linux + php

Результаты сохраняються в файлы:
win.apache
win.mysql
win.perl
win.php
linux.apache
linux.mysql
linux.perl
linux.php
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 25 Января 2003, 10:21:27
Цитировать
Какой забугорный поисковик проще подходит для грабанья линков?
google наверное. Они ведь для этого даже SOAP-интерфейс сделали.
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 26 Января 2003, 03:52:11
SOAP-интерфейс - можно про это подробней?

сам пока написал лишь енто,- времени небыло.
Пока проверено на локале, заточено под google
set_time_limit(600);
$url="http://127.0.0.3/search.php";
$port=80;
$host="127.0.0.3";
$fp=@fsockopen($host,$port,$errno,$errstr,120) or die("Не могу соединиться");
$out="hl=en&lr=&ie=UTF-8&oe=UTF-8&q=warcraft&btnG=Google+Search";
$query = "GET $url?$out HTTP/1.0\\r\\n".
            "Host: 127.0.0.3\\r\\n".
            "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows98)\\r\\n".
            "Referer: http://127.0.0.3\\r\\n".
            "\\r\\n";
if ($fp)
{
fputs($fp, $query);
while (!feof($fp)) {
        echo fgets ($fp,128);
          }
fclose ($fp);
}
else
{
print ("ops");
}
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 26 Января 2003, 04:28:15
http://www.google.com/intl/ru/apis/
(правда все еще в состоянии beta)

PS
сам я им не пользовался
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 26 Января 2003, 05:50:15
http://www.google.com/intl/ru/apis/ там вроде неуказан PHP (в смысле что он не поддерживает столь рульный тулкит)
А вообще у меня горе - выше изложенный скрипт - на google.com не работает. Спервого раза ругнулось - Error 302 Moved, а на второй вообще ничегошеньки несказало. ХЭЭЭЭЭЭЭЭЛП, плыз.
Путь я конечноже правил на http://www.google.com/search
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 26 Января 2003, 22:30:45
цитата из сайта:
Цитировать
13. What programming languages do you support?

The service has been tested with Java (Apache SOAP and Apache Axis), Perl (SOAP::Lite version 0.52), Ruby (SOAP4R), and C# in MS Visual Studio .NET. The service has not been tested with clients in other languages but it should work with any language with web services support.
то есть с пхп он вроде должен работать, но не тестировался (да и пхп не имеет встроенных средств для работы с SOAP, кроме PEAR-классов)
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 27 Января 2003, 21:23:36
Попробую soap.
А всё же без soap, как и почему мой мини-скрипт не работает корректно?
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 27 Января 2003, 23:54:36
Цитировать
А всё же без soap, как и почему мой мини-скрипт не работает корректно?
насколько я понимаю без SOAP граббинг google-а нелегален, так что тут я тебе не помощник
Могу лишь посоветовать посмотреть готовые примеры (они в сети есть)
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 28 Января 2003, 01:55:13
Не верю что все на Украине стали такими честными, не настолько вы богаты
А гугла сама виновата могли бы позаботиться о сапорте для ПХП
Если кому интересно кидаю свой нынешний вариант скрипта, но он всё также не работает 8(

set_time_limit(60000);
$url="http://www.google.com/search";
$port=80;
$host="www.google.com";
$region=file("Sxs.sxs");
foreach ($region as $cat)
   { //foreach region
   $cat=trim($cat);
   if (ereg("=",$cat))
   {
   }
   else
   {
   $region1=file("cat.sxs");
   foreach ($region1 as $cat1)
      { //foreach region1
      $cat1=trim($cat1);
      
$fp=@fsockopen($host,$port,$errno,$errstr,120) or die("Не могу соединиться");
$dog=str_replace(" ", "+", "$cat");
$dog1=str_replace(" ", "+", "$cat1");
$ret="$dog+$dog1";
$out="hl=en&lr=&ie=UTF-8&oe=UTF-8&qt=$ret&btnG=Google+Search";
$query = "GET $url?$out HTTP/1.0\\r\\n".
            "Host: 127.0.0.3\\r\\n".
            "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows98)\\r\\n".
            "Referer: http://www.google.com\\r\\n".
            "\\r\\n";
if ($fp)
{
$buf="";
echo ("

$ret

");
fputs($fp, $query);
while (!feof($fp)) {
        $buf.= fgets ($fp,128);
           }
           echo $buf;
$dog=str_replace(" ", "", "$cat");
$dog1=str_replace(" ", "", "$cat1");
$fp1=fopen("data/$dog.$dog1","w+");
fputs($fp1, "$ret\\r\\n $query\\r\\n $buf");
fclose ($fp1);
fclose ($fp);
}
else
{
print ("ops");
}
      } //else ereg
      } //foreach region1
   } //foreach region

Буду рад если найду сочувствующих
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 28 Января 2003, 02:13:43
Цитировать
Не верю что все на Украине стали такими честными, не настолько вы богаты
[off]Честность тут непричем, я принципаильно не помогаю в грабинге. Просто не люблю когда люди сами не учаться и хотят чужими руками сделать грязную работу [/off]
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 28 Января 2003, 02:29:23
Кстати а что именно у тебя не работает ?
Ты так и шлеш хост 127.0.0.3 на google ? ;)
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 28 Января 2003, 21:42:32
Грязную работу я вроде сам сделал, а дальше мозгами работать надо,- вот с этим у меня судя по всему проблемы.
Ты так и шлеш хост 127.0.0.3 на google ?
Шутишь ты хорошо 8Р, но обидно... (пишу как пологен http://www.google.com, пробовал и google.com)
А не работает вона что: вместо ответа на запрос кидают форму для ввода запроса(приятно было на грабить 2000 ХТМЛ-ов в которых одна и та же форма). Я думаю на кукисы, но обойти их не получается (мудрёные они какие-то).
Может подскажешь более дружелюбный для грабинга поисковичёк. Яха отметается по той же причине что и Гугла.
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 29 Января 2003, 01:54:13
obytatel
1. В следующий раз если код не работает, то показывай именно то что не работает
2. Вот код, который у меня получает страницу результатов с гугла

require_once("HTTP/Request.php");
$params = array(
   "method"=>"GET",
   "http"=>"1.1",
   "timeout"=>"20",
);
$url = "http://www.google.com/search?q=php&ie=windows-1251&hl=ru&btnG=%CF%EE%E8%F1%EA+%E2+Google&lr=&start=20";

$req = & new HTTP_Request($url, $params);
$req->sendRequest();

echo "
";
print_r($req);
echo "
";

используется pear::http::request
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 29 Января 2003, 21:22:07
Млин, БОЛЬШУЩЕЕ СПАСИБО, а то я уже начинал горевать. Сейчас же займусь препарацией
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 29 Января 2003, 23:23:10
Макс
Это работает, большое пасибо. Всё зер гуд кроме того что надо писать
echo $a->getResponseBody();
а не
print_r($req);
И на закуску проблемка: надобно исключить рускоязычные линки, и вообще язык на инглиш
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 29 Января 2003, 23:56:36
Цитировать
что надо писать
echo $a->getResponseBody();
а не
print_r($req);
как надо писать я знаю, я таким образом пытался показать тебе, какую информацию ты можеш получить из объекта Request


насчет языка - изучай передаваемые гуглу параметры, там среди них язык должен быть
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 30 Января 2003, 00:32:48
Новое чудо открыл у себя после отработки по циклу 47 запросов, дальше ничего неграбиться. Таже беда на на локальном хосте и на гугле. Разобраться не могу что это за зверь может настройки моего сервера?
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 30 Января 2003, 03:21:02
Цитировать
Новое чудо открыл у себя после отработки по циклу 47 запросов,
в смысле если в цикле делать $req->sendRequest() после 47 цикла не работает ?
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 30 Января 2003, 21:28:41
Массив с запросом у меня на 1900 элементов. Через foreach пускаю
$region=file("Sxs.sxs");
foreach ($region as $cat)
{
$cat=trim($cat);
$out="hl=en&lr=&ie=UTF-8&oe=UTF-8&q=$cat&btnG=Google+Search";
$url1=$url."?$out";
$a = & new HTTP_Request($url1,$params);
$a->sendRequest();
$code= $a->getResponseBody();
}
Результат определённого числа (47-53) ответов на запрос нормальный, т.е $code="ХТМЛ-код примерно на 35 kb". А дальше (47/53 и выше) начинается сказка,- $code="", т.е. пустой. Думал может соединение надо каждый раз убивать (unset ($a);) - не помогло. Увеличил лимит отводимой под РНР оперативной памяти в php.ini (с 8 до 28Мб)- не помогло. На большее пока мозгов нехватило.
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 31 Января 2003, 00:25:10
а что print_r($a) выводит ?
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 01 Февраля 2003, 03:17:55
http_request Object ( [_url] => net_url Object ( http:// =>
[url]http://127.0.0.3/1.html?hl=en&lr=&ie=UTF-8&oe=UTF-8&q=spiderman+game&btnG=Google+Search
[protocol] => http [user] => [pass] => [host] => 127.0.0.3 [port]
=> 80 [path] => /1.html [querystring] => Array ( [hl] => en [lr]
=> [ie] => UTF-8 [oe] => UTF-8 [q] => spiderman%2Bgame [btnG] =>
Google%2BSearch ) [anchor] => [useBrackets] => 1 ) [_sock] =>
net_socket Object ( [fp] => Resource id #1 [blocking] => 1 [persistent]
=> [addr] => 127.0.0.3 [port] => 80 [timeout] => 20 [lineLength]
=> 2048 [_debug] => [_default_error_mode] => [_default_error_options]
=> [_default_error_handler] => [_error_class] => PEAR_Error
[_expected_errors] => Array ( ) ) [_method] => GET [_http] => 1.1
[_user] => [_pass] => [_proxy_host] => [_proxy_port] => [_timeout]
=> 20 [_requestHeaders] => Array ( [User-Agent] => PEAR HTTP_Request
class ( http://pear.php.net/ ) [Content-Type] =>
application/x-www-form-urlencoded [Connection] => close [Host] =>
127.0.0.3 )

Запросы без ответа доходят только до сюда (print_r($a);)
Дальше выводят только первые 47 запросов:

 [_response] => http_response Object ( [_code] => 200
[_protocol] => HTTP/1.1 [_headers] => Array ( [Date] => Fri, 31 Jan
2003 22:56:50 GMT [date] => Fri, 31 Jan 2003 22:56:50 GMT [Server] =>
Apache/1.3.22 (Win32) rus/PL30.9 [server] => Apache/1.3.22 (Win32) rus/PL30.9
[Last-Modified] => Fri, 31 Jan 2003 22:49:24 GMT [last-modified] => Fri,
31 Jan 2003 22:49:24 GMT [ETag] => "0-68-3e3afd74" [etag] =>
"0-68-3e3afd74" [Accept-Ranges] => bytes [accept-ranges] => bytes
[Content-Length] => 104 [content-length] => 104 [Connection] => close
[connection] => close [Content-Type] => text/html [content-type] =>
text/html ) [_body] => Free Game ) )

Странно вот ещё что: [_body] => Free Game
Хотя $code= $a->getResponseBody(); echo("$code"); возвращает:
"Free GameFree Game"
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: Макс от 01 Февраля 2003, 03:31:27
может какая-нибудь автоматическая защита у гугла стоит (хотя я знаю один сайт с поиском через гугл и у них вроде таких проблем не было)
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 01 Февраля 2003, 03:37:35
Да дело не в гугле, та же феня и по локальному хосту происходит
Название: Какой забугорный поисковик проще подходит для грабанья линков?
Отправлено: obytatel от 02 Февраля 2003, 02:57:29
Макс
Тему предлагаю считать закрытой. Не знаю нафига нужны мне были эти классы и модули, если все и без них прекрастно работает. Предлагаю юзать такой скриптец:
set_time_limit(60000);
$url="http://www.google.com/search";
$region=file("Sxs.sxs");
foreach ($region as $cat)
   { //foreach region
   $cat=trim($cat);
   if (ereg("=",$cat))
   {
   }
   else
   {
   $region1=file("cat.sxs");
   foreach ($region1 as $cat1)
      { //foreach region1
      $cat1=trim($cat1);
      
$dog=str_replace(" ", "+", "$cat");
$dog1=str_replace(" ", "+", "$cat1");
$ret="$dog+$dog1";
$out="hl=en&lr=&ie=UTF-8&oe=UTF-8&q=$ret&btnG=Google+Search";
$url1=$url."?$out";
$so = fsockopen("www.google.com", 80, &$errno, &$errstr, 30);
fputs($so,"GET $url1 HTTP/1.0\\nHOST: http://www.google.com/\\n\\n");
while(fgets($so,2048)!="\\r\\n" && !feof($so));
unset($buf);
while(!feof($so)) $buf.=fread($so,2048);
fclose($so);
$dog=str_replace(" ", "", "$cat");
$dog1=str_replace(" ", "", "$cat1");
mkdir ("data/$dog", 0700);
$fp1=fopen("data/$dog/$dog.$dog1","w+");
fputs($fp1, $buf);
fclose ($fp1);
      } //else ereg
      } //foreach region1
   } //foreach region
?>
Только надо подправить mkdir - в том смысле что необходима проверка на существование директории перед использованием.