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

18
Lib H k後の LibraHack後の スクレイピングを 考える 考える ふるかわだいすけ/mogya.com

Transcript of LibraHack後の スクレイピングを 考える

Page 1: LibraHack後の スクレイピングを 考える

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

考える考える

ふるかわだいすけ/mogya.com

Page 2: LibraHack後の スクレイピングを 考える

ふるかわだいすけふるかわだ すけ

ジフリーランスWEBエンジニア

http://mogya com/http://mogya.com/Twitter: @mogya

自己紹介

Page 3: LibraHack後の スクレイピングを 考える

http://oasis.mogya.com/

モバイラーズオアシス

Page 4: LibraHack後の スクレイピングを 考える

スクレイピングしまくり

Page 5: LibraHack後の スクレイピングを 考える

LibraHack岡崎市立中央図書館事件

今日のテーマ

Page 6: LibraHack後の スクレイピングを 考える

どんな事件だったかどんな事件だったかわかりやすく説明してみるわかりやすく説明してみる

デスノートを例にして

Page 7: LibraHack後の スクレイピングを 考える

※権利関係が微妙なので※権利関係が微妙なので画像は削除

デスノートを拾ったので

Page 8: LibraHack後の スクレイピングを 考える

デスノートプリンタを作ったら

Page 9: LibraHack後の スクレイピングを 考える

※権利関係が微妙なので※権利関係が微妙なので画像は削除

死神に怒られた

Page 10: LibraHack後の スクレイピングを 考える

岡崎市立中央図書館事件2010年3月頃、市民から同図書館のウェブサイトの蔵書検索システムに対し、接続が出来ないと苦情が

岡崎市立中央図書館事件

あり、その後もウェブサイトの閲覧が困難になる事態が相次いだ。同年4月15日に同図書館が迷惑なアクセスを受けていると愛知県警岡崎署に被害届を提クセスを受けていると愛知県警岡崎署に被害届を提出し、5月25日にアクセスを行っていた男性が蔵書検索システムに 高頻度のリクエストを故意に送り検索システムに、高頻度のリクエストを故意に送りつけたとして偽計業務妨害容疑で逮捕された。

Wikipediaによる説明

Page 11: LibraHack後の スクレイピングを 考える

スクレイピングが悪い!とはならなかった

まずは一安心

Page 12: LibraHack後の スクレイピングを 考える

万 サ バを落として逮捕された時に万一サーバを落として逮捕された時に「あの岡崎図書館でも落ちないように作ってあ た と えば 当性を主張 き んじ なあった」といえば正当性を主張できるんじゃないか?

保守的な教訓

Page 13: LibraHack後の スクレイピングを 考える

• 1アクセス / 10分• 1アクセス / 10分•クッキー対応取得したデ タをキ シ する•取得したデータをキャッシュする

• userAgentで連絡先を明示するg• robot.txtに従う• if-modified-sinceif modified since

望ましい機能

Page 14: LibraHack後の スクレイピングを 考える

つくってみた

Page 15: LibraHack後の スクレイピングを 考える

#{WGET} N P "#{CACHE DIR}"#{WGET} -x -N -P "#{CACHE_DIR}" --user-agent="#{userAgent}" "#{uri}"• -x ディレクトリを作る• -N タイムスタンプ(If-Modified-Since)

デ• -P キャッシュのディレクトリを指定• --load-cookies "#{COOKIE_FILE}" • save cookies "#{COOKIE FILE}“• --save-cookies #{COOKIE_FILE}• --keep-session-cookies

wgetにおまかせ

Page 16: LibraHack後の スクレイピングを 考える

•キャッシュファイルの場所キャッシュファイルの場所/tmp/WgetScraper/oasis.mogya.com/test.txt?a=b&c=d

↓↓

filename = "#{uri_obj.host}#{uri_obj.path}“filename = filename+"?"+ uri obj queryfilename = filename+ ? + uri_obj.query

なにげに苦労したところ

Page 17: LibraHack後の スクレイピングを 考える

期待:/tmp/WgetScraper/gis.e-map.ne.jp/standard/13125010/ssactl.htm?GO.x=13&GO.y=2&X shopp jp/ / / y _ p_id=40000&X_cancel_url=http%3A%2F%2Fwww.sej.co.jp%2F

結果:/tmp/WgetScraper/gis.e-/ p/ g p /gmap.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+"?"+ URI.encode(filename filename ? URI.encode(URI.decode(uri_obj.query),/[^-_.!~*'()a-zA-Z¥d;?:@&=+$,¥[¥]]/n)

微妙な違い

Page 18: LibraHack後の スクレイピングを 考える

あとでブログにあげておきます

http://mogya com/http://mogya.com/Twitter: @mogya

まとめ