🐍

BeautifulSoupを使い取得したデータをJSONで出力する

2024/06/16に公開

Tips

PythonでWebスクレイピングをして、HTMLでデータを出力するのは、やったことあるが、JSONでは知らなかった💦

参考にした動画

https://www.youtube.com/watch?v=rDVrf9sCOW8

こちらのサイトから情報を収集する
https://www.orangepage.net/recipes/search/292

[今回使用したライブラリ]

beautifulsoup4 4.12.3
certifi        2024.6.2
pip            23.2.1
setuptools     68.2.0
soupsieve      2.5
wheel          0.41.2

このコマンドを打つと、依存したバージョンのファイルを生成することができる。

pip list > requirements.txt

[生成されたファイル]

Package        Version
-------------- --------
beautifulsoup4 4.12.3
certifi        2024.6.2
pip            23.2.1
setuptools     68.2.0
soupsieve      2.5
wheel          0.41.2

[ソースコード]

from bs4 import BeautifulSoup
import urllib.request
import ssl
import certifi
import json


def fetch_webpage(url):
    ctx = ssl.create_default_context(cafile=certifi.where())
    with urllib.request.urlopen(url, context=ctx) as response:
        return BeautifulSoup(response, 'html.parser')


def extract_data(soup):
    data = {}
    data['title'] = soup.title.string
    recipe_names = soup.find_all('h2')  # Adjust this line based on the actual HTML structure
    data['recipes'] = [recipe.text for recipe in recipe_names]
    return data


def convert_to_json(data):
    return json.dumps(data, ensure_ascii=False)


url = 'https://www.orangepage.net/recipes/search/292'
soup = fetch_webpage(url)
data = extract_data(soup)
json_data = convert_to_json(data)

print(json_data)

Runボタンを押すと実行結果がみれます。

/Users/hashimotojunichi/PycharmProjects/scraping/.venv/bin/python /Users/hashimotojunichi/PycharmProjects/scraping/main.py 
{"title": "オレンジ 料理レシピ 厳選30品【オレンジページnet】プロに教わる簡単おいしい献立レシピ", "recipes": ["食材から探す", "オレンジ", "オレンジとアールグレイのパウンドケーキ", "フレッシュオレンジティー", "オレンジとりんごのフルーツウォーター", "豚の角煮  クローブ風味", "骨つき鶏のカレー風味から揚げ", "オレンジ入りグリーンサラダ", "オレンジと紅茶のパウンドケーキ", "オレンジのタルト", "オレンジゼリー", "オレンジ レアチーズケーキ", "オレンジと甘栗のクラフティ", "オレンジかん", "オレンジとアールグレイのパウンドケーキ", "フレッシュオレンジティー", "オレンジとりんごのフルーツウォーター", "豚の角煮  クローブ風味", "骨つき鶏のカレー風味から揚げ", "オレンジ入りグリーンサラダ", "オレンジと紅茶のパウンドケーキ", "オレンジのタルト", "オレンジゼリー", "オレンジ レアチーズケーキ", "オレンジと甘栗のクラフティ", "オレンジかん", "\n料理のきほん", "注目のレシピ<PR>", "人気レシピランキング", "BOOK\n\t\t\t\t\t\tオレンジページの本\n", "SPECIAL TOPICS", "\nRANKING\n            今、読まれている記事\n", "\nRECIPE RANKING\n            人気のレシピ\n", "PRESENT\n                プレゼント\n", "PICK UP注目の記事\n", "Check!"]}

Process finished with exit code 0

Discussion