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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

598閲覧

Python for文について

nono__216

総合スコア1

スクレイピング

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/07/26 06:47

前提・実現したいこと

初心者です。
1ページの中からfor文でレストラン情報をスクレイピングしたいのですが、
for文がうまく回っていないようです。
原因がわかりません。

結果としては、ページに載っているレストラン情報の
レストラン名・住所・メニューをリスト化したいです。

発生している問題・エラーメッセージ

shops内の1軒目だけはきちんと情報が取れていますが、
shopsの回数分同じデータが繰り返されてリストで返ってきます。
for文がきちんと回っていないようです。

エラーメッセージ ```エラーメッセージは特にありません。 ### 該当のソースコード ```Python import requests from bs4 import BeautifulSoup import time res = requests.get("https://www.tvq.co.jp/o_j/otonanatv/maiu/") res.encoding = res.apparent_encoding top_soup = BeautifulSoup(res.text, "html.parser") top_page_title = top_soup.find("li", attrs={"class":"column-list-item"}) elem_top_page_title = top_page_title.find("a", attrs={"class":"column-list-link"}) con_url = elem_top_page_title["href"] ori_url = "https://www.tvq.co.jp/" page_url = ori_url+con_url res_page = requests.get(page_url) res_page.encoding = res_page.apparent_encoding page_soup = BeautifulSoup(res_page.text, "html.parser") shops = page_soup.find_all("li", attrs = {"class":"maiu-detail-item"}) shop = shops[0] shop_infos = [] for shop in shops: shop_name = page_soup.h4.text.replace("◆","") shop_address = page_soup.find("div", attrs={"class":"txt"}).p.text.replace("住所:","") shop_menu = page_soup.find("ul", attrs = {"class":"maiu-menu-items"}).text.replace("\n","■") shop_info = [shop_name, shop_address, shop_menu] shop_infos.append(shop_info)

試したこと

shop = shops[0]として、数字をずらした時にきちんと中身が変わるかどうかの確認。

補足情報(FW/ツールのバージョンなど)

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

回答にならないかもしれませんけれど書きます。
for文の中にprint()を一つずつ追加していき、
変数の中身がどのように変化していっているか
見てみると分かるようになるかもしれません。

print(shop, shop_name, shop_address, shop_menu)など

投稿2021/07/26 07:10

ArMigELo

総合スコア76

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

for文の中でshopを使っていないのですから変わらないのは当然です。

テストはしていませんが、

python

1shop_infos = [] 2for shop in shops: 3 shop_name = shop.h4.text.replace("◆","") 4 shop_address = shop.find("div", attrs={"class":"txt"}).p.text.replace("住所:","") 5 shop_menu = shop.find("ul", attrs = {"class":"maiu-menu-items"}).text.replace("\n","■") 6 shop_info = [shop_name, shop_address, shop_menu] 7 8 shop_infos.append(shop_info)

を試してみて下さい。

投稿2021/07/26 07:08

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nono__216

2021/07/26 07:13

ありがとうございます。 理解しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問