🐍
BeautifulSoupを使い取得したデータをJSONで出力する
Tips
PythonでWebスクレイピングをして、HTMLでデータを出力するのは、やったことあるが、JSONでは知らなかった💦
参考にした動画
こちらのサイトから情報を収集する
[今回使用したライブラリ]
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