【プログラミング100日間学習チャレンジ】63日目:スクレイピングの実践(サイト見出しと株価)

プログラミング

どうも、塩ラーメンです。

昨日学んだスクレイピングの基礎を活かし、今日は実践を行いました。具体的には、検索ワードでヒットする上位10個のサイトからのタイトルと見出しの取得と、YahoofinanceAPIを用いた株価の取得です。

 

 

スクレイピングはグレーな行為?

 

まず今日は、スクレイピングが完全に許容された行為というわけではないという事実に驚愕しました。

 

もちろん法律違反ではありませんが、場合によっては迷惑行為にはなるようです。実際にスクレイピングを禁止しているサイトもたくさんあります。多くの人が見るような大きなサイトは大体禁止のスタンスだと考えてもいいくらいかもしれません。

 

スクレイピングをして逮捕された人もいるらしく、逮捕の理由は「偽計業務妨害」。つまり、高頻度のアクセスをしてサーバーに高負荷をかけたことが業務妨害にあたるということらしいです。

 

ほんの数回程度スクレイピングをするだけであれば、この偽計業務妨害罪にはあたらないのでしょうが、サーバーに負荷がかかりすぎるようなスクレイピングはやめた方がいいでしょう。意図せずにいわゆるDos攻撃になってしまうってことですよね。

 

それと、サイトに掲載されている情報にも著作権があるので、自分で情報解析に使うならOKですが、配布したりすると著作権違反にもなってしまうようです。

 

スクレイピングをするにあたっては、注意が必要ということですね。勉強している最中は「スクレイピングすげー!やっほーい!」と浮き足立っていましたが、釘を刺され、今は厳粛な気分になっております。不急・不要・違法なスクレイピングをしてしまわないように気を付けたいと思います。

 

 

サイトタイトル・見出しのスクレイピング

 

それでは本題です。今日は、スクレイピングの実践として「サイトタイトル・見出しのスクレイピング」を行いました。本当は、本文も取得したかったんです。何が狙いだったかというと…

 

何かをネットで調べようと思った時って、検索上位のサイトを3つとか5つとか開いて読みますよね?でもいちいちページを開いて閉じてとか、タブを複数開いておいてあっちを読んでこっちを読んでってするのは面倒じゃないですか?その作業を簡単にしたかったのです。

 

つまり、検索上位10個のサイトから、タイトル・見出し・見出しに対応した本文を取得して、csvで出力、そのcsv1枚で全ての記事が読めるようにしたかったのです。

 

しかし、タイトルと見出しにはh1…タグがあるので取得できましたが、見出しに対応する本文を、見出しに対応した形で取得する方法がわかりませんでした。基本的に本文は<p>で囲われているだけでユニークじゃないので、何個目の見出しの<p>かを判別することができませんでした。多分find_allで取ってきたあとに、何個目の<p>かで指定する…ようなやり方ができるのかなとも思ったのですが、そこまでやり切れませんでした。今後理解が深まったらまたチャレンジしてみたいです。

 

と言っても、今回は勉強のためにやりましたが、今後はスクレイピングの「実行」はしないことにします。迷惑行為はしたくありませんので。勉強の際は、自前のサイトで…あ~でも、自前のサイトに自分で何度もアクセスしたら、それはそれで問題なのか?難しいですね(苦笑)どうしよう…

 

 

APIを使った株価の取得

 

スクレイピングが若干グレーだと知り、他の方法はないのかと調べた結果、APIを使った方法に行き着きました。APIとスクレイピングは全く違うものですが、スクレイピングで取得したい情報を提供しているAPIが存在すれば、同じ結果が得られます。

 

API、厳密にはWebAPIというものは、「情報を提供してくれるもの」と認識しております。例えばお天気情報APIという種類のものがありますが、これは、全国各地のお天気情報を提供してくれるものです。これをアプリから呼び出せば、お天気アプリが作れます。←これはJavaScriptを勉強しているときにサンプルを作ったことがあります。

 

APIは企業が公開してくれているものですので、使っても怒られません(利用規約違反すればNGです当然)。それならスクレイピングと違って気兼ねなくできるので、APIを使ってみました。

 

私は投資をしたり、決算書分析をするのが趣味の一つですので、それに活かせるように、株価取得を試してみました。使ったのはYahoofinanceAPIです。このAPIはすでに公式サポートが終了しているそうなのですが、参考記事が多くあったので、とりあえずこれを試してみました。

 

ほぼ参考にしたサイトのコードをパクっただけではありますが、問題なく動かすことができました。別のAPIで、財務情報も取得できるものがあるっぽいので、そのうちそれを使って、決算書分析を自動でしてくれるアプリなんかを作れたらいいなと思いました。

 

あとはFXもやっているのですが、OANDAAPIを使って為替情報を取得し、インジケーターを計算して、自分の手法にマッチする相場になった時にライン通知してくれる自分用のアプリも作れたらいいなと思います。そこまで行くと、自動売買も作ってみたくなりそう…興味が止まらない(笑)

 

 

最後に

 

スクレイピングは若干グレー感があって出鼻をくじかれたので、昨日の宣言通りスクレイピングは一旦ここまでにしておこうと思います。次は何を勉強しようかな?機械学習という一番面白そうなものは最後の楽しみに取っておきたいので、以下のような選択肢を考えております。

  • Djangoの公式チュートリアルでブログアプリ作成(Flaskとの共通点、相違点からFlaskの理解も深まりそう)
  • データ分析(これもPythonにおける大人気分野。数学の勉強が必要なのはハードル高いけど、憧れの気持ちはある)
  • 基礎学習(YouTubeに「100本ノック」のような動画があるので、それをやって実力を鍛える)
  • ゲーム制作(Pythonでもゲームが作れる!プログラミングを始めたときはゲームを作るのが目標だった)

という感じです。今のところの興味レベルはゲーム制作が一番高いです。

何を勉強するかで悩むなんて、贅沢だな。

 

 


最後までお読みいただき、ありがとうございました。

感想・意見・指摘などは、コメントに残していただけるとありがたいです。

ツイッターで、ブログの更新情報などお知らせしています。

https://twitter.com/saltramen_book

それでは、また別の記事でお会いしましょう。


 

スポンサーリンク

コメント

タイトルとURLをコピーしました