Как стянуть ссылки на страницы?

Статус
В этой теме нельзя размещать новые ответы.
Z

Zloboff

Прохожие
Вообщем проблема заключается в следующем, не могу выдернуть ссылки со страниц Яндекса (Для просмотра ссылки Войди или Зарегистрируйся ключевое слово), нужно собрать доменов столько, сколько указал в форме к примеру 20, он 20 доменов собирает со всех страниц Яндекса... Очень нужна ваша помощь...
 
Zloboff, перечитал 2 раза и ничего не понял. Можно перефразировать, желательно с примером наглядным.
 
Нужно разработать веб-приложение которое по введенному в поле ключевой фразе выводит список доменов первых N сайтов из поисковой выдачи Яндекса. Пользователь должен ввести через форму «Ключевую фразу» и желаемое количество доменов в списке (например, 100 ). Приложение просматривает результаты выдачи Яндекса по введенной ключевой фразе и возвращает результат в виде списка доменов. Если ссылка на сайт в выдаче ведет не на главную страницу, то его url необходимо обрезать и оставить только имя домена (к примеру ya.ru, nulled.ws и т.п.)

Я наковырял только обрезку ссылок до вида ya.ru

Код:
<?php

$domains = 'http://php.ru/index.php';


// Ищем URL
preg_match('@^(?:http://)?([^/]+)@i', $domains, $matches);
$host = $matches[1];

// Берём последние 2 сигмента ссылки
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "Домены: {$matches[0]}\n";
?>
 
Код:
// Берём последние 2 сигмента ссылки
preg_match('/[^.]+\.[a-z]+/', $host, $matches);
echo "Домены: {$matches[0]}\n";
 
насчет разбора выдачи яндекса то мне помогает такая регулярка:
|Для просмотра ссылки Войди или Зарегистрируйся[^)]*)|


и она же кстате выбирает только домены даже не заморачиваясь на полном урле
для того что б показать больше чем 10 элементов выдачи надо просто добавить гет-параметр numdoc либо листать страницы гет параметром "p"
 
PHP:
$num = $argv['1'];
$p = $num / 10;
$i=0;
$query = $argv['2'];
$urls = array();
while($i!=$p){
	if(preg_match("/ /i", $query)) $query = preg_replace("/ /i","+",$query);
	sleep(10);
	$string = file_get_contents("http://www.yandex.ru/yandsearch?p=".$i."&text=".$query);
	preg_match_all("/<span[^>]*class=\"green_url\"[^>]*>(.+?)<\/span>/si",$string,$matches);
	foreach($matches[1] as $k=>$m){
		$m = preg_split("/ |\&nbsp/i", $m);
		$m = preg_replace("/\r|\n|http:\/\/|www\./si","",$m[0]);
		$m = preg_split("/\//i", $m);
		$m = $m[0];
		array_push($urls, $m);	
	}
	$i++;
}
print_r($urls);
 
Я наковырял только обрезку ссылок до вида ya.ru

PHP:
<?php

$domains = 'http://php.ru/index.php';


// Ищем URL
preg_match('@^(?:http://)?([^/]+)@i', $domains, $matches);
$host = $matches[1];

// Берём последние 2 сигмента ссылки
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "Домены: {$matches[0]}\n";
?>

:eek::eek::eek::eek::eek:

Что же вы творите с интерпретатором !?
Это метод очень гесурсоемкий да и излишнев !!!

Вот то что вам нужно:

PHP:
<?PHP
$host=parse_url('http://www.nulled.ws/newreply.php?do=newreply&noquote=1&p=990053');
echo $host['host'];
?>

Добавлено через 9 минут
Вот примерная логика...

Принемаем от формы колличество требуемых ссылок.
Делем это число на 10 а потом прогоняем через функцию cel (получаем колличество страниц которое нужно пройти для сбора ссылок)

Далее конектимся в яше по урлу предварительно тримируя а так же урлэнкодим запрос.
Далее дергаем ссылки прег_мач_аллом и в цыкле выдераем только домен и отправляем его в масив.

Все как только верхний цыкл прохода по страницам кончится мы получим масив с требуемым колличеством доменов в последовательности их размещения на странице и по нужному запросу.

А вот что с этим масивом делать дальше решайте сами...
 
Вот интересный сервис на эту тему ссылки правда не обрезает но напарсить можно много работает только с Яшкиной выдачей ссылки сохраняет в текстовый файл _http://www.seanalyzer.ru/bookmarks/analyze/serp
 
;)

PHP:
<form name="" action="" method="post">
<li><b>Запрос</b></li><input name="query" type="text" value=""><br><br>
<li><b>Колличество ссылок..</b></li><input name="n" type="text" value="">  <br><hr>
<input type="submit" value="Отправить">
</form>
<br><br><br>
<?php

	function parse_yandex($query, $gl)
	{
		for ($i_for=0; $i_for<=$gl; $i_for++){
			if ($i_for=="0"){$n_page="0";} else {$n_page=$i_for-1;}

				$request = "http://yandex.ru/yandsearch?p=$n_page&text=".urlencode(trim($query));
				$pattern = '/<a tabindex=".*" onmousedown=.* href="(.*)" target="_blank">.*<\/a>/isU';

				$result = file_get_contents($request);

				if(preg_match_all($pattern, $result, $matches))
				{
                			for ($i=0; $i<count($matches[0]); $i++)
                			{
                				$link = parse_url($matches[1][$i]);

                				$serp[] = $link['host'];
                			}
                		}

		}


		return $serp;
	}


if ($_POST)
{
	$qq=parse_yandex($_POST['query'], ceil($_POST['n']/10)-1);

	  	for($i=0; $i<=$_POST['n']; $i++)
	  	{
           echo "$i) Сайт <b>$qq[$i]</b> был найден на странице по запросу <b>$_POST[query]</b><hr>";
	  	}
}


?>


PS. Свеже испеченый ))
 
TC отпиши то хоть или не то...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху