More Related Content Similar to 「Html sql」で図書館hpにアクセスしてみよう Similar to 「Html sql」で図書館hpにアクセスしてみよう (20) More from Kentaro Matsui (16) 「Html sql」で図書館hpにアクセスしてみよう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)
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);
}
19. おまけ
• どうやらhtmlSQLは、SEOに使うと便利
らしい
htmlSQLでモバイルSEOを簡単にシステムツール化して管理する | 携帯サイトをつくろう。
http://www.plusmb.jp/2009/01/30/2378.html
> さらにやってることは、スクレイピングと同じなので、
> 使い方によってはもっと色んなことができます。
> SEOで言うと結構重要なアレなんかもこれを使えば簡単にできますね。
> 具体的には書けないですが、色んな使い方を考えて使ってみて下さい。
会場の中で知っている人がいましたら、こっそり教えて
下さい