PDA

Просмотр полной версии : парсер url-ов


dm1z
26.10.2008, 13:33
задача такая

нужно выдернуть все урлы со страницы
к примеру
http://www.google.ru/search?complete...&start=90&sa=N

и сложить их в файл!

а если б ещё и менять значение скажем +10

http://www.google.ru/search?complete...22&start=здесь +10 вместо 90 100&sa=N

при каждом следущем сборе дак вообще замечатильно!

может кто подскажет как реализовать?
хотя б первую часть!
заранее спс!!!

Pashkela
26.10.2008, 14:00
<?php
// Парсер url после выдачи гугла по запросу
function parse_serp($engine, $query)
{
switch (strtolower($engine))
{
case 'google':
$request = 'http://www.google.com/ie?hl=ru&num=100&start=0&lr=&q='.urlencode(trim($query));
$pattern = '/<a title="(.*)" href=(.*)>(.*)<\/a>/isU';
$result = file_get_contents($request);
if(preg_match_all($pattern, $result, $matches))
{
for ($i=0; $i<count($matches[0]); $i++)
{
$link = $matches[2][$i];
$serp[] = $link;
}
}
break;
}
return $serp;
}
$result = parse_serp("google", "antichat");
$log = implode("\r\n",$result);
$handler=fopen('log.txt','w');
if($handler) {fwrite($handler,$log);}
fclose($handler);
echo "Все данные были сохранены в log.txt";
?>

Pashkela
26.10.2008, 22:18
ну и окончательная версия по твоему вопросу (универсальная):


<?php
// Парсер url после выдачи гугла по запросу
$handler=fopen('log.txt','w'); // если не хотим терять старые данные - то "a+"
$limit = 0;
$zapros = "antichat"; // Наш запрос для поиска
$page_start = 0; // Стартовая страница из расчета 100 результатов выдачи на страницу
$page_end = 200; // Последняя страница из расчета 100 результатов выдачи на страницу
function parse_serp($engine, $query, $limit)
{
if ($limit<100) {$request = 'http://www.google.com/ie?hl=ru&num=100&start=' . $limit. '&lr=&q='.urlencode(trim($query));}
if ($limit>=100) {$request = 'http://www.google.com/ie?q=' . urlencode(trim($query)) . '&num=100&hl=ru&lr=&start=' . $limit . '&sa=N';}
$pattern = '/<a title="(.*)" href=(.*)>(.*)<\/a>/isU';
$result = file_get_contents($request);
if(preg_match_all($pattern, $result, $matches))
{
for ($i=0; $i<count($matches[0]); $i++)
{
$link = $matches[2][$i];
$serp[] = $link;
}
}
return $serp;
}
for ($i=$page_start;$i<=$page_end;$i++)
{
$result = parse_serp("google", $zapros, $i);
$log = implode("\r\n",$result);
if($handler) {fwrite($handler,$log);}
$i=$i+100;
if ($i>100) {$i=$i-1;}
}
fclose($handler);
echo "Все данные были сохранены в log.txt";
?>