目前,我正在使用CURL抓取网站。我想可靠地获取标题,描述和关键字。
//Parse for the title, description and keywords
if (strlen($link_html) > 0)
{
$tags = get_meta_tags($link); // name
$link_keywords = $tags['keywords']; // php documentation
$link_description = $tags['description'];
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是人们现在正在使用各种元标记,例如open graph <meta property="og:title" content="The Rock" />。它们也使标签变化很大<title> <Title> <TITLE> <tiTle>。要可靠地获得这些信息非常困难。
我确实需要一些可以一致地提取这些变量的代码。如果有标题,关键字和描述,则可以找到它。因为现在看来很受欢迎。
也许是一种将所有标题提取到titles数组中的方法?然后,抓取网站的开发人员可以选择最好的一个来记录在他们的数据库中。同样适用于关键字和说明。
这不是重复项。我已经搜索了stackoverflow,没有办法将所有“ title”,“ keywords”和“ description”类型标记放置到数组中。
通常get_meta_tags()应该可以满足您的大部分需要,您只需要设置一组级联检查,这些检查将从每个元数据系统中对所需字段进行采样,直到找到一个。例如,这样的事情:
function get_title($url) {
$tags = get_meta_tags($url);
$props = get_meta_props($url);
return @tags["title"] || @props["og:title"] || ...
}
Run Code Online (Sandbox Code Playgroud)
上面的实现显然效率不高(因为如果我们像这样实现所有 getter,你就会为每个 getter 重新加载 URL),而我没有实现get_meta_props()- 这对于正确实现 using 是有问题的pcre_*,并且使用DOMDocument.
尽管需要大量工作,但正确的实现仍然是微不足道的 - 这是外部库解决问题的经典场景!幸运的是,有一个解决方案 - 简单地称为“Embed”,您可以在github上找到它,或者使用 Composer 运行
composer require embed/embed
Run Code Online (Sandbox Code Playgroud)