PythonでWebページをスクレイピングしてみた

こんにちは、技術部のKです。

さて、前回のPythonを用いた「Streamlitの導入からデプロイまで」に引き続き、今回もPythonに関連した「Webページのスクレイピング」について紹介させていただきます。

1. スクレイピングとは

スクレイピングとは、WebサイトからWebページのHTMLを取得し、見出しや特定データの抽出を可能にするソフトウェア技術のことを指します。
スクレイピングは各サイトの情報を取得できる便利な技術ですが、サイトによってはスクレイピング行為の禁止、違法行為に該当する可能性もあるため注意が必要です。

そのため、事前にWebサイトの利用規約や著作権に違反していないかなど、ご自身の責任の下ご確認をお願いします。

2. スクレイピングで利用できるライブラリ

ライブラリ Webページ取得 データ抽出
Requests ×
BeautifulSoup ×
Selenium
PythonでWebスクレイピングを行う際は上記のように複数のライブラリが用意されています。今回はRequestsとBeautifulSoupを使って進めます。

3. スクレイピングの手順

①事前準備

今回はスクレイピングの練習用として公開されているWebサイトhttp://books.toscrape.com/を使用して、赤枠で囲まれた本の価格“£53.74”を取得しましょう。
※jupyter lab(ジュピターラボ)を用いて進めます。

blank

②実行手順

以下、2つのライブラリをインストールします

				
					pip install requests
				
			
				
					pip install beautifulsoup4
				
			

インストールできたら、下記コマンドを実行します。

				
					from bs4 import BeautifulSoup
import requests

url = “http://books.toscrape.com/”

res = requests.get(url)
soup = BeautifulSoup(res.text, 'html.parser')
soup
				
			

インストールしたライブラリをインポートし、スクレイピングするURLを変数定義します。次にHTMLParserを用いて、HTML文書を読み込ませ、HTMLのタグを抽出し条件に合う属性のテキストを取得します。

実行結果は下記の通りとなります。
ご覧のとおり、WebサイトのHTMLデータの取得ができました。

blank

では、この中から本の価格を取得していきましょう。
そのためには、まず検証ツールを用います。該当サイトでF12を押下して検証ツールを開いてください。

blank
上記を確認すると、取得情報はpタグが使用され、クラス名が’ price_color’であることが分かります。取得したい情報のタグ及びクラス名が確認できたら、下記コマンドを実行します。 なおfind_all()メソッドは条件に一致する全ての情報をリスト形式で取得できます。(※find()メソッドを使用すると複数ある場合一つ目のみを取得するため注意。)
				
					prices_list = soup.html.find_all('p', {'class': 'price_color'})
prices_list
				
			

実行結果は下記のとおりです。

blank

この中から、冒頭申し上げた2番目の本の価格を取得すべく下記のコマンドを実行します。

				
					prices_list[1].text.replace('£','£')
				
			
blank

配列の2番目についてタグなどを除去した形式で表示するために、“.text”を使用し、文字コードの関係で価格を整形します。そうすることでサイトと同じ形で無事に価格取得ができました。

4. 参考

Webサイトによっては、上記のようにrequestsやBeautifulSoupを用いても文字化けして正しく取得できない場合もあります。これは、「ダウンロードしたHTMLファイル」と「ブラウザに表示されるHTML」が異なることが原因の一つに考えられます。その場合requestsでサーバーから直接ダウンロードしたHTMLファイルをBeautifulSoupで解読してもブラウザで見ている内容と違うのでスクレイピングできません。特にサイトの更新頻度が高いものは、サーバーコストの増加を避けるためによく適用されています。
その場合は、「requests-html」ライブラリを用いて容易にスクレイピングもできますので、気になる方は一度調べてみてください。


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

スーパーソフトウエアの採用情報

あなたが活躍できるフィールドと充実した育成環境があります

blank
blank