More Related Content
PDF
PPTX
CakePHP+Smartyハイブリッドによるラクラク開発 PDF
PDF
PDF
PDF
PDF
PDF
15分でCakePHPを始める方法(Nseg 2013-11-09 ) What's hot
PDF
最強オブジェクト指向言語 JavaScript 再入門! PDF
PPT
PDF
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012 PDF
omoon.org の裏側 〜FuelPHP の task 活用例〜 PDF
PDF
PDF
20120327 phpstudy58-phake PPTX
Marionettejs getting started PDF
PDF
G*workshop 2011/11/22 Geb+Betamax PDF
Repository pattern in swift PPTX
KEY
ODP
PDF
KEY
PDF
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight) PDF
PDF
Similar to 「Html sql」で図書館hpにアクセスしてみよう
KEY
KEY
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
PDF
これからHTML5を書く人のためのセキュリティ - HTML5など勉強会 PDF
Hachiojipm #5 LT資料 [テーマ:最近いいなと思ったもの] PPTX
PDF
PPTX
PDF
PDF
Hadoopによるリクルートでの技術調査とその活用 PDF
PDF
More from Kentaro Matsui
PDF
PDF
20201113_バーチャルキャストが創り出すVRの未来 PDF
PDF
PDF
PDF
PDF
PDF
PDF
地方企業がソーシャルゲーム開発を成功させるための10のポイント PDF
地方企業がリモートで首都圏のお仕事をこなすための10個のポイント PDF
PHPで大規模ブラウザゲームを開発してわかったこと PDF
Gps座標を短い文字列で扱えるGeo Hashが面白い PDF
PHPを使って3分で作る3キャリア対応ケータイサイト PDF
PDF
モバイル版Googleマップのちょっと進んだ使い方 PDF
「Html sql」で図書館hpにアクセスしてみよう
- 1.
- 2.
- 3.
- 4.
- 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 = newhtmlsql();
// 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 FROMa 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.
- 14.
- 15.
- 16.
実践(4)
include_once("snoopy.class.php");
include_once("htmlsql.class.php");
$wsql = newhtmlsql();
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.
- 19.
おまけ
• どうやらhtmlSQLは、SEOに使うと便利
らしい
htmlSQLでモバイルSEOを簡単にシステムツール化して管理する | 携帯サイトをつくろう。
http://www.plusmb.jp/2009/01/30/2378.html
> さらにやってることは、スクレイピングと同じなので、
> 使い方によってはもっと色んなことができます。
> SEOで言うと結構重要なアレなんかもこれを使えば簡単にできますね。
> 具体的には書けないですが、色んな使い方を考えて使ってみて下さい。
会場の中で知っている人がいましたら、こっそり教えて
下さい
- 20.