<span style='font-size:11pt;line-height:100%'><span style='color:white'>ПАРСЕР Yahoo, Google, MSN, Yandex, Rambler, Aport, Webalta
СКРИПТ ПРОВЕРЕННО РАБОТАЕТ НА PHP5.1.6 И PHP4.4.4!!!</span></span>
<table border="0" align="center" width="95%" cellpadding="0" cellspacing="0"><tr><td>
Исходный код </td></tr><tr><td id="CODE"><?
set_time_limit(400);
$se=array(
'http://search.yahoo.com/search?p=',
'http://www.google.ru/search?q=',
'http://search.live.com/results.aspx?q=',
'http://www.yandex.ru/yandsearch?text=',
'http://www.rambler.ru/srch?words=',
'http://sm.aport.ru/scripts/template.dll?r=',
'http://webalta.ru/search?q='
);
foreach($_GET as $key => $val){$$key=$val;}
if(empty($srch) OR empty($pages)) {
echo '<form><input name="srch" type="text"><input type="submit" value="Go!"><br>';
foreach($se as $num => $url) {
*preg_match('|http:/.*[/.]+(.+)\..+/|',$url,$name);
*$name=ucfirst(strtolower($name[1]));
*echo "<input type=\"checkbox\" name=\"se$num\" ><b>$name</b>";
}
echo '<br>Pages:<input name="pages" type="text" value="1"><br><input type="checkbox" name="showres"><b>Show results</b></form>'; exit;
}
$pages++;$j=0; $srch=rawurlencode(trim($srch)); $allurls=array();
while($j<count($se))
{
$page=NULL;
$url=$se[$j]; $nm='se'.$j; $j++;
if(empty($$nm)) continue;
$page[1][0]=$url.$srch; $i=1;
do{
*$page=str_replace('"', '', $page[1][count($page[1])-1]);
*if(substr($page,0,7) != 'http://')$page=substr($url,0, ($page[0]=='/' ? 0 : 1) + strrpos($url,'/')).$page;
*$html=file_get_contents(html_entity_decode($page) );
*$allurls=array_merge($allurls, geturls($html)); $i++;
}
while(preg_match_all('|.*href=(.+?)[ ">]{1,3}.*'.$i.'<|', $html , $page) AND $i < $pages);
}
if($allurls==array()) {echo '0 URLS FOUND'; exit;}
$allurls=implode('',array_unique($allurls));
$filename=date("d-m-Y_H-i-s").'.txt';
$file = fopen($filename, 'w+');
fwrite($file, $allurls); fclose($file);
echo "<b>Search: $srch<br>Result:<a href='".$filename."'>".$filename."</a></b><br>";
if(!empty($showres)) echo preg_replace('|\n|U', '<br>', $allurls);
function geturls($html) {
$result=array();
$html=html_entity_decode($html);
$html=rawurldecode(str_replace("\n",'',$html)) ;
$urls=explode('http://', preg_replace('|\>.*\<|U','><',$html));
$html=preg_replace('#(\<script.+/script|\<.+\>)#U','',$html);
for($i=0;$i<count($urls); $i++){
*$nd=strpos($urls[$i], '"');
*if($nd){
* $link=preg_replace('|(.*)/\Z|', '$1', trim(substr($urls[$i], 0, $nd)));
* $len=strlen($link);
* if(($li=strpos($link,'/'))==FALSE) {$li=$len-1;}
* $si=0;
* while($si=strpos($html, substr($link,0,$li+1), $si)){
* *$lnk=1; $li=0;
* *while($li<$len) {
* * if($html[$si]!=$link[$li]){
* * *if($html[$si]!=' '){
* * * if( ($html[$si]!='.' OR $html[$si+1]!='.') AND $html[$si]!="\xE2" AND $html[$si]!="\x26") $lnk=0;
* * * break;
* * *} else $li--;}
* * $li++; $si++;}
* *if($lnk){
* * $rends[]=$li-1;
* * $result[]=$link."\n"; } } } }
for($i=0;$i<count($result);$i++) {
*$na=0; if(strpos($result[$i],'/')) $na=1;
* for($j=0;$j<count($result);$j++) {
* *if($j!=$i AND strpos($result[$j],'/') AND strpos(' '.$result[$j], substr(trim($result[$i]),0,$rends[$i] ) )) {
* * if($na) {if(strlen($result[$j]) > strlen($result[$i])) $result[$j]='';}
* * else {$result[$i]=''; break;} } } }
return $result;
}
?>[/quote]
Использование
preg_ функций сведено на минимум, так что скорость теперь еще больше чем у предшественника!
Размером менее 3 Кб, успешно парсит все страницы с каждого поисковика, убирает все лишние и повторяющиеся урлы. Тестите!
P.S. Сортировку по PR ещё сделать?