人によっては割と耳に痛い話かもですが、エンジニアのコミュニティやイベント、ひいてはインターネットを私達が平和に優しく渡り歩くためにも、ちょっと言っとかないとアカンかも、と思い書きます.
具体的には先日、私が主催しているイベント(Pythonもくもく自習室)でちょっとしたヒヤリハット*1があったので、注意喚起および、もう同様のトラブル・事故が起きませんように!という訴えでもあります.
TL;DR
- 大前提として、ネットもオフライン(勉強会・もくもく会)も社会に迷惑をかける行為は行わない
- WebサイトやAPIに対する大量アクセス(Webスクレイピング)をもくもく会・勉強会の会場から行うのはご法度(会場じゃなくても注意すべき)
- もくもく会・勉強会でのコミュニケーションで「粘着」「押し付け」はやめて、自然に距離をとって「相手を認め」てあげよう
もくじ
- TL;DR
- もくじ
- 勉強会・もくもく会で社会に迷惑をかける行為 #とは
- Webスクレイピングをする上で守ってほしいお作法
- 勉強会に行くなら守るべき、紳士淑女なふるまい
- 【我思う】データ分析・プログラミング初心者のお題≒スクレイピング、という風潮について
勉強会・もくもく会で社会に迷惑をかける行為 #とは
って書くとたくさん上がりそうですが、このエントリーでは以下の2つに限定します
- 悪意がなくても、作成・実行したプログラムで他のウェブサイトやインターネットの世界に迷惑をかける行為.具体的には「相手サイトが不安定になったり落ちたりするようなクローリング・Webスクレイピング」など
- 悪意がなくても、他の参加者に必要以上に付きまとったり、自分を押し売りするような行為(業務やプライベートの話を聞き出す、過剰な会社・自分の宣伝etc...)
Webスクレイピングをする上で守ってほしいお作法
Python・機械学習ブームで「ちょっとPython覚えたら次はデータ取得でスクレイピングを...」という方が増えているのと、(私主催の勉強会もそれ以外も)スクレイピングまわりでちょっと危なそうな人たちが見受けられるので改めてまとめました.
賛否両論はさておき、 書いてる意味がわかんない人は外の勉強会・もくもく会(&あなたの会社や学校)でスクレイピングはやめたほうがいいと思います!
クローラーやスクレイピングを作って運用するのはそれなりのエンジニア知識とスキルがないとアカンことだ!というのは十分ご理解の上やったほうがいいです.*2
まずはここを読んで理解しよう(法令や事例、技術的に守るべきこと)
以下にリンクを掲載しますが、一言で言うと
趣味・興味およびお勉強レベルでたとえ悪意がなくても、相手のサイトやAPIに迷惑をかけたらほぼ確実に実施した人に責任があります
勉強中だから、初心者だからという理由は通用しないと思ったほうがいいです.
法的な解釈や事例に対する意見、技術の各論は書くと長くなるので省略しますが、これらの中身を理解し、安全な形でクローラーやスクレイピングを書いて実行しましょう.
中途半端な解釈でやっちゃうと間違いなくやけどします
勉強会・もくもく会で絶対にやっちゃいけないWebスクレイピングのお作法
上記をふまえ、私が心がけている&やっちゃいけない!と決めてるルールです.
会場ネットワークから、相手サイトに影響を与えるような大量リクエストを行うスクレイピング・クローリングコードの実行
言うまでもなく、勉強会・もくもく会会場からの大量リクエスト(アタック)と解釈される可能性が高くなります
何かがあったときは、コードを走らせるあなたもですが、アクセス元の場所(会場)に連絡が行きます*3
APIの規約上、アクセスOKだったらいいとして...そのようなAPI・サイトは世の中そんなに多くはないです.*4
テストが不十分かつ、止められないスクレイピング・クローリング実行を長時間放置
相手サイトが不安定になる・止まる、会場ネットワークに迷惑が...と言ったときに対応できない状態ができるのはご法度です.
よくあるシチュエーションとしては、ランチの間に実行とか、これはホント危険なのでやめましょう(ちなみにネットワークアクセスをしない計算ならむしろやるべき).
必要以上に悲しみが広がります.
安全にWebスクレイピングをやる方法
とはいえ、スクレイピングをやっちゃダメ!というわけでないです.
相手サイトやAPI、そして他の参加者や会場に迷惑をかけない方法で行いましょう.
自分が持ってるリソース、クラウド環境やVPNからスクレイピングする
大量アクセスが発生するガチなクローラーやスクレイピングはAWSやGCP、個人でVPNがあればそこで実施
万が一大量アクセスで何かやらかしても、会場や他の参加者に迷惑をかけずに済みます.
「サーバー代が」とかケチってやらず、安全策をとりましょう.
キャッシュできるクローラー・スクレイピングのフレームワークを使う
代表的なものだとScrapy(Python)など.
標準でキャッシュ機構を持ってる(デフォルトは無効だが)なので、ファイルキャッシュを有効にする.
キャッシュ期間を適切に持てば同じページを何回アクセスしても初回の一回のみで済みます.
ローカルファイルに対して行う
事前にスクレイピングしたいサイトをブラウザ(Chromeなど)でページ構造ごと保存→file://hogehoge/index.html的なやつを相手にスクレイピングする.
ローカルなのでそもそもインターネットに行かないので安全.
ゼロからクローラーやスクレイピングコードを書くときに有効.
勉強会に行くなら守るべき、紳士淑女なふるまい
先月、こちらのエントリーを読んで、主催者の一人として、別のイベントに参加したりしてコミュニティの恩恵に授かってる身として思うところあったので改めて.
色んな論点の意見あると思いますが、Gender関係なく以下が紳士淑女が守るべきふるまいかなと思っています.
- 粘着しない
- 過剰に押し付けない
粘着しない
気になる他の参加者に粘着するような行為・コミュニケーション.
- (相手が嫌な雰囲気出してるにもかかわらず)必要以上に話したり絡んだりする
- 相手が話しにくそうにしてるにもかかわらず、必要以上にプライベートや業務の事を聞き出そうとする
- その他、客観的に不自然なコミュニケーション
特にランチや懇親会のときにあるかな...主催者的には注意してみているポイントでもあります.*5
過剰に押し付けない
他の参加者にオススメやイベント、自社(製品)や自分などを必要以上に押し付ける行為.
特に他のモノをDisって自分が思ってるものをAgeて押し付けるような発言やLTなど.*6
自然に、少しずつコミュニケーションしましょう
もちろん、知り合って話したい人に話をしたり、交流したりは大事(そのためのもくもく会でもある).
基本的には「相手を認める」「話を聞く」を少しずつやっていけばきっとコミュニケーションとれます.
成果発表の時に質問したり、終わったあとに「いい話でしたよ」というだけでも話はできると思うのでぜひご実践を.
【我思う】データ分析・プログラミング初心者のお題≒スクレイピング、という風潮について
私もPythonイベントのメンターとしてスクレイピングを教えていたりしたので自省の意味も含めて.
データ分析や解析、機械学習といったところになるとどうしても統計学やプログラミング(Pythonとか)、手法やアルゴリズムそして事例に目が行くし、
「Python覚えるぞ!」ってなったら言語の次にデータ集め→そや!スクレイピングや!!ってなりがちなのですが!
Webを相手にするならWebやインターネットと友だちになる、知ることがやっぱ先なので順番間違ってるんじゃね?と思い始めてきました.
スクレイピングより先にもっと他に覚えることあるんじゃね?
最後、ポエムっぽい終わりですが言いたいことは以上です.
勉強会、もくもく会にインターネットは立派な社会なのでみんなちゃんと振る舞おう!(主催者としてももっと精進します...)
*1:諸々解決済みなのでここでの言及は行いません.また、関係者以外には情報開示はしません&犯人探しはやめてあげてください(当日いた人はあのことか、と思ってもられえば)
*2:ってのと本来はスクレイピングをしなくてもいいような代替データを入手するほうがよほど近道です、このエントリーの本筋から離れるのでここでは言及しませんが.
*3:プロバイダが会場で契約してるもので、固定IPとかだったりしたら一発で特定されます
*4:有名WebサービスのAPIだったり大企業のサイトくらい?いずれにしてもやりすぎは当然だめ
*5:ちなみに私のイベントで懇親会を滅多にやらないのはこの辺のコントロールを主催として責任持ってやれる状況が毎回作れないから、というのもあります.ランチは分散するので大丈夫ですが.
*6:よくあるのが初めて来たにもかかわらず自社製品の宣伝とかセミナーの宣伝とかをやる人、とか.仕事熱心だなと思いつつ浮いてるかつ誰も嬉しくないので控えたほうがいいよと.