[Ищу] Собрать тайтлы с группы урлов

Maxiduk

Постоялец
Регистрация
30 Ноя 2007
Сообщения
130
Реакции
13
Чем?
То есть на входе - допустим 1К урлов с различных сайтов, нужно собрать их тайтлы, то есть то, что находится <title>вот тут</title>
 
Content Downloader - поидее справиться, я раньше использовал скрипт для создания карты сайта о как раз тайтл делает анкором ссылки (далее
notepad++ чистишь от мусора и готово)
 
Если надо, могу выложить многопоточный на php,
В urls.txt ложиш список файлов, на выходе в urls_title.txt каждый title с новой строки.
 
в alsubmittere в "базе каталогов" есть функция "определить параметры сайтов", среди них - определить название сайтов, тег <title>. 100 потоков максимум, есть задержка.
 
Чем?
То есть на входе - допустим 1К урлов с различных сайтов, нужно собрать их тайтлы, то есть то, что находится <title>вот тут</title>
примерно так
PHP:
<?php
define('LOWERCASE',3);
define('UPPERCASE',1);
function detect_cyr_charset($str) {
    $charsets = Array(
                      'k' => 0,
                      'w' => 0,
                      'd' => 0,
                      'i' => 0,
                      'm' => 0
                      );
    for ( $i = 0, $length = strlen($str); $i < $length; $i++ ) {
        $char = ord($str[$i]);
        //non-russian characters
        if ($char < 128 || $char > 256) continue;
        
        //CP866
        if (($char > 159 && $char < 176) || ($char > 223 && $char < 242)) 
            $charsets['cp866']+=LOWERCASE;
        if (($char > 127 && $char < 160)) $charsets['cp866']+=UPPERCASE;
        
        //KOI8-R
        if (($char > 191 && $char < 223)) $charsets['Koi8-R']+=LOWERCASE;
        if (($char > 222 && $char < 256)) $charsets['Koi8-R']+=UPPERCASE;
        
        //WIN-1251
        if ($char > 223 && $char < 256) $charsets['Win-1251']+=LOWERCASE;
        if ($char > 191 && $char < 224) $charsets['Win-1251']+=UPPERCASE;
        
        //MAC
        if ($char > 221 && $char < 255) $charsets['Mac']+=LOWERCASE;
        if ($char > 127 && $char < 160) $charsets['Mac']+=UPPERCASE;
        
        //ISO-8859-5
        if ($char > 207 && $char < 240) $charsets['UTF-8']+=LOWERCASE;
        if ($char > 175 && $char < 208) $charsets['UTF-8']+=UPPERCASE;
        
    }
    arsort($charsets);
    return key($charsets);
}
function Win2UTF8($string) 
{
$len = strlen($string);
$c208 = chr(208);
$c209 = chr(209);

for ($i = 0; $i < $len; $i++)
{
if ($string[$i] != "\n") {
$c = ord($string[$i]);
if ($c <= 127) $t .= chr($c);
elseif ($c >= 192 && $c <= 207) $t .= $c208.chr($c - 48);
elseif ($c >= 208 && $c <= 239) $t .= $c208.chr($c - 48);
elseif ($c >= 240 && $c <= 255) $t .= $c209.chr($c - 112);
elseif ($c == 184) $t .= $c209.chr(145); // ё
elseif ($c == 168) $t .= $c208.chr(129); // Ё
else $t .= chr($c);
}
else $t .= "";
}
return $t;
}
function ip_valid_1($val='') 
{
 $d = explode('.',$val);
 for ($x=0; $x<4; $x++) if (!is_numeric($d[$x])) return false;
 return true;
}
function defconvert_win2utf($string)
{
if (detect_cyr_charset($string) == 'Win-1251')
{
// Function for conver Windows (CP1251) to UTF-8
return Win2UTF8($string);
}
else
{
return $string;
}
}
function get_web_page( $url )
{
  $uagent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8";

  $ch = curl_init( $url );

  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  // возвращает веб-страницу
  curl_setopt($ch, CURLOPT_REFERER,"http://google.com");
  curl_setopt($ch, CURLOPT_HEADER, 0);           // не возвращает заголовки
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   // переходит по редиректам
  curl_setopt($ch, CURLOPT_ENCODING, "");        // обрабатывает все кодировки
  curl_setopt($ch, CURLOPT_USERAGENT, $uagent);  // useragent
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // таймаут соединения
  curl_setopt($ch, CURLOPT_TIMEOUT, 120);        // таймаут ответа
  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);       // останавливаться после 10-ого редиректа

  $content = curl_exec( $ch );
  $err     = curl_errno( $ch );
  $errmsg  = curl_error( $ch );
  $header  = curl_getinfo( $ch );
  curl_close( $ch );

  $header['errno']   = $err;
  $header['errmsg']  = $errmsg;
  $header['content'] = $content;
  return $header;
}

$file=file("urls.txt");
$fp=fopen("title.txt","w");
$count_str=count($file);
for ($i=0;$i<$count_str;$i++){
$result=get_web_page( $file[$i] );
//print_r($result);
$content = $result['content'];
preg_match('/<title>(.*?)<\/title>/si',$content,$xtitle);

$title=iconv('utf-8','windows-1251',defconvert_win2utf(htmlspecialchars($xtitle[1])));


$title_url = $title.";".trim($file[$i]);
fwrite($fp,$title_url."\n");
}
fclose($fp);
?>
 
Апну тему, нет ли у кого паука для сбора title со страниц:
Чтобы на входе урл главной страницы, на выходе давал все ссылки с сайта + тайтлы к страницам?
 

Идеальный вариант для моей задачи, она у меня давно была установлена, но я как-то подзабыл что она и хтмл карту создает), раньше только для создания xml карт для гугла использовал...
 
Назад
Сверху