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

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

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

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

Q&A

解決済

1回答

2175閲覧

Python Webスクレイピングした結果をCSV出力したい

pythonbegginer

総合スコア25

スクレイピング

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

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

0グッド

0クリップ

投稿2020/03/25 04:00

Python初めて数日の初心者で、プログラミングも勉強始めたばかりです。
最終的にWebスクレイピングができるようになりたいと思っています。

色々教えてもらいながら途中までできたのですが、つまづいているので詳しい方教えて下さいm(__)m

※Windows10のコマンドプロンプトから実行しています。

★やりたいこと★

食べログで「新橋」「個室」で検索したURLを元に、 店舗名、URL、点数を取得したものをCSVファイルに出力したいです。

■問題■
CSVファイルを作成し、出力まではできたのですが、1店舗分しか出力されていません。URLに載っている全店舗の情報を出力するにはどうしたらいいでしょうか?

★使用しているコード★

Python

1import requests 2from bs4 import BeautifulSoup 3 4#食べログのURL 5url = "https://tabelog.com/tokyo/A1301/A130103/R5266/rstLst/?vs=1&sa=%E6%96%B0%E6%A9%8B%E9%A7%85&sk=%25E5%2580%258B%25E5%25AE%25A4&lid=hd_search1&vac_net=&svd=20200323&svt=1900&svps=2&hfc=1&ChkRoom=1&cat_sk=%E5%80%8B%E5%AE%A4" 6 7#タグ取得 8response = requests.get(url) 9soup = BeautifulSoup(response.content, 'html.parser') 10restrants = soup.find_all("div", class_="list-rst__wrap js-open-new-window") 11 12for restrant in restrants: 13 shopname = restrant.find("a", class_="list-rst__rst-name-target cpy-rst-name") 14 star = restrant.find("span", class_="list-rst__rating-val") 15 16#パンダでDF作成 17 18import pandas as pd 19 20list = [shopname.text, shopname.get("href").text,star.text] 21Column = ['店舗名', 'URL', '点数'] 22 23# データフレームを作成 24df = pd.DataFrame([list],columns=Column) 25 26# CSV ファイル出力 27df.to_csv("C:\python/tabelog.csv",encoding='utf_8_sig') 28 29#結果の表示 30df 31

結果はこうなります。

店舗名 URL 点数

0 尾崎牛焼肉 銀座 ひむか https://tabelog.com/tokyo/A1301/A130101/13193861/ 3.54

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

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

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

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

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

guest

回答1

0

ベストアンサー

forでrestrantsの一番最後だけを処理しているようです。
修正すると下の通りでしょうか。

Python

1import requests 2from bs4 import BeautifulSoup 3 4#食べログのURL 5url = "https://tabelog.com/tokyo/A1301/A130103/R5266/rstLst/?vs=1&sa=%E6%96%B0%E6%A9%8B%E9%A7%85&sk=%25E5%2580%258B%25E5%25AE%25A4&lid=hd_search1&vac_net=&svd=20200323&svt=1900&svps=2&hfc=1&ChkRoom=1&cat_sk=%E5%80%8B%E5%AE%A4" 6 7#タグ取得 8response = requests.get(url) 9soup = BeautifulSoup(response.content, 'html.parser') 10restrants = soup.find_all("div", class_="list-rst__wrap js-open-new-window") 11 12#テーブル作成 13table = [] 14 15for restrant in restrants: 16 shopname = restrant.find("a", class_="list-rst__rst-name-target cpy-rst-name") 17 star = restrant.find("span", class_="list-rst__rating-val") 18 table.append([shopname.get_text(), shopname["href"], star.text]) 19 20import pandas as pd 21 22Column = ['店舗名', 'URL', '点数'] 23 24# データフレームを作成 25df = pd.DataFrame(table,columns=Column) 26 27# CSV ファイル出力 28df.to_csv(r"tabelog.csv",encoding='utf_8_sig')

出力結果

csv

1,店舗名,URL,点数 20,アンジェロ,https://tabelog.com/tokyo/A1301/A130101/13015364/,3.26 31,鳥元 虎ノ門店,https://tabelog.com/tokyo/A1308/A130802/13019433/,3.19 42,佐賀牛グリルイタリアン ドルチェヴィータ 銀座,https://tabelog.com/tokyo/A1301/A130101/13168844/,3.06 53,個室×ラクレットチーズ プラチナフィッシュ ガーデンキッチン ,https://tabelog.com/tokyo/A1301/A130103/13199175/,3.10 6 7(中略) 8 918,本格中華食べ放題 天香府 新橋本店,https://tabelog.com/tokyo/A1301/A130103/13186435/,3.22 1019,尾崎牛焼肉 銀座 ひむか,https://tabelog.com/tokyo/A1301/A130101/13193861/,3.54

投稿2020/03/25 04:18

編集2020/03/25 04:35
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

pythonbegginer

2020/03/25 04:41 編集

ありがとうございます!無事できました!!感動です涙!! tableも初めて知ったのでとても勉強になりました。 これでかなりできることに幅が広がりそうです!本当にありがとうございます!
退会済みユーザー

退会済みユーザー

2020/03/25 04:39

全体のコードを掲載しました。↑だとインデント周りが不明ですがtableリストにデータが格納されていない状態とお見受けしました。df.to_csv(r"tabelog.csv",encoding='utf_8_sig')はお好きなパスに書き換えてお試しください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問