SlideShare a Scribd company logo
1 of 20
Download to read offline
「htmlSQL」で
図書館HPにアクセスしてみよう

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

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

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

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

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

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

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

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

• 英語で「scrape」= 削ること
 scrape[ skr ip ]
   III[名          V[名][形 をこする,
                         をこする こすって( の状態に する;
 [III[名]([副])/V[名][形]]…をこする,こすって(…の状態に)する;
   付着物などを〉(…から こすり落
         などを〉( から)
 〈付着物などを〉( から)こすり落とす



• ウェブサイトのデータを取得し、必要
  な部分だけを抽出して利用すること

• 例えば、ページ内のリンクを全て抽出
  したい、ランキングサイトの上位5番目
  までのデータを取得したい、など
htmlSQLとは

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

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

• このサイトで興味を持った
 ASTRODEO -真面目にエロサイトを作ってみた【プログラマ編】
 http://astrodeo.com/blog/archives/257
インストール&セットアップ

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

• 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.
サンプル
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);                                      )
}                                                      ・
                                                       ・
                                                       ・
使い方の解説
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を使っているので注意
注意点(1)

• いざアクセスを開始する前の注意点
• 逮捕されたら困るよね
            / ̄ ̄ ̄\
           / _      ̄ ̄\
           ヽ |☆|         )
           /──二二二二二二l
           ヽ二二二二二/   丶
           /__             |
           |    ひ    |    │
          ノ          |    |
         (;;;)          |    |                      (⌒)___(⌒)
         ヽ           |    ヽ                    / ̄       ̄\
          \_____ノ  \__/                   /            l
              __|       /  \                   |  ⌒    ⌒    |
             / ヽ____/   /\                 │ ■■■■■    │
            /| │__丿;;;\_/\_/\ ヽ                |    (⌒)       |
           /  ヽ/|ヽ;;;;;;;;;ノ/ \   丶/丶               |   ___T____      |
           |   | | /;;;;;|/\─       丶              ヽ   l-- l      /__
           /   | |/;;;;;;;/  >__  /   |               \___ ̄____/;;;;;;ヽ
           j  | | |;;;;;;;/  /|--┌│ |   │               / ヽ;;;;;|     /⌒l;;;;;;;;;|
           | │ | |;;;;;/  /│ ││ |   │              │  |;;;;;L___/  /;;;;;;;;;|
          ノ  | │ |;;/  / |___|__| │   |              /   |;;;;;;;;;;;;;;;;;/  /;;;;;;;;;;;|
          |  |  |__|;;/ /        |   │             |   |;;;;;;;;;;;;;;/  /;;;;;;;;;;;;;|
          ノ  |  \|/         |    │            /   /;;;;;;;;;/  /;;;;;;;;;;;;;;;;;;|
         /  |              / ̄丶 |          (⌒(⌒ヾヾ/   /;;;;;;;;;;;;;;;;;;;;;;;;;|
        /    ヽ______彡( ̄ ̄ヽ ̄|  |         (  (   |ヾ___/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
       /\   /;;;;[__];;;;;;;;;;;彡(二二 ││ /          (_(_ノゞゞ|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|
       ゝ\\/ ̄|      ̄ ̄巛(____ノ_/              彡彡 |;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/|
      (Ο Ο)\_ノ         彡彡∠彡彡彡彡彡彡彡彡彡彡彡彡彡    |;;;;;;;;;;;;;;/ ̄ ̄ ̄ /
       ( Ο丿 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|                      ヽ;;;;;/      /
         ̄   |               │                      | /      /
注意点(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)
実践(1)

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




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

• んー・・・

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

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

• 予定を変更して

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

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

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

• 画像自体のDLは、FlashGet的なツールや、
  $ wget –i [リスト]で行う。
実践(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);
}
動作結果




       (;´Д`)
まとめ

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

• どうやらhtmlSQLは、SEOに使うと便利
  らしい
htmlSQLでモバイルSEOを簡単にシステムツール化して管理する | 携帯サイトをつくろう。
http://www.plusmb.jp/2009/01/30/2378.html

>   さらにやってることは、スクレイピングと同じなので、
>   使い方によってはもっと色んなことができます。
>   SEOで言うと結構重要なアレなんかもこれを使えば簡単にできますね。
>   具体的には書けないですが、色んな使い方を考えて使ってみて下さい。



会場の中で知っている人がいましたら、こっそり教えて
下さい
おまけ(2) スタッフ募集のお知らせ
• 株式会社インフィニットループでは、
  一緒に楽しんでゲームを作ってくれる
  スタッフを募集しています

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

• 興味のある方は、直接声を掛けていた
  だくか、HPからお問い合わせください

More Related Content

What's hot

最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!Yuji Nojima
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言Yuya Takeyama
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012Yusuke Ando
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜Sotaro Omura
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2Akio Ishida
 
20120327 phpstudy58-phake
20120327 phpstudy58-phake20120327 phpstudy58-phake
20120327 phpstudy58-phakeKatsuhiro Ogawa
 
Marionettejs getting started
Marionettejs getting startedMarionettejs getting started
Marionettejs getting startedKyohei Morimoto
 
JavaScriptの落とし穴
JavaScriptの落とし穴JavaScriptの落とし穴
JavaScriptの落とし穴ikdysfm
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxNobuhiro Sue
 
Repository pattern in swift
Repository pattern in swiftRepository pattern in swift
Repository pattern in swiftnaoty_bot
 
Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】Yukiko Kato
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 

What's hot (20)

最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 
Ruby 同好会宣言
Ruby 同好会宣言Ruby 同好会宣言
Ruby 同好会宣言
 
日本語形態素解析
日本語形態素解析日本語形態素解析
日本語形態素解析
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
Local php-100828 2
Local php-100828 2Local php-100828 2
Local php-100828 2
 
20120327 phpstudy58-phake
20120327 phpstudy58-phake20120327 phpstudy58-phake
20120327 phpstudy58-phake
 
Marionettejs getting started
Marionettejs getting startedMarionettejs getting started
Marionettejs getting started
 
JavaScriptの落とし穴
JavaScriptの落とし穴JavaScriptの落とし穴
JavaScriptの落とし穴
 
G*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+BetamaxG*workshop 2011/11/22 Geb+Betamax
G*workshop 2011/11/22 Geb+Betamax
 
Repository pattern in swift
Repository pattern in swiftRepository pattern in swift
Repository pattern in swift
 
Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】
 
01 php7
01   php701   php7
01 php7
 
0x300
0x3000x300
0x300
 
Testman
TestmanTestman
Testman
 
Ll xcode
Ll xcodeLl xcode
Ll xcode
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
Synthesijer hls 20150116
Synthesijer hls 20150116Synthesijer hls 20150116
Synthesijer hls 20150116
 
What is Metasepi?
What is Metasepi?What is Metasepi?
What is Metasepi?
 

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

知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?Kenji Nakamura
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門Kohki Miki
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5Nishida Kansuke
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12kenjis
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情takezoe
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるjamadam
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>LaravelハンズオンセミナーTatsuyoshi Mashiko
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目龍一 田中
 
J qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかJ qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかHisashi Aruji
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうHishikawa Takuro
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろTakuya Tsuchida
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門Hiroaki Murayama
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoShoot Morii
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoyakenjis
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2Atsuo Yamasaki
 

Similar to 「Html sql」で図書館hpにアクセスしてみよう (20)

知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
JavaのGenericsとは?
JavaのGenericsとは?JavaのGenericsとは?
JavaのGenericsとは?
 
Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
10分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/1210分でわかるFuelPHP @ 2011/12
10分でわかるFuelPHP @ 2011/12
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
J qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているかJ qmobiはjqueryから軽量化しているか
J qmobiはjqueryから軽量化しているか
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょう
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyotoGo言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
 
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2[東京] JapanSharePointGroup 勉強会 #2
[東京] JapanSharePointGroup 勉強会 #2
 

More from Kentaro Matsui

テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
20201113_バーチャルキャストが創り出すVRの未来
20201113_バーチャルキャストが創り出すVRの未来20201113_バーチャルキャストが創り出すVRの未来
20201113_バーチャルキャストが創り出すVRの未来Kentaro Matsui
 
Virtual Cast 設立資料
Virtual Cast 設立資料Virtual Cast 設立資料
Virtual Cast 設立資料Kentaro Matsui
 
札幌移住計画夏の企業見学会2018説明資料
札幌移住計画夏の企業見学会2018説明資料札幌移住計画夏の企業見学会2018説明資料
札幌移住計画夏の企業見学会2018説明資料Kentaro Matsui
 
札幌移住計画夏の企業見学会2017説明会
札幌移住計画夏の企業見学会2017説明会札幌移住計画夏の企業見学会2017説明会
札幌移住計画夏の企業見学会2017説明会Kentaro Matsui
 
札幌移住計画のご紹介
札幌移住計画のご紹介札幌移住計画のご紹介
札幌移住計画のご紹介Kentaro Matsui
 
Skypeボット マザーゆっくり
Skypeボット マザーゆっくりSkypeボット マザーゆっくり
Skypeボット マザーゆっくりKentaro Matsui
 
チーム開発をうまく行うためのコーディング規約論
チーム開発をうまく行うためのコーディング規約論チーム開発をうまく行うためのコーディング規約論
チーム開発をうまく行うためのコーディング規約論Kentaro Matsui
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイントKentaro Matsui
 
地方企業がリモートで首都圏のお仕事をこなすための10個のポイント
地方企業がリモートで首都圏のお仕事をこなすための10個のポイント地方企業がリモートで首都圏のお仕事をこなすための10個のポイント
地方企業がリモートで首都圏のお仕事をこなすための10個のポイントKentaro Matsui
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことKentaro Matsui
 
Gps座標を短い文字列で扱えるGeo Hashが面白い
Gps座標を短い文字列で扱えるGeo Hashが面白いGps座標を短い文字列で扱えるGeo Hashが面白い
Gps座標を短い文字列で扱えるGeo Hashが面白いKentaro Matsui
 
PHPを使って3分で作る3キャリア対応ケータイサイト
PHPを使って3分で作る3キャリア対応ケータイサイトPHPを使って3分で作る3キャリア対応ケータイサイト
PHPを使って3分で作る3キャリア対応ケータイサイトKentaro Matsui
 
モバイル版Googleマップのちょっと進んだ使い方
モバイル版Googleマップのちょっと進んだ使い方モバイル版Googleマップのちょっと進んだ使い方
モバイル版Googleマップのちょっと進んだ使い方Kentaro Matsui
 
ケータイサイトのはなし(入門編)
ケータイサイトのはなし(入門編)ケータイサイトのはなし(入門編)
ケータイサイトのはなし(入門編)Kentaro Matsui
 

More from Kentaro Matsui (16)

テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
20201113_バーチャルキャストが創り出すVRの未来
20201113_バーチャルキャストが創り出すVRの未来20201113_バーチャルキャストが創り出すVRの未来
20201113_バーチャルキャストが創り出すVRの未来
 
Virtual Cast 設立資料
Virtual Cast 設立資料Virtual Cast 設立資料
Virtual Cast 設立資料
 
札幌移住計画夏の企業見学会2018説明資料
札幌移住計画夏の企業見学会2018説明資料札幌移住計画夏の企業見学会2018説明資料
札幌移住計画夏の企業見学会2018説明資料
 
札幌移住計画夏の企業見学会2017説明会
札幌移住計画夏の企業見学会2017説明会札幌移住計画夏の企業見学会2017説明会
札幌移住計画夏の企業見学会2017説明会
 
札幌移住計画のご紹介
札幌移住計画のご紹介札幌移住計画のご紹介
札幌移住計画のご紹介
 
Skypeボット マザーゆっくり
Skypeボット マザーゆっくりSkypeボット マザーゆっくり
Skypeボット マザーゆっくり
 
チーム開発をうまく行うためのコーディング規約論
チーム開発をうまく行うためのコーディング規約論チーム開発をうまく行うためのコーディング規約論
チーム開発をうまく行うためのコーディング規約論
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
地方企業がリモートで首都圏のお仕事をこなすための10個のポイント
地方企業がリモートで首都圏のお仕事をこなすための10個のポイント地方企業がリモートで首都圏のお仕事をこなすための10個のポイント
地方企業がリモートで首都圏のお仕事をこなすための10個のポイント
 
PHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったことPHPで大規模ブラウザゲームを開発してわかったこと
PHPで大規模ブラウザゲームを開発してわかったこと
 
Gps座標を短い文字列で扱えるGeo Hashが面白い
Gps座標を短い文字列で扱えるGeo Hashが面白いGps座標を短い文字列で扱えるGeo Hashが面白い
Gps座標を短い文字列で扱えるGeo Hashが面白い
 
PHPを使って3分で作る3キャリア対応ケータイサイト
PHPを使って3分で作る3キャリア対応ケータイサイトPHPを使って3分で作る3キャリア対応ケータイサイト
PHPを使って3分で作る3キャリア対応ケータイサイト
 
20090828 Webconlocal
20090828 Webconlocal20090828 Webconlocal
20090828 Webconlocal
 
モバイル版Googleマップのちょっと進んだ使い方
モバイル版Googleマップのちょっと進んだ使い方モバイル版Googleマップのちょっと進んだ使い方
モバイル版Googleマップのちょっと進んだ使い方
 
ケータイサイトのはなし(入門編)
ケータイサイトのはなし(入門編)ケータイサイトのはなし(入門編)
ケータイサイトのはなし(入門編)
 

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

  • 1. 「htmlSQL」で 図書館HPにアクセスしてみよう LOCAL PHP部 (株)インフィニットループ ke-tai.org 松井 健太郎
  • 2. ご注意 • タイトルからご推測いただけると思い ますが、本発表はネタ要素が強いです • この発表はフィクションです。実在の 事件、団体とは関係あるようで、あま り関係ありません • ネタにマジレスかっこ悪い!!
  • 3. 自己紹介 • LOCAL PHP部 部長(引退間近) • (株)インフィニットループ代表 • ソーシャルゲームとかを作ってます • ke-tai.org管理人
  • 4. 今日の内容 • スクレイピングとは • htmlSQLとは • インストール&セットアップ • サンプルプログラムの解説 • スクレイピングを行う際の注意点 • 実践 • まとめ
  • 5. 岡崎市立中央図書館事件 • 岡崎市立中央図書館のウェブサイ トにアクセスを繰り返して、ほか の利用者が閲覧しにくい状態にし たとして、偽計業務妨害で容疑者 が逮捕された。(後に不起訴) • 1秒間に1回アクセスしたら落ち たという図書館側のサーバのスペ ランカーっぷりと、警察の冷酷な 対応が注目され話題に。 • いまスクレイピングがアツい!!
  • 6. スクレイピングとは • 英語で「scrape」= 削ること scrape[ skr ip ] III[名 V[名][形 をこする, をこする こすって( の状態に する; [III[名]([副])/V[名][形]]…をこする,こすって(…の状態に)する; 付着物などを〉(…から こすり落 などを〉( から) 〈付着物などを〉( から)こすり落とす • ウェブサイトのデータを取得し、必要 な部分だけを抽出して利用すること • 例えば、ページ内のリンクを全て抽出 したい、ランキングサイトの上位5番目 までのデータを取得したい、など
  • 7. htmlSQLとは • PHPで作られたスクレイピング用ライブ ラリ、Jonas John氏が開発 • HTMLの要素をSQLのように取り出すこ とができる • このサイトで興味を持った ASTRODEO -真面目にエロサイトを作ってみた【プログラマ編】 http://astrodeo.com/blog/archives/257
  • 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. サンプル 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. 使い方の解説 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. 注意点(1) • いざアクセスを開始する前の注意点 • 逮捕されたら困るよね        / ̄ ̄ ̄\       / _      ̄ ̄\       ヽ |☆|         )       /──二二二二二二l       ヽ二二二二二/   丶       /__             |       |    ひ    |    │      ノ          |    |     (;;;)          |    |                      (⌒)___(⌒)     ヽ           |    ヽ                    / ̄       ̄\      \_____ノ  \__/                   /            l          __|       /  \                   |  ⌒    ⌒    |         / ヽ____/   /\                 │ ■■■■■    │        /| │__丿;;;\_/\_/\ ヽ                |    (⌒)       |       /  ヽ/|ヽ;;;;;;;;;ノ/ \   丶/丶               |   ___T____      |       |   | | /;;;;;|/\─       丶              ヽ   l-- l      /__       /   | |/;;;;;;;/  >__  /   |               \___ ̄____/;;;;;;ヽ       j  | | |;;;;;;;/  /|--┌│ |   │               / ヽ;;;;;|     /⌒l;;;;;;;;;|       | │ | |;;;;;/  /│ ││ |   │              │  |;;;;;L___/  /;;;;;;;;;|      ノ  | │ |;;/  / |___|__| │   |              /   |;;;;;;;;;;;;;;;;;/  /;;;;;;;;;;;|      |  |  |__|;;/ /        |   │             |   |;;;;;;;;;;;;;;/  /;;;;;;;;;;;;;|      ノ  |  \|/         |    │            /   /;;;;;;;;;/  /;;;;;;;;;;;;;;;;;;|     /  |              / ̄丶 |          (⌒(⌒ヾヾ/   /;;;;;;;;;;;;;;;;;;;;;;;;;|    /    ヽ______彡( ̄ ̄ヽ ̄|  |         (  (   |ヾ___/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|   /\   /;;;;[__];;;;;;;;;;;彡(二二 ││ /          (_(_ノゞゞ|;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;|   ゝ\\/ ̄|      ̄ ̄巛(____ノ_/              彡彡 |;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;/|  (Ο Ο)\_ノ         彡彡∠彡彡彡彡彡彡彡彡彡彡彡彡彡    |;;;;;;;;;;;;;;/ ̄ ̄ ̄ /   ( Ο丿 |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|                      ヽ;;;;;/      /     ̄   |               │                      | /      /
  • 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. 実践(1) • さて、いざ図書館にアクセス • 大きな問題に気づいた • htmlSQLはPOSTできない 検索エンジンなどを見ていて、なんとなく検索結果 はGETというイメージがあったが、実際はどれも POSTだった
  • 14. 実践(2) • んー・・・ • POSTが使えるように改造するのはそう 大変じゃないみたいだが・・・ • 正直別に図書館HPにアクセスしたいわ けじゃないし・・・
  • 15. 実践(3) • 予定を変更して • 男の子のロマン、エロ画像収集にサンプルプ ログラムを変更 • 「ふたば★ちゃんねる」から画像を収集する プログラムを作成してみた • 画像URLを抽出しリスト化するプログラムを 作る • 画像自体のDLは、FlashGet的なツールや、 $ wget –i [リスト]で行う。
  • 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. 動作結果 (;´Д`)
  • 18. まとめ • 図書館にアクセスってなに? • htmlSQLを使うと、スクレイピングをす ごく楽に行うことができる • POSTには対応していないので、検索結 果などから切り出すなどの処理は苦手 のようだ • 十分なスリープをいれたり、ステータ スコードをみるなど、相手サーバの事 を思いやる心が重要
  • 19. おまけ • どうやらhtmlSQLは、SEOに使うと便利 らしい htmlSQLでモバイルSEOを簡単にシステムツール化して管理する | 携帯サイトをつくろう。 http://www.plusmb.jp/2009/01/30/2378.html > さらにやってることは、スクレイピングと同じなので、 > 使い方によってはもっと色んなことができます。 > SEOで言うと結構重要なアレなんかもこれを使えば簡単にできますね。 > 具体的には書けないですが、色んな使い方を考えて使ってみて下さい。 会場の中で知っている人がいましたら、こっそり教えて 下さい
  • 20. おまけ(2) スタッフ募集のお知らせ • 株式会社インフィニットループでは、 一緒に楽しんでゲームを作ってくれる スタッフを募集しています • PHPプログラマ ActionScriptプログラマ サーバエンジニア • 興味のある方は、直接声を掛けていた だくか、HPからお問い合わせください