SlideShare a Scribd company logo
「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

PDF
mishimasyk#4
PPTX
CakePHP+Smartyハイブリッドによるラクラク開発
PDF
PHP5.5新機能「ジェネレータ」初心者入門
PDF
traitを使って楽したい話
PDF
JavaScript超入門 基礎
PDF
PDF
探検!SwiftyJSON
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 )
mishimasyk#4
CakePHP+Smartyハイブリッドによるラクラク開発
PHP5.5新機能「ジェネレータ」初心者入門
traitを使って楽したい話
JavaScript超入門 基礎
探検!SwiftyJSON
15分でCakePHPを始める方法(Nseg 2013-11-09 )

What's hot (20)

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

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

KEY
フラットなPHPからフレームワークへ
KEY
フラットなPHPからフレームワークへ
PPT
20090218 第5回「PhpによるWebアプリケーションのセキュリティ入門」
PDF
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
PDF
脱コピペ!デザイナーにもわかるPHPとWP_Query
KEY
テンプレートエンジンって何?
PDF
デザイナー向け 初めてのPhp ~サイト制作に役立つtips~
PDF
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
PDF
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
PDF
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
PDF
レンタルサーバで今すぐ始めるWEB開発
PDF
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
PDF
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
PPTX
Phpcon2015
PDF
System2
PPTX
安全なPHPアプリケーションの作り方2014
PDF
Ruka 20191212
PDF
Hadoopによるリクルートでの技術調査とその活用
PDF
PHP実践 ~外部APIを使って情報を取得する~
PDF
Gorinphp0729
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
20090218 第5回「PhpによるWebアプリケーションのセキュリティ入門」
徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011
脱コピペ!デザイナーにもわかるPHPとWP_Query
テンプレートエンジンって何?
デザイナー向け 初めてのPhp ~サイト制作に役立つtips~
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
Perl暦およそ10年(?)の僕がデータベースを使えるようになるまでの昔話
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
レンタルサーバで今すぐ始めるWEB開発
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの]
Phpcon2015
System2
安全なPHPアプリケーションの作り方2014
Ruka 20191212
Hadoopによるリクルートでの技術調査とその活用
PHP実践 ~外部APIを使って情報を取得する~
Gorinphp0729
Ad

More from Kentaro Matsui (16)

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