Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
「htmlSQL」で
図書館HPにアクセスしてみよう

      LOCAL PHP部
   (株)インフィニットループ
       ke-tai.org
      松井 健太郎
ご注意

• タイトルからご推測いただけると思い
  ますが、本発表はネタ要素が強いです

• この発表はフィクションです。実在の
  事件、団体とは関係あるようで、あま
  り関係ありません

• ネタにマジレスかっこ悪い!!
自己紹介

• LOCAL PHP部 部長(引退間近)

• (株)インフィニットループ代表

• ソーシャルゲームとかを作ってます

• ke-tai.org管理人
今日の内容
• スクレイピングとは
• htmlSQLとは
• インストール&セットアップ
• サンプルプログラムの解説
• スクレイピングを行う際の注意点
• 実践
• まとめ
岡崎市立中央図書館事件
• 岡崎市立中央図書館のウェブサイ
  トにアクセスを繰り返して、ほか
  の利用者が閲覧しにくい状態にし
  たとして、偽計業務妨害で容疑者
  が逮捕された。(後に不起訴)
• 1秒間に1回アクセスしたら落ち
  た...
スクレイピングとは

• 英語で「scrape」= 削ること
 scrape[ skr ip ]
   III[名          V[名][形 をこする,
                         をこする こすって( の状態に す...
htmlSQLとは

• PHPで作られたスクレイピング用ライブ
  ラリ、Jonas John氏が開発

• HTMLの要素をSQLのように取り出すこ
  とができる

• このサイトで興味を持った
 ASTRODEO -真面目にエロサイトを...
インストール&セットアップ

• インストールはすごく簡単

• htmlSQLの公式サイトからzipで落とす
  htmlSQLの公式サイトからzipで
            サイトからzip
  だけ
 http://www.jonasj...
サンプル
include_once("snoopy.class.php");
include_once("htmlsql.class.php");
$wsql = new htmlsql();

// URLに接続に
if (!$wsql->c...
使い方の解説
SELECT href,title FROM a WHERE $class == “list”


                     属性           タグ名             条件


SELECT * F...
注意点(1)

• いざアクセスを開始する前の注意点
• 逮捕されたら困るよね
            / ̄ ̄ ̄\
           / _      ̄ ̄\
           ヽ |☆|         )
           /──...
注意点(2)

• アクセス頻度は低めにしよう
foreach ($loop => $row) {
    ・
    ・
   sleep(2);
}



• 500や503エラーを見るようにしよう
if (!preg_match('/^H...
実践(1)

• さて、いざ図書館にアクセス
• 大きな問題に気づいた
• htmlSQLはPOSTできない




検索エンジンなどを見ていて、なんとなく検索結果
はGETというイメージがあったが、実際はどれも
POSTだった
実践(2)

• んー・・・

• POSTが使えるように改造するのはそう
  大変じゃないみたいだが・・・

• 正直別に図書館HPにアクセスしたいわ
  けじゃないし・・・
実践(3)

• 予定を変更して

• 男の子のロマン、エロ画像収集にサンプルプ
  ログラムを変更

• 「ふたば★ちゃんねる」から画像を収集する
  プログラムを作成してみた

• 画像URLを抽出しリスト化するプログラムを
  作る

•...
実践(4)
include_once("snoopy.class.php");
include_once("htmlsql.class.php");
$wsql = new htmlsql();


for ($p = 1; $p < 5; $...
動作結果




       (;´Д`)
まとめ

• 図書館にアクセスってなに?
• htmlSQLを使うと、スクレイピングをす
  ごく楽に行うことができる
• POSTには対応していないので、検索結
  果などから切り出すなどの処理は苦手
  のようだ
• 十分なスリープをいれた...
おまけ

• どうやらhtmlSQLは、SEOに使うと便利
  らしい
htmlSQLでモバイルSEOを簡単にシステムツール化して管理する | 携帯サイトをつくろう。
http://www.plusmb.jp/2009/01/30/2378.h...
おまけ(2) スタッフ募集のお知らせ
• 株式会社インフィニットループでは、
  一緒に楽しんでゲームを作ってくれる
  スタッフを募集しています

• PHPプログラマ
  ActionScriptプログラマ
  サーバエンジニア

• 興味...
Upcoming SlideShare
Loading in …5
×

「Html sql」で図書館hpにアクセスしてみよう

4,552 views

Published on

  • Be the first to comment

「Html sql」で図書館hpにアクセスしてみよう

  1. 1. 「htmlSQL」で 図書館HPにアクセスしてみよう LOCAL PHP部 (株)インフィニットループ ke-tai.org 松井 健太郎
  2. 2. ご注意 • タイトルからご推測いただけると思い ますが、本発表はネタ要素が強いです • この発表はフィクションです。実在の 事件、団体とは関係あるようで、あま り関係ありません • ネタにマジレスかっこ悪い!!
  3. 3. 自己紹介 • LOCAL PHP部 部長(引退間近) • (株)インフィニットループ代表 • ソーシャルゲームとかを作ってます • ke-tai.org管理人
  4. 4. 今日の内容 • スクレイピングとは • htmlSQLとは • インストール&セットアップ • サンプルプログラムの解説 • スクレイピングを行う際の注意点 • 実践 • まとめ
  5. 5. 岡崎市立中央図書館事件 • 岡崎市立中央図書館のウェブサイ トにアクセスを繰り返して、ほか の利用者が閲覧しにくい状態にし たとして、偽計業務妨害で容疑者 が逮捕された。(後に不起訴) • 1秒間に1回アクセスしたら落ち たという図書館側のサーバのスペ ランカーっぷりと、警察の冷酷な 対応が注目され話題に。 • いまスクレイピングがアツい!!
  6. 6. スクレイピングとは • 英語で「scrape」= 削ること scrape[ skr ip ] III[名 V[名][形 をこする, をこする こすって( の状態に する; [III[名]([副])/V[名][形]]…をこする,こすって(…の状態に)する; 付着物などを〉(…から こすり落 などを〉( から) 〈付着物などを〉( から)こすり落とす • ウェブサイトのデータを取得し、必要 な部分だけを抽出して利用すること • 例えば、ページ内のリンクを全て抽出 したい、ランキングサイトの上位5番目 までのデータを取得したい、など
  7. 7. htmlSQLとは • PHPで作られたスクレイピング用ライブ ラリ、Jonas John氏が開発 • HTMLの要素をSQLのように取り出すこ とができる • このサイトで興味を持った ASTRODEO -真面目にエロサイトを作ってみた【プログラマ編】 http://astrodeo.com/blog/archives/257
  8. 8. インストール&セットアップ • インストールはすごく簡単 • htmlSQLの公式サイトからzipで落とす htmlSQLの公式サイトからzipで サイトからzip だけ http://www.jonasjohn.de/lab/htmlsql. http://www.jonasjohn.de/lab/htmlsql.htm jonasjohn.de/lab/htmlsql • 二つのファイルをincludeすれば使える つのファイルをincludeすれば使 ファイル すれば snoopy.class.php snoopy.class.php htmlsql.class.php htmlsql.class.php .class.
  9. 9. サンプル include_once("snoopy.class.php"); include_once("htmlsql.class.php"); $wsql = new htmlsql(); // URLに接続に if (!$wsql->connect('url', 'http://codedump.jonasjohn.de/')) { print 'Error while connecting: ' . $wsql->error; exit; } クエリ実行 // クエリ実行 if (!$wsql->query('SELECT * FROM *')) { print "Query error: " . $wsql->error; exit; } array 0 => // 結果表示 array( foreach($wsql->fetch_array() as $row) { ‘属性’ => ‘値’ var_dump($row); ) }  ・  ・  ・
  10. 10. 使い方の解説 SELECT href,title FROM a WHERE $class == “list” 属性 タグ名 条件 SELECT * FROM * てのHTMLを取得  → 全ての を SELECT text FROM title タイトルタグの  → タイトルタグのtextを取得を ==であることに注意 SELECT href,title FROM a (イコール2つ) てのAタグタグの  → 全ての タグのhrefとtitleを取得 と を SELECT * FROM meta WHERE $name == “description” タグで のものだけを取得  → metaタグでname=“description”のものだけを取得 タグ のものだけを SELECT href FROM a WHERE preg_match(“/^test¥//”, $href) タグで 」から始まるものだけを取得  → aタグでhrefが「test/」から始まるものだけを取得 タグ が PHPタグが使える ※evalを使っているので注意
  11. 11. 注意点(1) • いざアクセスを開始する前の注意点 • 逮捕されたら困るよね        / ̄ ̄ ̄\       / _      ̄ ̄\       ヽ |☆|         )       /──二二二二二二l       ヽ二二二二二/   丶       /__             |       |    ひ    |    │      ノ          |    |     (;;;)          |    |                      (⌒)___(⌒)     ヽ           |    ヽ                    / ̄       ̄\      \_____ノ  \__/                   /            l          __|       /  \                   |  ⌒    ⌒    |         / ヽ____/   /\                 │ ■■■■■    │        /| │__丿;;;\_/\_/\ ヽ                |    (⌒)       |       /  ヽ/|ヽ;;;;;;;;;ノ/ \   丶/丶               |   ___T____      |       |   | | /;;;;;|/\─       丶              ヽ   l-- l      /__       /   | |/;;;;;;;/  >__  /   |               \___ ̄____/;;;;;;ヽ       j  | | |;;;;;;;/  /|--┌│ |   │               / ヽ;;;;;|     /⌒l;;;;;;;;;|       | │ | |;;;;;/  /│ ││ |   │              │  |;;;;;L___/  /;;;;;;;;;|      ノ  | │ |;;/  / |___|__| │   |              /   |;;;;;;;;;;;;;;;;;/  /;;;;;;;;;;;|      |  |  |__|;;/ /        |   │             |   |;;;;;;;;;;;;;;/  /;;;;;;;;;;;;;|      ノ  |  \|/         |    │            /   /;;;;;;;;;/  /;;;;;;;;;;;;;;;;;;|     /  |              / ̄丶 |          (⌒(⌒ヾヾ/   /;;;;;;;;;;;;;;;;;;;;;;;;;|    /    ヽ______彡( ̄ ̄ヽ ̄|  |         (  (   |ヾ___/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|   /\   /;;;;[__];;;;;;;;;;;彡(二二 ││ /          (_(_ノゞゞ|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|   ゝ\\/ ̄|      ̄ ̄巛(____ノ_/              彡彡 |;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/|  (Ο Ο)\_ノ         彡彡∠彡彡彡彡彡彡彡彡彡彡彡彡彡    |;;;;;;;;;;;;;;/ ̄ ̄ ̄ /   ( Ο丿 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|                      ヽ;;;;;/      /     ̄   |               │                      | /      /
  12. 12. 注意点(2) • アクセス頻度は低めにしよう foreach ($loop => $row) { ・ ・ sleep(2); } • 500や503エラーを見るようにしよう if (!preg_match('/^HTTP¥/1¥.1 200 OK/', $wsql->snoopy->response_code)) { print 'Error status code: ' . $wsql->snoopy->response_code; exit; // 処理を中止する 処理を中止する } • robots関連の設定を見てみよう meta, robots.txt SELECT content FROM meta WHERE $name == “robots“ → 'content' => string 'INDEX,FOLLOW' (length=12)
  13. 13. 実践(1) • さて、いざ図書館にアクセス • 大きな問題に気づいた • htmlSQLはPOSTできない 検索エンジンなどを見ていて、なんとなく検索結果 はGETというイメージがあったが、実際はどれも POSTだった
  14. 14. 実践(2) • んー・・・ • POSTが使えるように改造するのはそう 大変じゃないみたいだが・・・ • 正直別に図書館HPにアクセスしたいわ けじゃないし・・・
  15. 15. 実践(3) • 予定を変更して • 男の子のロマン、エロ画像収集にサンプルプ ログラムを変更 • 「ふたば★ちゃんねる」から画像を収集する プログラムを作成してみた • 画像URLを抽出しリスト化するプログラムを 作る • 画像自体のDLは、FlashGet的なツールや、 $ wget –i [リスト]で行う。
  16. 16. 実践(4) include_once("snoopy.class.php"); include_once("htmlsql.class.php"); $wsql = new htmlsql(); for ($p = 1; $p < 5; $p++) { // ページに接続 ページに if (!$wsql->connect('url', sprintf(http://jun.2chan.net/b/ . '%d.htm', $p))) {     die('Error while connecting: ' . $wsql->error);      } // ステータスコードをチェック ステータスコードを if (!preg_match('/^HTTP¥/1¥.1 200 OK/', $wsql->snoopy->response_code)) { die('Error status code: ' . $wsql->snoopy->response_code); } // SQLを実行 を if (!$wsql->query('SELECT href FROM a WHERE preg_match("/thumb(.*)¥.(jpg|gif|png)/", $text)')) { die("Query error: " . $wsql->error); } // 結果を出力 結果を foreach($wsql->fetch_array() as $row) { (*゚∀゚) if (isset($row['href'])) { echo $row['href'] . "¥n"; すんごい楽 } } (所要時間10分弱) // スリープ処理 スリープ処理 sleep(2); }
  17. 17. 動作結果 (;´Д`)
  18. 18. まとめ • 図書館にアクセスってなに? • htmlSQLを使うと、スクレイピングをす ごく楽に行うことができる • POSTには対応していないので、検索結 果などから切り出すなどの処理は苦手 のようだ • 十分なスリープをいれたり、ステータ スコードをみるなど、相手サーバの事 を思いやる心が重要
  19. 19. おまけ • どうやらhtmlSQLは、SEOに使うと便利 らしい htmlSQLでモバイルSEOを簡単にシステムツール化して管理する | 携帯サイトをつくろう。 http://www.plusmb.jp/2009/01/30/2378.html > さらにやってることは、スクレイピングと同じなので、 > 使い方によってはもっと色んなことができます。 > SEOで言うと結構重要なアレなんかもこれを使えば簡単にできますね。 > 具体的には書けないですが、色んな使い方を考えて使ってみて下さい。 会場の中で知っている人がいましたら、こっそり教えて 下さい
  20. 20. おまけ(2) スタッフ募集のお知らせ • 株式会社インフィニットループでは、 一緒に楽しんでゲームを作ってくれる スタッフを募集しています • PHPプログラマ ActionScriptプログラマ サーバエンジニア • 興味のある方は、直接声を掛けていた だくか、HPからお問い合わせください

×