質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

解決済

【BeautifulSoup】繰り返し処理で要素を取り出そうとするが空で出力される

nsd
nsd

総合スコア14

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

2回答

0グッド

0クリップ

221閲覧

投稿2022/12/08 08:01

前提

Python(BeautifulSoup)によるスクレイピング
ホットペッパーグルメの料理ページを抽出するため、まず料理名(h4)を出力しようとしたのですが空として出力されてしまいます。

実現したいこと

料理名(h4)を正しく出力するためにはどのように書けばよろしいでしょうか?

該当のソースコード

import requests from bs4 import BeautifulSoup url = 'https://www.hotpepper.jp/strJ000980907/food/ res = requests.get(url) soup = BeautifulSoup(res.text, "html.parser") # 料理詳細 food_contents = soup.find("div",class_="dish").find_all(["h3","h4","p"]) for food_content in food_contents: food_name = food_content.find_all("h4") print(food_name)

food_contents

1[<h3 id="category1">◇◆ 牡蠣フライ・ぶりひらフェア ◆◇ 【開催期間】 2022年11月1日(火)~</h3>, 2 <p class="photoL slideShow"> 3 <a class="imagethickbox" href="https://imgfp.hotp.jp/IMGH/05/83/P040520583/P040520583_480.jpg" onclick="SCClick_lightbox('J000980907','1','P040520583','lb_food_category1_001');" rel="01" title="特撰サイズ 大粒牡蠣フライ(1個)"> 4 <img alt="特撰サイズ 大粒牡蠣フライ(1個)" src="https://imgfp.hotp.jp/IMGH/05/83/P040520583/P040520583_238.jpg"/></a> 5 </p>, 6 <h4 class="firstChild">特撰サイズ 大粒牡蠣フライ(1個)</h4>, 7 <p class="price">319円(税込)</p>, 8 <p class="catch">【瀬戸内産】身がつまった食べごたえ抜群の大粒サイズ!</p>, 9 <p class="photoL slideShow"> 10 <a class="imagethickbox" href="https://imgfp.hotp.jp/IMGH/05/85/P040520585/P040520585_480.jpg" onclick="SCClick_lightbox('J000980907','1','P040520585','lb_food_category1_002');" rel="01" title="ぶりひらの刺身"> 11 <img alt="ぶりひらの刺身" src="https://imgfp.hotp.jp/IMGH/05/85/P040520585/P040520585_238.jpg"/></a> 12 </p>, 13… 以下略 14

print(food_title)

1[] 2[] 3[] 4[] 5[] 6[] 7[] 8… 以下略

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

nsd

2022/12/08 08:14 編集

検討したのですが店舗ページ内の情報を抽出するAPIは用意されていませんでしたので 自力での抽出を選択し今の至ります。

回答2

0

自己解決

自己解決いたしました。
すべて文字列に変換してヒットした単語で抽出いたしました。
もっと上手い方法があるはずというモヤモヤが残りますが、一旦目的を達成したので完了とさせていただきます。
ご協力ありがとうございました。

# 料理詳細 food_contents = soup.find("div",class_="dish").find_all(["h3","h4","p"]) for food_content in food_contents: if "h3" in str(food_content): print(food_content.text) elif "h4" in str(food_content): print(food_content.text) elif "price" in str(food_content): print(food_content.text) elif "catch" in str(food_content): print(food_content.text)

投稿2022/12/08 09:34

nsd

総合スコア14

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

0

py

1import requests 2from bs4 import BeautifulSoup 3 4url = 'https://www.hotpepper.jp/strJ000980907/food/' 5res = requests.get(url) 6soup = BeautifulSoup(res.text, "html.parser") 7 8# 料理詳細 9food_contents = soup.find("div",class_="dish").find_all(["h4"]) 10 11for food_content in food_contents: 12 print(food_content.text)
特撰サイズ 大粒牡蠣フライ(1個) ぶりひらの刺身 ぶりひらの握り(2貫) 胡麻ぶりひら 大粒牡蠣フライ 胡麻ぶりひら定食 あん肝ポン酢 春菊の天ぷら 春菊とオニオンスライスのやみつきサラダ 牛ハツとキノコのガーリック炒め 牛ハツの唐揚げ ゴロゴロぶどうサワー/ゴロゴロぶどうハイボール 各 【ノンアルコール】ぶどう満喫ソーダ 海鮮ちゃんこ鍋(1人前) 国産 牛もつ鍋(1人前) サムゲタン風鍋(1人前) 台湾肉味噌鍋(1人前) 両国名物 鶏ちゃんこ(1人前) お鍋の〆 刺身盛合せ 【九州産】 活〆鯖姿造り (1尾) ごまさば(1人前) 国産〆鯖の卓上炙り(1人前) 海鮮なめろう 国産牛もつ鍋(1人前) 【無料】 薬味 【追加具材】 【トッピング】 鍋餃子(6個)/明太子 各 【鍋の〆に】雑炊/ちゃんぽん/棒ラーメン  各 鶏たたき2種盛合せ 鶏たたきのわさび和え/鶏たたきのユッケ 各 馬刺しと鶏たたきの盛合せ(6種類) 馬刺し盛合せ 馬刺しヒレ/馬刺しカルビ 各 馬刺しロース/赤身刺し 馬~いピり辛すじ煮込み 温玉ベーコンシーザーサラダ 海鮮サラダ グリーンサラダ ザクッときゅうりかつお節のせ/塩らっきょう 各 明太ポテトサラダ 山芋とろろ焼き明太マヨネーズ 明太マヨちくわ 炙り明太子 いわし明太 (1尾) / 明太子の大葉包み天ぷら 各 定番珍味3種盛合せ 【熊本産】 赤茄子と豆冨の揚げだし 梅水晶/うずらの煮玉子/枝豆/酢もつ 各 いつものポテトフライ/ポテトフライ明太マヨ添え 各 薩摩家のチーズ入りさつま揚げ 旨辛ミミガー/茄子の浅漬け 石焼とんこつ炊き餃子(6個) 博多風一口餃子(1人前) 【鹿児島県阿久根産】きびなごの唐揚げ 【鹿児島県阿久根産】 きびなごの一夜干し かつお節のせ厚揚げ焼き 大根味噌漬けとクリームチーズ 半生タルタルのチキン南蛮 から揚げ(3個) 大分名物とり天 【希少部位】鶏せせりの炭火焼風 明太チーズ玉子焼き/自家製玉子焼き 鶏皮巻き串 (1本) 串焼き盛合せ 串焼き単品 ししゃも(5尾)/エイヒレ 石焼熱々明太高菜飯 かつお節の玉子かけご飯 五島うどん 博多屋台風 焼きラーメン ごはんセット(ご飯・みそ汁・お漬物) 馬肉押し寿司 ねぎとろ押し寿司 馬刺し握り(3貫) 鯖握り(3貫) 福岡産あまおうアイスとバニラアイスの盛合せ 鹿児島県産さつまいもスティックとバニラアイス

投稿2022/12/08 08:25

yuma.inaura

総合スコア1285

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

nsd

2022/12/08 08:38

ご回答ありがとうございます。 申し訳ありません、情報が不足しておりました。 最終的に以下のような形で抽出したく、必要な要素のみ上から順に取り出そうとした次第です。 手始めにfood_contentsの中からh4のみ取り出して並べたかったのですが、そこでつまずいてしまいました。 上記を考慮した上でどのように変更をおこなえばよろしいでしょうか? --------- h3:◇◆ 牡蠣フライ・ぶりひらフェア ◆◇ 【開催期間】 2022年11月1日(火)~ h4:特撰サイズ 大粒牡蠣フライ(1個) p class="price":319円(税込) p class="catch":【瀬戸内産】身がつまった食べごたえ抜群の大粒サイズ! h4:~ p class="price":~ p class="catch":~ h4:~ p class="price":~ p class="catch":~ h4:~ p class="price":~ p class="catch":~ h3: h4:~ p class="price":~ p class="catch":~ ---------

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。