記録

クローラーするサービスの基礎。


クローラーするサービスの基礎のソースを
載せときます。殆どサイボウズ・ラボの人が書いたコードです。
このサンプルソースをそのまま貼り付けても
一階層のリンクしか取得できません。
再帰処理の部分をコメントアウトしているからです。
ちなみにコメントアウトを外してもメモリオーバーでおそらく
大体のサーバでエラーが出力されます。
どうしたら良いのかといえば、DBに1階層目のリンクデータ、
2階層目のリンクデータという様に保存する機能を施す。
次にajaxで階層を受け渡しながら、再帰処理を行う。
再帰処理が終わる要素はそれ以上、下階層がないことを
判断する。そのためには保存したデータを検索することが重要になる。
=(イコール)
新規にデータを登録しているうちは、再帰処理を終わらせないように
することが大事になる。
これの機能を加えることで巡回する事が可能になる。
ここで注意しないといけないのが、外部リンクを保存しないことです。
外部リンクまで保存していると巡回は永遠に終わらないでしょう・・・。
トイウコトデ
ほぼ??コピペソースを貼っときます。
http://zip358.com/tool/crawler/
= $link_url;
echo json_encode($obj);
exit;
function get_linkarray($link) {
$context = stream_context_create(array(‘http’=>array(‘method’=>’GET’, ‘header’=>’User-Agent: simplecrawler.library.php 0.0.1’)));
$resultR = array();
$resultS = simplecrawler($context, $link, $link, parse_url($link));
foreach($resultS as $k => $v) {
$resultR[] = $v;
}
return $resultR;
}
function simplecrawler($context, $link, $burl, $base, $linkArrayDat = array()) {
$linkArrayPre = crawler_link(crawler_page($link, $burl, $base, $context), $link, parse_url($link));
foreach($linkArrayPre as $k => $v) {
if(!isset($linkArrayDat[$v])) {
$linkArrayDat[$v] = $v;
//$linkArrayDat = array_merge($linkArrayDat, simplecrawler($context, $v, $burl, $base, $linkArrayDat));
}
}
return $linkArrayDat;
}
function crawler_page($link, $burl, $base, $context) {
if(strpos($link, $burl) === 0) {
$page = @file_get_contents($link, false, $context);
return $page === FALSE ? null : $page;
} else {
return null;
}
}
function crawler_link($page, $burl, $base) {
$linkArray = array();
if($page === null) {
return $linkArray;
}
preg_match_all(‘/[\s\n\t]+href\s?=\s?”(.*?)”/i’, $page, $href);
for($i = 0; $i < count($href[1]); $i++) {
$link = $href[1][$i];
if(preg_match(‘/^http(s)*\:\/\//’, $link)) {
$result = $link;
} elseif(preg_match(‘/^\/.+$/’, $link)) {
$result = $base[‘scheme’] . ‘://’ . $base[‘host’] . $link;
} else {
// echo $base[‘path’] . “\n”;
$b = preg_split(‘/\//’, dirname($base[‘path’]));
$t = preg_split(‘/\//’, $link);
foreach($t as $v) {
$l = $v === ‘.’ ? true : ($v === ‘..’ ? array_pop($b) : array_push($b, $v));
}
$result = $base[‘scheme’] . ‘://’ . $base[‘host’] . join(‘/’, $b);
}
$linkArray[$result] = $result;
}
return $linkArray;
}

 

土日にWebで何か作ります!!前のページ

ファイナルファンタジー15の体験版をしてみた_(:3」∠)_次のページ

関連記事

  1. 記録

    Yahooゲームプラス、ブラウザでゲームが出来ちゃう。

    Yahooゲームプラス、ブラウザでゲームが出来ちゃう。やってみたい…

  2. 記録

    自動化の波。

    自動化の波がすぐそこまで来ているような気がする。ITエンジニア…

  3. 記録

    ぐちぐち文句言ってもハジマラナイ。前へ進もう!!

    今日のお題は「ぐちぐち文句言ってもハジマラナイ。前へ進もう!!」です…

  4. 記録

    何倍かの勉強をしているひと。

    ある人が土日、とある場所で毎週のように勉強しているのを自分は知ってい…

  5. 記録

    April Fools' Day :)

    Today is April Fool's Day, isn'…

  6. 記録

    PAY.jpというAPIは便利かもしれない。{決済API}

    PAY.jpというAPIは便利かもしれない。これを使用したいとおも…

PAGE TOP