我正在尝试从网站上获取“标题”,目前我正在使用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";
}
}
有没有快速的方法从每个页面获得'标题'?
答案 0 :(得分:1)
我要走出困境,并猜测file_get_contents比preg_match花了更长的时间,我希望它会非常快。
如果您在很多站点上执行此操作,则此方法可能不起作用,但您可能希望查看字节范围请求。如果您可以预测标记位于HTML响应的前X个字节内,则可以使用字节范围执行部分请求,并避免必须通过网络移动整个文档以获取标记标记。如果页面是动态生成的,则需要服务器上的代码支持这一点。如果它们是静态文档,则支持字节范围请求的可能性很大。
https://serverfault.com/questions/398219/how-can-i-enable-byte-range-request
如第二个答案中的示例所示,还可以通过将“Connection:close”更改为“Connection:keep-alive”来尝试启用keepalive。同样,这只有在您多次访问同一服务器并且服务器已启用它时才会起作用。这两件事在一起可以为每个请求节省大量时间。
答案 1 :(得分: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>';
?>