市場情報と雑学と 〜明日使える知識を〜

某大手電気メーカーに勤める社内SE。マーケティング的なことも業務の中に入ってきているなかで有望な市場分析を発信していきます。また、導入してきたなかで便利な小物があれば紹介していきたいと思います。

実際のサイトから読み取る初心者向けPythonスクレイピング入門

スクレイピングってSEOに便利らしいよ

そんな情報を得た僕はPythonによるスクレイピングを行うことにしました。

 

ほぼ0からの学習であり、cssやHTMLも少し読める程度…悪戦苦闘しながらなんとか公開できるまで学習を進めました。

 

WEB上に散らばっているPythonのコードは基本的な部分であり

記事にするにあたり

「そもそもスクレイピングって何?」

「実際のサイトから読み取っているコードを見たい」

チートシート的なタグの選択方法を見たい」

「name属性もクラスも無いテーブルってどうやって引っ張るの?」

 

と、いったところが僕が悩んだポイントでした。

 

今回は実例をもとに丁寧に解説したいと思いますので

題材としてソフトバンクの株主価値ともろもろのデータをスクレイピングします。

group.softbank

 

f:id:ysky24:20200302225054p:plain

上記リンクの数字の部分を抜き出します

この記事を読み終えることで、実際のサイトからどのように数字を抜き出すか?

がわかるようになります。

 

最低限、Pythonとbeautifulsoup、Chromeがインストールされていることを前提に話を進めていきます。

 

SEO対策としてのスクレイピングはまずはこの記事(基礎編)を終えた上で記事にしていきたいと思います。

 

 

スクレイピングとはそもそも何なのか?

 スクレイピングとは通常、WEBスクレイピングを指します。

クローリングとスクレイピングという言葉があります。

クローリングとスクレイピング

 

クローリングとは、複数のウェブサイトのリンクをなぞってウェブページを巡回することを言います。また、クローリングをするプログラムをクローラーと呼びます。

ブログを書いている人には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を簡単にコピーできる機能があります。

 

①欲しい情報を右クリック⇒検証

f:id:ysky24:20200308001655p:plain

 ②右側に対象のタグが出るため、Copy⇒Copy selectorでCSSセレクタをコピー

 

f:id:ysky24:20200308001806p:plain

 

③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を解析する

ChromeCSSセレクタを使えば簡単な手順でスクレイピングできる

 

を、説明しました。

 

過去記事から読んでくれている方は一気にレベルが上がっているのですが

本サイトでは単純なところは説明を省こうと思います。

 

完全に初期知識が欲しい!という方には

 

無料の学習サイトではドットインストールhttps://dotinstall.com/ がおすすめです。

 

ある程度の条件式やループなど初級の内容が動画でまとめられており入門編としてはこれをやっておけば問題ありません。

 

初学習で終える自信がない方向けの最初の一冊は

Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ」がおすすめです。

 

2冊目は(あるいは学習意欲の高いかたは)Pythonの基礎知識が隅々まで解説されている「入門Python3」がおすすめです。

 

業務で自動化をしたい、など目標がふんわりとしている方には

「退屈なことはPythonにやらせよう」もおススメです。

こちらの本は自動化に集中した内容となっており、流し読みで自分のスキルを高めることができます。僕もだいぶお世話になりました(笑)

 

 

有料の動画講座に関して言えばUdemyさんがおすすめです。

 

こちらのサイトは初学がある程度すすんでいる方向けです。

 

有料だけに講座ごとのジャンルが豊富で学びたい講座を選択して選ぶことが出来ます。
PythonではAI・データサイエンスなど最先端のIT技術からプレゼンなどビジネススキルに関する講座まで10万以上(※海外講座含む)あるため、自分が学びたい講座をみつけることができます。

 

お疲れさまでした。

 

にほんブログ村 投資ブログ 投資情報へ
にほんブログ村