そんな情報を得た僕はPythonによるスクレイピングを行うことにしました。
ほぼ0からの学習であり、cssやHTMLも少し読める程度…悪戦苦闘しながらなんとか公開できるまで学習を進めました。
WEB上に散らばっているPythonのコードは基本的な部分であり
記事にするにあたり
と、いったところが僕が悩んだポイントでした。
今回は実例をもとに丁寧に解説したいと思いますので
題材としてソフトバンクの株主価値ともろもろのデータをスクレイピングします。
この記事を読み終えることで、実際のサイトからどのように数字を抜き出すか?
がわかるようになります。
最低限、Pythonとbeautifulsoup、Chromeがインストールされていることを前提に話を進めていきます。
SEO対策としてのスクレイピングはまずはこの記事(基礎編)を終えた上で記事にしていきたいと思います。
スクレイピングとはそもそも何なのか?
クローリングとスクレイピングという言葉があります。
クローリングとスクレイピング
クローリングとは、複数のウェブサイトのリンクをなぞってウェブページを巡回することを言います。また、クローリングをするプログラムをクローラーと呼びます。
ブログを書いている人にはGoogleのクローラーは馴染み深いと思います。
ページをインデックス化し、サイトへの検索を行うものがそれです。
スクレイピングとは、ウェブサイトのHTMLから必要なデータを取得する事を指します。
スクレイピングを行う上での注意事項
サイトによっては無許可のクローリング・スクレイピングを拒否している場合があります。
スクレイピングは人間ではできないような速度で多重のアクセスをかけることが可能なため、株価へのアクセスや電子ジャーナルなど規約で禁止されていることも多いです。
なお、twitterもスクレイピングによるデータ取得が禁止されています。
必須ライブラリ beautifulsoupとrequests
beautifulsoup = 取得したHTMLを解析するライブラリ
requests = URLからHTMLを取得するライブラリ
と、なります。
beautifulsoupとrequestsのインストール
pip install beautifulsoup pip install requests
でインストールできます。
Anacondaをインストールしている方はすでにどちらもインストールされているので不要です。
requestsでURLからHTMLを抜き出し、beautifulsoupで解析する
html = requests.get(url)
urlはhttp(s)://~で指定すればよいです。
プロキシ環境で使用する場合は、requests.get(url, proxies="プロキシサーバー")を指定してください。
それではソフトバンクのページから解析をしてみます。
beautifulsoupでHTMLから要素を抜き出す
import requests from bs4 import BeautifulSoup def getBS(url): html = requests.get(url) return BeautifulSoup(html.content, "html.parser") soup = getBS("https://group.softbank/corp/irinfo/stock/stock_value/")
今回はPythonに標準でついてくるhtml.paeserを使用しています。
高速なlxmlを使用する場合は
pip install lxml
で、インストールしておきましょう。
lxmlはC言語で記載されており高速ですが複雑な構造には弱いとのこと
この辺は使い分けを筆者が良くわかっていません^^;
実際にソフトバンクのページから情報を抜きだしてみる
実際のページから情報を抜き出すには、ソースコードを読み内容を探し出すことが大事です。
しかし、Chromeの開発者ツールでは対象のCSSセレクタやXpathを簡単にコピーできる機能があります。
①欲しい情報を右クリック⇒検証
②右側に対象のタグが出るため、Copy⇒Copy selectorでCSSセレクタをコピー
③soup.select(’コピーしたCSSセレクタを張り付け’)
で簡単に取得することが出来ます。
import datetime import requests from bs4 import BeautifulSoup def getBS(url): html = requests.get(url) return BeautifulSoup(html.content, "html.parser") soup = getBS("https://group.softbank/corp/irinfo/stock/stock_value/") elems_kabunushikati = soup.select( '#contents-body > div > div > div:nth-child(1) > div > table > tbody > tr > td > strong') kabunushi = int(elems_kabunushikati[0].contents[0].replace( " 円/株", "").replace(",", ""))
全体的なコードは上記になります。
cssセレクタをコピーしたあとはタグごと取得されるので.contents[0]でタグの中身を取得しています。
最終的には数値データでほしいので、円/株と桁区切りの「,」を置換して型変換しています。
まとめ
今回は、単純なつくりのサイトからスクレイピングする手法を紹介しました。
まとめると下記の
・WEBスクレイピングにはクローリングとスクレイピングがある
・スクレイピングはHTMLから必要なデータを抜き出すこと
・requestsでURLからHTMLを、beautifulsoupでHTMLを解析する
を、説明しました。
過去記事から読んでくれている方は一気にレベルが上がっているのですが
本サイトでは単純なところは説明を省こうと思います。
完全に初期知識が欲しい!という方には
無料の学習サイトではドットインストールhttps://dotinstall.com/ がおすすめです。
ある程度の条件式やループなど初級の内容が動画でまとめられており入門編としてはこれをやっておけば問題ありません。
初学習で終える自信がない方向けの最初の一冊は
「Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ」がおすすめです。
2冊目は(あるいは学習意欲の高いかたは)Pythonの基礎知識が隅々まで解説されている「入門Python3」がおすすめです。
業務で自動化をしたい、など目標がふんわりとしている方には
「退屈なことはPythonにやらせよう」もおススメです。
こちらの本は自動化に集中した内容となっており、流し読みで自分のスキルを高めることができます。僕もだいぶお世話になりました(笑)
有料の動画講座に関して言えばUdemyさんがおすすめです。
こちらのサイトは初学がある程度すすんでいる方向けです。
有料だけに講座ごとのジャンルが豊富で学びたい講座を選択して選ぶことが出来ます。
PythonではAI・データサイエンスなど最先端のIT技術からプレゼンなどビジネススキルに関する講座まで10万以上(※海外講座含む)あるため、自分が学びたい講座をみつけることができます。
お疲れさまでした。