Малко помощ за crawler

radio_stun4fun

Registered
Написах си файла с функциите:

Код:
<?php
function get_page_title($url)
{
	$html = file_get_contents($url);
	
	$matches = array();
	$pattern = '/<title>(.*)<\/title>/';
	preg_match($pattern, $html, $matches);
	
	$pagetitle = $matches[1];
	echo '<b>Заглавие</b> '.$pagetitle.'<br />';

	
}

function get_page_description($url)
{

	$html = file_get_contents($url);
	
	$matches = array();
	$pattern = '/<meta name="description" content="(.*)" \/>/';
	preg_match($pattern, $html, $matches);
	
	$description = $matches[1];
	echo '<b>Описание: </b>'.$description. '<br />';


}

function get_page_keywords($url)
{

	$html = file_get_contents($url);
	
	$matches = array();
	$pattern = '/<meta name="keywords" content="(.*)" \/>/';
	preg_match($pattern, $html, $matches);
	
	$keywords = $matches[1];
	echo '<b>Ключови думи: </b>'.$keywords. '<br />';

}

function makeURL($url)
{

	$html = file_get_contents($url);
	global $matches;
	preg_match_all('/(href=")(.*?)(")/u',$html,$matches);

}

function db_init($host,$user,$pass,$database)
{

	$connect_error = 'Грешка при връзката с MySQL база данни.';
	$select_error = 'Грешка при селектирането на MySQL база данни.';

	$connect = mysql_connect($host,$user,$pass) or die($connect_error);
	$select_db = mysql_select_db($database,$connect) or die($select_error);


}

function run_query($sql)
{

	mysql_query('SET NAMES UTF8');
	mysql_query('SET CHARACTER UTF8');

return mysql_query($sql);

}

function error_handling()
{
	error_reporting(E_ALL^E_NOTICE);
}

?>

Ето го и самия index.php:

Код:
<?php
ob_start();
session_start();

include 'functions.php';

header('Content-type: text/html; encoding: UTF-8');
error_handling();

if($_SESSION['is_logged']===true)
{

	db_init('localhost','haha','haha','haha');
	echo '<a href="logout.php">Изход</a><br /><br />';

	$site = 'http://motogp-bulgaria.com';

		get_page_title($site);
		get_page_description($site);
		get_page_keywords($site);
		makeURL($site);
}
else
{

	if(isset($_POST['pass']))
	{

		$pass = test;
		$post_pass = addslashes(trim($_POST['pass']));

		if($post_pass == $pass)
		{
			$_SESSION['is_logged']=true;
			$_SESSION['admin_info'] = md5($pass);

			header('Location: index.php');

		}
	}

	echo '
	<form method="post" action="">
	Парола: <br />
	<input type="password" name="pass" value="" />
	<input type="submit" name="submit" value="Влез" />
	</form>';

}
?>

Въпросът ми е как да вкарам функциите в един цикъл и да се изпълняват докато има линкове, които водят към други страници. Става дума за тези функции:

Код:
get_page_title($site);
get_page_description($site);
get_page_keywords($site);
makeURL($site);

В цикъла да ми показват информацията за страниците. :wink: Благодаря предварително. Който помогне взима точица
 
Някак си подвеждаща ми се струва тая тема?
Правиш ги в един масив , и с един for цикъл ги прекарваш всичките , или ги вадиш от базата данни с while и пак си ги прекарваш всичките линкове?
Предполагам , че не съм познал .. така ,че би ли споделил от къде идват тея линкове към други страници?
 
Има си една функция makeURL, взима съдържанието на цялата страница и намира линковете с един прост regex с preg_match(). Въпросът ми е как да ги вкарам в цикъл, и да взима информацията от страниците, да ги записва. С while цикъл ще стане, ама какво да е условието?


Код:
$site= '';

while(някакво условие)
{
get_page_title($site);
get_page_description($site);
get_page_keywords($site);
makeURL($site);
}

и всъщност в цикъла при всяко изпълнение $site да присвоява някаква стойност. Надявам се да съм се изразил добре

:wink:
 
със preg_match_all взимаш всички линкове в страницата
После с foreach минаваш през върнатия масив ;)
 
radio_stun4fun каза:
Какво да условието на цикъла

$matches[2] as $link

?
Код:
preg_match_all('/(<a href=("|\'))([0-9a-zA-Z\=\?\&\-\_\+\%\:\/\.]{1,})("|\')?/i', $stranica, $linkove);
foreach($linkove[3] as $link) {
 echo $link;
}
 
Аз това го оправих, но имам друг проблем. Има линкове, които не са със зададен пълен път, тоест нещо като:

Код:
?page=alabala

Тоест ботът не може да я намери, защото трябва пълен път, тоест да сетна някаква константа като:

Код:
define(HOST, $_SERVER['HTTP_HOST']);

обаче нещо не ми идва на ум как ще прави линковете например

Код:
http://domain.com/?page=alabala

Надявам се ме разбра :wink: Иначе ти вземаш точката
 
Никой ли не ме разбра? Имам сайт domain.com. В него имам линк към страница от същия сайт. Например:

Код:
<a href=">filename.ext">текст</a>

Как да направя така, че да взима целия път до страницата?

Код:
domain.com/filename.ext

От друга страна като имам линк към страница в друг сайт, да си взима целия линк. Например

http://domain2.com/dir/filename.ext
 

Back
Горе