Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Building a Recipe Scraping Tool in Python: What I learned

2025年09月12日に「Dev.to」が公開したITニュース「Building a Recipe Scraping Tool in Python: What I learned」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

広告が多いレシピサイトから、Pythonでレシピ情報を自動抽出するツールを開発した。`requests`と`BeautifulSoup`を使い、サイトのJSONデータからタイトル、材料、手順をtxtファイルに保存。WebスクレイピングとPythonパッケージ作成の実践的な経験を積んだ。

ITニュース解説

日常生活で誰もが経験するであろう不便さから、今回の開発プロジェクトは始まった。インターネットで新しい料理のレシピを検索するとき、多くのウェブサイトは広告でごちゃごちゃしていたり、意図しないスクロールが発生したりして、肝心の材料リストや調理手順を見つけるのが非常に面倒だと感じた経験はないだろうか。そのような状況に直面するたびに、「もっと簡単に情報を手に入れられる方法はないだろうか」という思いが募り、最終的には「自分でその方法を作り出そう」という結論に至ったのだ。

このプロジェクトの具体的な目標は、Pythonというプログラミング言語を使って、さまざまなレシピウェブサイトから必要な情報だけを自動的に抜き出し、それらを整理してパソコンに保存できるツールを作ることだった。具体的に抜き出したい情報は、レシピのタイトル、使用する材料のリスト、そして調理手順のリストの三つである。これらの情報をウェブサイトから取得し、最終的には見やすいテキストファイルとして出力することを目指した。

ツール開発にあたって、いくつかの重要な技術が使われた。まず、プログラミング言語として「Python 3.13」が採用された。Pythonはそのシンプルさと多様なライブラリが利用できることから、ウェブスクレイピングのようなタスクに適している。次に、ウェブサイトの情報を取得するために「Requests」というライブラリが使われた。これは、ウェブページを構成するHTMLデータをインターネット経由でプログラムが取得するためのツールであり、ウェブブラウザがウェブサイトを表示するために行うのと同様の「リクエスト」(情報の要求)を行う役割を担う。そして、取得したHTMLデータの中から必要な部分を効率的に見つけ出すために「BeautifulSoup」(略してbs4とも呼ばれる)が使われた。HTMLはウェブページの構造を定義する言語であり、BeautifulSoupはその構造を解析し、特定の情報(例えば、タイトルや材料リストが記述されている部分)を抽出するのに非常に便利なライブラリである。さらに、このツールをコマンドラインから簡単に使えるようにするために「Argparse」というライブラリが利用された。これは、プログラムを実行する際にユーザーがコマンドラインで指定する引数(この場合はレシピサイトのURLなど)を、プログラムが受け取り処理できるようにするためのものだ。

ツールの基本的な動作の流れは次のようになる。まず、ユーザーが調べたいレシピのウェブサイトのURLをプログラムに入力する。次に、プログラムは「Requests」ライブラリを使って、そのURLのウェブページをインターネットから取得する。取得されたウェブページは、HTMLという形式で書かれた大量のテキストデータだ。このHTMLデータを「BeautifulSoup」が解析する。当初はHTMLの中から特定の要素を直接探していたが、試行錯誤の結果、多くのレシピサイトには「application/ld+json」という形式でレシピに関する構造化されたデータが含まれていることを発見した。このデータは、ウェブサイトが検索エンジンなどに情報を正確に伝えるために用意しているもので、レシピのタイトル、材料、手順などが整然としたJSON形式で記述されている。プログラムはこのJSONデータを見つけ出し、そこからタイトル、材料リスト、手順リストといった必要な情報を抽出する。抽出されたデータは一時的にプログラム内で保持され、最終的にユーザーのパソコンにテキストファイルとして書き出されることで、いつでも参照できる形になる。

このプロジェクトを進める中で、いくつかの挑戦と大きな学びがあった。まず、ウェブスクレイピング自体が初めての経験だったため、どのようにして多様なデザインを持つウェブサイトから同じ種類のデータを一貫して取得すればよいのか、最初は全く見当がつかなかった。初期のコードは非常に静的で、「BeautifulSoup」を使って特定のウェブサイトの特定の箇所(例えば、クラス名が「ingredient-list」と指定されている部分)だけをハードコードして取得するような方法だった。しかし、これでは少しでもウェブサイトの構造が変わったり、異なるウェブサイトに対応しようとすると、すぐにプログラムが動かなくなってしまうという問題に直面した。

この壁にぶつかり、さらなる調査を行った結果、先ほど述べた「application/ld+json」という重要な仕組みにたどり着いた。これは「スキーマ・マークアップ」とも呼ばれ、ウェブサイトがそのコンテンツ(この場合はレシピ)に関する情報を、機械が理解しやすいように標準的な形式で提供するためのものだ。多くのレシピサイトがこの形式でタイトルや材料、手順などのメタデータを提供していることがわかり、これを活用することで、ウェブサイトの見た目の構造に左右されずに、共通の方法で情報を効率的に抽出できるようになったのだ。これはウェブスクレイピングの柔軟性と汎用性を大きく向上させる画期的な発見だった。

また、当初作成したツールは、ただのPythonスクリプトとして存在していた。つまり、他の人が使いたい場合は、ソースコードをダウンロードして直接実行する必要があった。しかし、もっと多くの人に使ってもらいたいという思いから、自分だけのPyPI(Python Package Index)パッケージを作成する方法を学んだ。PyPIはPythonの公式パッケージリポジトリであり、ここに公開することで、世界中のPythonユーザーが「pip install」コマンド一つで簡単にツールをインストールし、実行できるようになる。この経験を通じて、開発したソフトウェアを他の人が利用しやすい形で配布する方法について実践的な知識を得ることができた。最終的には、「pip install recipescraper-cli-tool-er」というコマンドでインストールでき、その後「recipescraper (レシピのURL)」というコマンドを実行するだけで、指定したレシピの情報をテキストファイルとして出力できるようになった。

完成したツールを使って生成されるテキストファイルは、レシピのタイトルが最初に表示され、その後に材料リスト、そして調理手順が分かりやすく箇条書きで並んだ形となる。これにより、広告や余計な情報に邪魔されることなく、必要な情報だけを簡潔に手元に置くことができるようになった。

このプロジェクトにはまだ改善の余地があり、今後のステップもいくつか考えられている。例えば、このツールをウェブサイトとして提供し、ユーザーがブラウザ上でURLを入力するだけでファイルをダウンロードできるようにすることや、出力形式をテキストファイルだけでなく、より見栄えの良いPDFファイルに変更することなどが挙げられる。また、現行の方法では対応できないウェブサイトもまだ存在するため、そのようなサイトからデータを取得するための代替手段を開発し、ツールの対応範囲を広げることも将来的な目標だ。

今回のプロジェクトは、ウェブサイトがどのように情報を構造化しているか(特にJSONメタデータについて)、HTMLの構造を解析する技術、そして自分自身でPythonパッケージを作成し、それを他の開発者が利用できる形で配布する方法など、多くの新しい知識とスキルを実践的に学ぶことができた、非常に楽しくて有益な経験だった。これからもこのプロジェクトをさらに発展させていきたいと考えているが、まずは今回の成果を足がかりに、次の新たな開発課題へと進んでいく。

関連コンテンツ