4

我正在尝试从网站获取“标题”,目前我正在使用preg_match获取标题,但加载速度非常慢。

我目前拥有的:

这会将链接传递给一个函数:

<?php 
foreach($savedLinks as $s)
{
    echo "<div class='savedLink'>";
        echo "<h5>" . getMetaData($s) . "</h5>";
        echo "<a href='" . $s . "'>" . $s . "</a><br />";
    echo "</div>";
}
?>

此函数从传入的每个网站中获取标题:

function getMetaData($url)
{
    if(!@file_get_contents($url))
    {
        return "";
    }
    else
    {
        if(preg_match('/<title>(.+)<\/title>/',file_get_contents($url),$matches) && isset($matches[1]))
            return $matches[1];
        else
            return "Not Found";  
    }
}

有没有一种快速的方法可以从每一页获取“标题”?

4

2 回答 2

1

我将不顾一切地猜测 file_get_contents 比 preg_match 花费的时间要长得多,我希望它会很快。

如果您在许多站点上执行此操作,此方法可能不起作用,但您可能需要查看字节范围请求。如果您可以预测标签位于 HTML 响应的前 X 个字节内,您可以使用 byte-range 执行部分请求,并且避免为了获取标题标签而必须通过网络移动整个文档。如果页面是动态生成的,则需要服务器上的代码支持这一点。如果它们是静态文档,则很有可能支持字节范围请求。

https://serverfault.com/questions/398219/how-can-i-enable-byte-range-request

正如此示例在第二个答案中所建议的那样,还尝试通过将“Connection: close”更改为“Connection: keep-alive”来启用 keepalive。同样,这仅在您多次访问同一服务器并且服务器启用它时才有效。这两件事加在一起可以为每个请求节省大量时间。

于 2013-10-08T00:49:30.323 回答
0

您需要一个 DOM 解析器来快速检索 HTML 页面信息。我在示例中使用了以下 DOM 解析器:

http://simplehtmldom.sourceforge.net/

下载:

http://sourceforge.net/projects/simplehtmldom/files/

例如:

<?php

   include('simplehtmldom_1_5/simple_html_dom.php');

   // Create DOM from URL or file
   $html = file_get_html('http://joinform.com.au');


   foreach($html->find('title') as $e)
      echo $e->innertext . '<br>';


?>
于 2013-10-08T01:18:52.523 回答