-1

我有一个包含 URL、标题和描述列的 Mysql 表。有超过 600 万行,每个 URL 列都有一个来自网络的 url。我现在需要为表中的每个 url 添加标题和元描述。我通过下载 dmoz 数据库并从那里获取任何标题和描述来完成部分工作,但我仍然有几百万个 URL。我知道这将是一个漫长的过程,我正在努力找出最快的方法来解决它。

我有以下代码,它使用 CURL 从 url 获取 Title 和 Meta:Decription,但我不确定如何最好地利用 php 来尽快完成工作。我想我应该先将 url 导出到文本文件,所以我们将查找保存到数据库,但我不知道如何从那里开始。我有一台专用服务器(E3-1230V2 和 32 GB)专门用于这项工作,所以电源就在那里,问题是如何最好地使用它......

任何和所有的建议表示赞赏!

这是卷曲代码:

function get_info($url)
{
$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$data = curl_exec($ch);
curl_close($ch);

return $data;
}

$html = get_info($url);

$doc = new DOMDocument();
@$doc->loadHTML($html);
$nodes = $doc->getElementsByTagName('title');
$title = $nodes->item(0)->nodeValue;

$metas = $doc->getElementsByTagName('meta');

for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if($meta->getAttribute('name') == 'description')
$description = $meta->getAttribute('content');

insert into table SET Title ='".$title."', Description = '".$description."'
4

2 回答 2

1

您是否考虑过销售网络抓取即服务的公司?除了每小时获取数万个 URL 之外,获取标题和元标记将是他们可以做的一些最简单的事情。搜索作为服务的爬行有一些与这些公司的链接,我希望他们能够更快地做到这一点,并且最终比你自己更便宜。

于 2013-02-24T11:55:31.890 回答
0

我认为大部分时间都花在通过 HTTP 与远程服务器的交互上,而不是与本地数据库的交互上,因此您可能可以通过在多个并行运行的进程之间分配工作来加快进程。然后,您需要根据需要运行尽可能多的进程以完全利用您的网络带宽。

于 2013-02-17T16:29:10.777 回答