クローラを作る技術と設計 (毎週のハンズオン勉強会資料)

32,758 views

Published on

シス創勉強会資料

Published in: Technology
0 Comments
36 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
32,758
On SlideShare
0
From Embeds
0
Number of Embeds
891
Actions
Shares
0
Downloads
177
Comments
0
Likes
36
Embeds 0
No embeds

No notes for slide

クローラを作る技術と設計 (毎週のハンズオン勉強会資料)

  1. 1. クローラを作る技術と設計<br />PHP でやるお(^ω^)<br />
  2. 2. 目次<br />スクレイピングの技術<br />XPath<br />正規表現<br />サーバーの設計<br />
  3. 3. XPath<br />XML や HTML の任意の位置を取得するための式<br />XPathエンジンがあれば、 XPathを指定して HTML 上の値を簡単に持ってこれる<br />
  4. 4. XPath<br /><?php<br />$url = 'http://www.nicovideo.jp/';<br />libxml_use_internal_errors(true);<br />$doc = new DOMDocument();<br />$doc->loadHTML(file_get_contents($url));<br />libxml_clear_errors();<br />$xpath = new DOMXPath($doc);<br />foreach ($xpath->query('//a') as $node) {<br /> echo $node->textContent . "n";<br />}<br />
  5. 5. XPath<br />練習<br />ニコニコ動画の動画再生数とコメント数をスクレイピングしてみよう<br />
  6. 6. 正規表現<br />任意の文字列に対して、指定したパターンにマッチしているかを試す<br />パーサーではないので、構造を持ったデータには弱い<br />構造を持たないフラットなデータに良い。<br />トークナイザ<br />バリデータ<br />オートマトンを描くと理解しやすい<br />
  7. 7. 正規表現<br />$reg = '/As?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+z/u';<br />if (!preg_match($reg, $str)) {<br /> throw new Exception('URL is invalid!');<br />}<br />1<br />s<br />-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#<br />s<br />1<br />1<br />A<br />://<br />z<br />http<br />2<br />2<br />2<br />← これは優先順位<br />X<br />
  8. 8. 正規表現<br />練習<br />Apache のログファイルから、 IP アドレス別アクセス数を出してみよう<br />
  9. 9. クローラの設計<br />リクエスト時にクロールする<br />定期的にクロールする<br />ジョブキューを使う<br />
  10. 10. リクエスト時にクロールする<br />2<br />インターネット<br />1<br />ウェブサーバ<br />3<br />
  11. 11. 定期的にクロールする<br />インターネット<br />データベースサーバ<br />ウェブサーバ<br />クローラサーバ<br />
  12. 12. ジョブキューを使う<br />インターネット<br />データベースサーバ<br />データ<br />ウェブサーバ<br />job<br />job<br />job<br />クローラサーバ<br />
  13. 13. プロセス管理<br />cron<br />daemon<br />
  14. 14. cron<br /><ul><li>定期的にプログラムを実行
  15. 15. とても簡単
  16. 16. コマンドラインで動くプログラムをそのまま使える</li></li></ul><li>cron<br />$ vim crontab.txt<br />12 4 * * * php /home/user/crawl_user_page.php<br />34 5 * * * php /home/user/crawl_top_page.php<br />$ crontab < crontab.txt<br />
  17. 17. daemon<br />バックグラウンドで起動するプログラム<br />親プロセスを持たない<br />起動方法、終了方法を準備する必要がある<br />daemon 用にプログラムを書かなければいけない<br />
  18. 18. daemon<br />require_once("System/Daemon.php");<br />System_Daemon::setOptions(array(<br /> 'appName' => 'crawler'<br />));<br />System_Daemon::start();<br />while (true) {<br /> …<br />System_Dameon::iterate(5);<br />}<br />System_Daemon::stop();<br />

×