0

シンプルなHTMLページのタイトル、説明、キーワードをスクレイプするためのシンプルな3つの関数を作成しました。これは、タイトルをスクレイプする最初の関数です。

function getPageTitle ($url)
{
    $content = $url;
    if (eregi("<title>(.*)</title>", $content, $array)) {
        $title = $array[1];
        return $title;
    }
}

それはうまく機能し、それらは説明とキーワードをこすり取る2つの機能と機能しないものです

function getPageKeywords($url)
{
    $content = $url; 
    if ( preg_match('/<meta[\s]+[^>]*?name[\s]?=[\s\"\']+keywords[\s\"\']+content[\s]?=[\s\"\']+(.*?)[\"\']+.*?>/i', $content, $array)) { 
        $keywords = $array[1];  
        return $keywords; 
    }  
}
function getPageDesc($url)
{
    $content = $url; 
    if ( preg_match('/<meta[\s]+[^>]*?name[\s]?=[\s\"\']+description[\s\"\']+content[\s]?=[\s\"\']+(.*?)[\"\']+.*?>/i', $content, $array)) { 
        $desc = $array[1];  
        return $desc; 
    }  
}

preg_match行に何か問題があるかもしれないことは知っていますが、実際に多くのことを試したのかわかりませんが、機能しません

4

2 に答える 2

2

get_meta_tagsを使用してみませんか?PHPドキュメントはこちら

<?php
// Assuming the above tags are at www.example.com
$tags = get_meta_tags('http://www.example.com/');

// Notice how the keys are all lowercase now, and
// how . was replaced by _ in the key.
echo $tags['author'];       // name
echo $tags['keywords'];     // php documentation
echo $tags['description'];  // a php manual
echo $tags['geo_position']; // 49.33;-86.59
?>

パラメータは、URL、ローカルファイル、または文字列のいずれかに変更できます。

于 2012-06-15T03:54:15.073 に答える
1

phpのネイティブDOMDocumentを使用してHTMLを解析してから正規表現を使用することをお勧めします。今日では、多くのサイトでキーワードや説明タグを追加することすらできないため、常に存在することに依存することはできません。ただし、DOMDocumentを使用してこれを行う方法は次のとおりです。

<?php 
$source = file_get_contents('http://php.net');

$dom = new DOMDocument("1.0","UTF-8");
@$dom->loadHTML($source);
$dom->preserveWhiteSpace = false;

//Get Title
$title = $dom->getElementsByTagName('title')->item(0)->nodeValue;

$description = '';
$keywords = '';
foreach($dom->getElementsByTagName('meta') as $metas) {
    if($metas->getAttribute('name') =='description'){ $description = $metas->getAttribute('content'); }
    if($metas->getAttribute('name') =='keywords'){    $keywords = $metas->getAttribute('content');    }
}

print_r($title);
print_r($description);
print_r($keywords);
?> 
于 2012-06-15T03:51:02.157 に答える