こんにちは。なつりょです。先日株に挑戦している友人から
webスクレイピングでその日の日経新聞の記事から情報を抽出して欲しい
と相談を受けました。
スクレイピングって何?って感じかもしれませんが、簡単に言うと、Webページのデータを取得することです。取得したデータをGoogleスプレッドシートやらに貯めこんだりまでがスクレイピングという認識の人もいますが、実用化を考えるとそこまでできてスクレイピングできるという感覚ですね。
今回は僕自身pythonを組んだことがない&スクレイピングをしてみたことがないので、とりあえず環境構築からWebページデータの抽出までをやってみます。
作業時間的には1時間あればできるボリュームだったので
これからpythonに挑戦する方
スクレイピングって技術があるんだ!面白そう!
と思った方はぜひ挑戦してみてください。
※Windows10での環境構築です
目次
pythonとは
pythonはプログラミング言語の一つで流行りの機械学習などによく使われている言語です。
これを聞くとそんな高度な技術に使われているのか、難しそう・・・。と思うかもしれません。僕はそうでした。笑
実際には文法がとてもシンプルで初心者に優しい言語でした。まだまだ触って1時間程度ですが、これからプログラミングを学ぶなら、言語はpythonが良いよとおすすめできます。
開発環境を整える
pythonのダウンロード
※この工程は飛ばしても大丈夫です。
というのは、後で入れる開発環境のanacondaの中だけであればpythonをダウンロードしていなくてもpythonは動くからです。
このページからダウンロードします。
ダウンロードファイルを実行すると、
こんなインストール画面が。画面下のAdd Python to PATHに☑を入れてInstall Nowをクリックしてインストールされるのを待ちましょう。
インストールが完了したら、コマンドプロンプトを起動し、
python --version
でインストールされているか確認しましょう。きちんとインストールできていれば、
Python 3.8.3
と返ってくるはず。認識されていません等のメッセージが返ってきてしまう場合はAdd Python to PATHに☑を入れ忘れた可能性があります。アンインストールしてやり直してみてください。
anacondaダウンロード
https://www.anaconda.com/products/individual
こちらのページから少しスクロールしてDownloadボタンを押すと、ページ下OSごとのダウンロードリンク部分まで移動してくれます。
pythonのバージョンは理由がなければ3.7を選択。
ダウンロードして、ファイルを開くとインストーラーが起動。
特に困る選択肢もないので、agree や nextを押して進めます。
※先の項目でpythonをダウンロードした方は最後あたりに出てくる
Add Anaconda to my PATH environment variable
に☑を入れずに進めます。
インストールが完了したら、スタートメニューにanacondaが追加されてます。
スタートメニューの中から、anaconda navigatorを見つけて起動します。
画像のようなものが起動します。赤丸で囲んであるjupyter notebookをLuunchをクリックして起動しましょう。
jupyter notebookが起動する、、と思うのですが、自分はATOM(エディタ)が起動してしまいます。HTMLファイルが生成されて、それを起動すると開発画面まで飛ぶ仕組みみたいです。
HTMLをATOMで開くように設定してあるとエディタが起動するだけで自動で飛んでくれないと、、、。
というわけで生成されたHTMLを探してその中に書いてあるURLに飛んでみます。
C:\Users\ユーザ名\AppData\Roaming\jupyter\runtime
特に設定をいじってない場合はこの辺にあると思います。AppDataは隠しフォルダなので見えるようにしないと辿り着きません。同じ悩みで止まっていた方が参考になれば幸いです。
なんやかんやでjupyter notebookの起動まできました。あとはデータ抽出!
データ抽出
百聞は一見。まずは下記のコードを入力して実行▶しましょう。
import requests
r = requests.get('https://one-rest.com/') # データをとる
r.content # データの中身を表示
開かれしパンドラの箱。心理の扉。そんな感じでしょうか笑
これは僕のサイトのトップページのデータです。
次にHTMLデータを取得してみます。
import requests
from bs4 import BeautifulSoup
r = requests.get('https://one-rest.com/')
data = BeautifulSoup(r.text, 'html.parser')
data
僕のサイトのトップページのソースです。
ちょっと綺麗になった!
ここから更に、トップページにある記事を一覧で出します。
import requests
from bs4 import BeautifulSoup
r = requests.get('https://one-rest.com/')
data = BeautifulSoup(r.text, 'html.parser')
elems = data.find_all("h2", class_="entry-title")
for e in elems:
print(e.getText())
すごくね??というわけでこれを応用して日経新聞の記事一覧を出します。
結論としてソースコードはこう
import requests
from bs4 import BeautifulSoup
r = requests.get('https://nikkei.com/')
data = BeautifulSoup(r.text, 'html.parser')
elems = data.find_all("span", class_="k-v")
for e in elems:
print(e.getText())
いやまじすごくね??pythonおもしろいですよね。最後にちょこっとだけ解説入れて終わりにします。注意点もあるのでWebスクレイピングをする人は見ておいてください。
ライブラリ
今回のデータ抽出にあたって、requestsやらbeautifulSoupやらの記述がありましたね。これらはライブラリといって、プログラムの部品的な存在です。よく使われる関数や機能がまとまったパッケージって感じです。
requestsはHTTP通信ができるライブラリ
beautifulSoupはHTMLの整形に利用するライブラリ
などの役割があります。他にも表計算のためのライブラリとしてPandasというものがあったりします。
このライブラリを利用して、今回はWebページのデータを取得しました。
スクレイピングの注意点
ものすごく便利なスクレイピングですが、どのサイトもスクレイピングして良いとは限りません。スクレイピングを禁止しているサイトもあります。
スクレイピングを拒否しているサイトは、robots.txtに書いてあります。代表的なところだとTwitterはスクレイピングが禁止されています。
robots.txtは基本TOPページ直下にあります。
僕のサイトの場合は
https://one-rest.com/robots.txt
にアクセスすると確認できます。
また、スクレイピングは短期間に行いすぎるとSPAM等と勘違いされて、アクセス拒否をくらう可能性もあるので注意です。
まとめ
スクレイピングのWEBデータ抽出について書いてみました。割と簡単にできませんでしたか?
僕はこれをきっかけにpythonを勉強していこうと思います!
これからpythonを始める方の参考になれば幸いです!