Successfully reported this slideshow.
「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,485 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からお問い合わせください

×