-1

URL、タイトル、説明の列を持つMysqlテーブルがあります。600万を超える行があり、各URL列にはWebからのURLが含まれています。次に、テーブル内の各URLのタイトルとメタ説明を追加する必要があります。dmozデータベースをダウンロードし、そこから可能な限りのタイトルと説明を取得することで、作業の一部を完了しましたが、まだ数百万のURLが残っています。これは長いプロセスになることを私は知っています、そして私はそれを実行するための最も速い方法を見つけようとしています。

CURLを使用してURLからTitleとMeta:Decriptionを取得する次のコードがありますが、phpでそれを最大限に活用して、できるだけ早く作業を完了する方法がわかりません。最初にURLをテキストファイルにエクスポートする必要があると考えているので、データベースへのルックアップを保存しますが、そこからどのように移動するかわかりません。私はこの仕事専用の専用サーバー(32 GBのE3-1230V2)を持っているので、電力はそこにあります。問題はそれをどのように最適に使用するかです...

ありとあらゆるアドバイスに感謝します!

CURLコードは次のとおりです。

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

サービスとしてのWebクロールを販売している企業を検討しましたか?タイトルとメタタグの取得は、1時間に数万のURLを取得する以外に、実行できる最も簡単な方法の一部になります。サービスとしてのクロールを検索すると、そのような企業とのつながりがいくつかあります。彼らはそれをより速く、最終的には自分よりも安くできると思います。

于 2013-02-24T11:55:31.890 に答える
0

ほとんどの時間は、ローカルデータベースではなく、HTTPを介したリモートサーバーとの対話に費やされていると思います。したがって、並行して実行されている複数のプロセスに作業を分散することで、プロセスを高速化できる可能性があります。次に、ネットワーク帯域幅を完全に利用するために必要な数のプロセスを実行する必要があります。

于 2013-02-17T16:29:10.777 に答える