【Python】BeautifulSoupを使ったWebスクレイピングのやり方を解説

目次から探す

実践的なWebスクレイピングの例

これまでに学んだBeautifulSoupの基本操作を使って、実際にWebスクレイピングを行う例を紹介します。

以下の3つの例を通じて、実践的なスクレイピングの方法を学びましょう。

例1:Webサイトから記事のタイトルを取得

このサイトの記事のタイトルを取得する例を見ていきましょう。

まずは、必要なライブラリをインポートし、Webページを取得します。


import requests
from bs4 import BeautifulSoup
url = "https://af-e.net/"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

次に、記事のタイトルが含まれるタグを調べます。

このサイトの記事一覧の記事のタイトルは、<h2>タグの中にあり、class属性が"p-postList__title"なので、この情報を元にパラメーターを設定して、記事のタイトルを取得します。

titles = soup.find_all("h2", class_="p-postList__title")
for title in titles:
    print(title.text)

これで、トップページにある記事のタイトルの一覧を取得できました。

例2:ECサイトから商品情報を取得

次に、ECサイトから商品情報を取得する例を見ていきましょう。

ここでは、Amazonの検索結果ページを対象にします。

このサンプルは実際に動作するコードですが、Amazon公式サイトは自動化プログラムによるアクセスを制限しているため、高確率で失敗します。

まずは、必要なライブラリをインポートし、Webページを取得します。


import requests
from bs4 import BeautifulSoup
url = "https://www.amazon.co.jp/s?field-keywords=Python"
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")

次に、商品名と価格が含まれるタグを調べます。

商品名は、<span>タグの中にあり、class属性が"a-size-medium a-color-base a-text-normal"であることがわかります。

価格は、<span>タグの中にあり、class属性が"a-price-whole"であることがわかります。

これをもとに、商品名と価格を取得します。


products = soup.find_all("div", class_="s-result-item")
for product in products:
    name = product.find("span", class_="a-size-medium a-color-base a-text-normal")
    price = product.find("span", class_="a-price-whole")
    
    if name and price:
        print(name.text, price.text)

これで、ECサイトから商品情報を取得できました。

これらの方法を応用して、さまざまなWebサイトから情報を取得してみましょう。

ただし、Webスクレイピングを行う際には、対象サイトの利用規約や著作権に注意してください。

1 2 3 4

目次から探す