0

我编写了简单的 3 个函数来抓取简单 html 页面的标题、描述和关键字,这是第一个抓取标题的函数

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 回答