見出し画像

【第2回 Python Beautiful Soup】Beautiful Soupでスクレイピングを使ってアマゾン商品の価格を抽出してみた。

こんにちは(@t_kun_kamakiri

今回はもBeautiful Soupを使ってスクレイピングでもしてみようかなと思ってnoteを書き始めています。

☟前回のnoteをまずはお読みください('◇')ゞ

前回はAmazonサイトからキーワードに対してタイトルを抽出したのですが、今回は書籍の価格を抽出してみます。

【Pythonの使用環境】
Google Collaboratory

Google CollaboratoryならGoogleアカウントがあればOSによらずにPythonが使えて便利ですよね。

前回と同じ部分

まずは前回のnoteとかぶる部分は以下に整理しておきます。

●必要なライブラリをインポートする
●アマゾンのサイトにいって「Pythonスクレイピング」の検索に引っかかった書籍のタイトルを抽出する

以上をPythonのコードにすると以下のようになります。

import requests
from bs4 import BeautifulSoup

keyword = 'Pythonスクレイピング'

# url = "https://www.amazon.co.jp/s?k=" + keyword + "&__mk_ja_JP=カタカナ&ref=nb_sb_noss_2"
url = "https://www.amazon.co.jp/s?k=" + keyword + "&__mk_ja_JP=カタカナ&ref=nb_sb_noss_2"

response = requests.get(url)
html =response.text

#htmlパーサー
soup = BeautifulSoup(html,'html.parser')

soup 

これによって以下のようなHTMLの全体を抽出することができます。

画像1

価格のCSSクラスを調べて、価格を抽出する

Amazonサイトにいって価格が表示されているCSSクラスを調べます。

右クリック⇒「検証」と押してHTMLを表示して調べれば良いです。

画像2

どうやら価格には「a-price」というCSSのクラスが付けられているのでそこを目掛けて抽出すれば良いので、Pythonで以下のように書きます。

prices = soup.select('.a-offscreen')
prices

このようにすると以下のように価格のHTML表記のみを抽出してくれます。

画像3

価格が抽出されていますね(^^)

前回はタイトルを抽出した時に余計な「None」という空のデータを拾ってきてしまったため面倒でしたが、今回は全て価格のみ拾ってきているので、後はfor文を使って簡単に価格のみを抽出できます。

※ちなみに「prices.text」としてテキスト部分を抽出したいところですが、「.text」は要素一つに対して使えるので今は「prices」がリストになっているのでエラーが生じるので注意です。

次に「prices」をfor文で回しながら、ひとつひとつの要素を抽出してリストに入れていけばOKです。

price_list = []

for price in prices:
 price_list.append(price.text)

price_list

☟結果はこのようになります。

画像4

うまくいっているように見えます(^^)/

でも、何の書籍の価格かわからない状態になっていますね(笑)

検索のたびにAmazonの表示も少し変わるので、タイトルと価格はセットで抽出する方が良さそうですね('ω')

それは次回にするといして簡単に価格が抽出できました。

※あともう一点加えるなら、単行本とKindle版の価格がごっちゃで価格を拾ってきているので条件分岐できるアルゴリズムにしたいですね。
それは今後の課題にして、まずはできるところからやっていきます(^^)/

では、今回は以上です。

Pythonでのスクレイピングはこちらの参考書でも勉強をはじめています。

Twitter➡@t_kun_kamakiri
ブログ➡宇宙に入ったカマキリ(物理ブログ)


この記事が気に入ったらサポートをしてみませんか?