Lib H k後の LibraHack後の スクレイピングを 考える

LibraHack後の
Lib
H k後の
スクレイピングを
考える
ふるかわだいすけ/mogya.com
ふるかわだ すけ
ふるかわだいすけ
フリーランスWEBエンジニア
ジ
http://mogya.com/
http://mogya
com/
Twitter: @mogya
自己紹介
http://oasis.mogya.com/
モバイラーズオアシス
スクレイピングしまくり
LibraHack
岡崎市立中央図書館事件
今日のテーマ
どんな事件だったか
わかりやすく説明してみる
デスノートを例にして
※権利関係が微妙なので
画像は削除
デスノートを拾ったので
デスノートプリンタを作ったら
※権利関係が微妙なので
画像は削除
死神に怒られた
岡崎市立中央図書館事件
2010年3月頃、市民から同図書館のウェブサイトの
蔵書検索システムに対し、接続が出来ないと苦情が
あり、その後もウェブサイトの閲覧が困難になる事
態が相次いだ。同年4月15日に同図書館が迷惑なア
クセスを受けていると愛知県警岡崎署に被害届を提
出し、5月25日にアクセスを行っていた男性が蔵書
検索システムに 高頻度のリクエストを故意に送り
検索システムに、高頻度のリクエストを故意に送り
つけたとして偽計業務妨害容疑で逮捕された。
Wikipediaによる説明
スクレイピングが悪い!とはならなかった
まずは一安心
万一サーバを落として逮捕された時に
万
サ バを落として逮捕された時に
「あの岡崎図書館でも落ちないように作って
あ た と えば 当性を主張 き んじ な
あった」といえば正当性を主張できるんじゃな
いか?
保守的な教訓
• 1アクセス / 10分
• クッキー対応
• 取得したデータをキャッシュする
取得したデ タをキ
シ する
• userAgentで連絡先を明示する
g
• robot.txtに従う
if modified since
• if-modified-since
望ましい機能
つくってみた
#{WGET} -x -N
N -P
P "#{CACHE
"#{CACHE_DIR}"
DIR}" --useragent="#{userAgent}" "#{uri}"
• -x ディレクトリを作る
• -N タイムスタンプ(If-Modified-Since)
• -P キャッシュのディレクトリを指定
デ
• --load-cookies "#{COOKIE_FILE}"
• --save-cookies
save cookies "#{COOKIE
#{COOKIE_FILE}
FILE}
• --keep-session-cookies
wgetにおまかせ
• キャッシュファイルの場所
/tmp/WgetScraper/oasis.mogya.com/test.txt?a=b&c=d
↓
filename = "#{uri_obj.host}#{uri_obj.path}
filename = filename+"?"+
filename+ ? + uri
uri_obj.query
obj query
なにげに苦労したところ
期待:/tmp/WgetScraper/gis.emap.ne.jp/standard/13125010/ssactl.htm?GO.x=13&GO.y=2&X
p
jp/
/
/
y
_shop
p
_id=40000&X_cancel_url=http%3A%2F%2Fwww.sej.co.jp%2F
/ p/ g
p /g
結果:/tmp/WgetScraper/gis.emap.ne.jp/standard/13125010/ssactl.htm?GO.x=13&GO.y=2&X_shop
_id=40000&X_cancel_url=http:%2F%2Fwww.sej.co.jp%2F
↓
filename = filename
filename+"?"+
?
URI.encode(
URI.decode(uri_obj.query),
/[^-_.! *'()a-zA-Z¥d;?:@&=+$,¥[¥]]/n)
微妙な違い
あとでブログにあげておきます
http://mogya.com/
http://mogya
com/
Twitter: @mogya
まとめ