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

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

新規登録して質問してみよう
ただいま回答率
85.47%
Beautiful Soup

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

Python

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1636閲覧

Python ウェブスクレイピング データが取得できない

tatsuya5.22

総合スコア8

Beautiful Soup

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

Python

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/09/04 00:39

編集2020/09/04 06:08

前提・実現したいこと

PythonでUberEatsのページからエリアごとのお店の数のデータを取得しようとスクレイピンングをしています。
しかしウェブページ上で「検証」をしHTMLを解析したことがある方ならわかるかと思いますがコードの左端に矢印の様なマークがついておりそこをクリックすると隠れているコードが出てきます。

自分が解析しているUberEatsのウェブページではお店の名前が埋め込まれているコードが<div class="fa i8 i9">の中に隠れており、本来は表示されていないためお店の名前のデータを取得しようとしてもできません。

https://www.ubereats.com/jp/feed?pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMiVFNSU5MCU5MSVFNiU5NyVBNSVFNSVCOCU4MiUyMiUyQyUyMnJlZmVyZW5jZSUyMiUzQSUyMkNoSUpMNlpKcGlZRUFXQVI1X0hOWFpWTDZYYyUyMiUyQyUyMnJlZmVyZW5jZVR5cGUlMjIlM0ElMjJnb29nbGVfcGxhY2VzJTIyJTJDJTIybGF0aXR1ZGUlMjIlM0EzNC45NDg3MDYxJTJDJTIybG9uZ2l0dWRlJTIyJTNBMTM1LjY5ODQxNzElN0Q%3D

上記のページから店名のデータを全て取得しようとしております。

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

Python

1import pandas as pd 2import requests 3from bs4 import BeautifulSoup 4 5page = requests.get('https://www.ubereats.com/jp/feed?pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMiVFNSU5MCU5MSVFNiU5NyVBNSVFNSVCOCU4MiUyMiUyQyUyMnJlZmVyZW5jZSUyMiUzQSUyMkNoSUpMNlpKcGlZRUFXQVI1X0hOWFpWTDZYYyUyMiUyQyUyMnJlZmVyZW5jZVR5cGUlMjIlM0ElMjJnb29nbGVfcGxhY2VzJTIyJTJDJTIybGF0aXR1ZGUlMjIlM0EzNC45NDg3MDYxJTJDJTIybG9uZ2l0dWRlJTIyJTNBMTM1LjY5ODQxNzElN0Q%3D') 6soup = BeautifulSoup(page.content, 'html.parser') 7 8menus = soup.find_all(class_= 'cc el ag bp bq') 9menu_list = [menu.find('img').get("alt") for menu in menus] 10 11print(menu_list) 12 13(base) TatsuyanoMacBook-Pro:MyPython tatsuya$ /Users/tatsuya/opt/anaconda3/bin/python /Users/tatsuya/Documents/MyPython/webscraping6.py 14[] 15 16↑何もないというアウトプットになってしまっている。本当であればお店の名前、今回の例で言うと[餃子の王将 東向日]がアウトプットとして出てきてほしい。 17

該当のソースコード

下記のHTMLのソースコードはウェブページのHTMLの一部を抜き出してきたものです。
下記のコードをそのままコードの中に入れるのではなく、あくまでも下記のPyhtonのコードを使って該当ページのHTMLデータを取得してスクレイピングしたいのです。

Python

1page = requests.get('https://www.ubereats.com/jp/feed?pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMiVFNSU5MCU5MSVFNiU5NyVBNSVFNSVCOCU4MiUyMiUyQyUyMnJlZmVyZW5jZSUyMiUzQSUyMkNoSUpMNlpKcGlZRUFXQVI1X0hOWFpWTDZYYyUyMiUyQyUyMnJlZmVyZW5jZVR5cGUlMjIlM0ElMjJnb29nbGVfcGxhY2VzJTIyJTJDJTIybGF0aXR1ZGUlMjIlM0EzNC45NDg3MDYxJTJDJTIybG9uZ2l0dWRlJTIyJTNBMTM1LjY5ODQxNzElN0Q%3D') 2soup = BeautifulSoup(page.content, 'html.parser')

HTML

1<div class="fa i8 i9"> 2 <div class="af ia"> 3 <a tabindex="-1" href="https://www.ubereats.com/jp/kyoto/food-delivery/%E9%A4%83%E5%AD%90%E3%81%AE%E7%8E%8B%E5%B0%86-%E6%9D%B1%E5%90%91%E6%97%A5/SoD9-2nATD6LrOfgjQhWjA?pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMiVFNSU5MCU5MSVFNiU5NyVBNSVFNSVCOCU4MiUyMiUyQyUyMnJlZmVyZW5jZSUyMiUzQSUyMkNoSUpMNlpKcGlZRUFXQVI1X0hOWFpWTDZYYyUyMiUyQyUyMnJlZmVyZW5jZVR5cGUlMjIlM0ElMjJnb29nbGVfcGxhY2VzJTIyJTJDJTIybGF0aXR1ZGUlMjIlM0EzNC45NDg3MDYxJTJDJTIybG9uZ2l0dWRlJTIyJTNBMTM1LjY5ODQxNzElN0Q%3D"> 4 <figure height="240" class="ib af ic b3"> 5 <div class="cc el ag bp bq"> 6 <img alt="餃子の王将 東向日" src = "https://d1ralsognjng37.cloudfront.net/b06557fe-f9a0-4ed0-b72b-dedba826a37b.jpeg" aria-hidden="true" class="cc e1 hw cy"> 7 </div> 8 <div class="ag gt au cu cc id aq">...</div> 9 </figure> 10 <div class="im au aw">...</div> 11 <div class="iq c3 c4 ir is it au aw">...</div> 12 </a> 13 <div class="ag d9 fs ic cc ia">...</div> 14 </div> 15<div>

試したこと

上記に記載した通りfind関数でスクレイピングしようと試みましたが残念ながら。。。
以下2点修正いたしましたが以前店名の情報は獲得できずにおります。
・classのcc el ag bp bqで、l(エル)が1(いち)になっていた
・img altを取得するのにget_text()を使っていたのでfind('img').get("alt")に修正

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下2つの修正で店名がとれました。
・classのcc el ag bp bqで、l(エル)が1(いち)になっていた
・img altを取得するのにget_text()を使っていたのでfind('img').get("alt")に修正

python3

1import pandas as pd 2import requests 3from bs4 import BeautifulSoup 4 5page = """ 6<div class="fa i8 i9"> 7 <div class="af ia"> 8 <a tabindex="-1" href="https://www.ubereats.com/jp/kyoto/food-delivery/%E9%A4%83%E5%AD%90%E3%81%AE%E7%8E%8B%E5%B0%86-%E6%9D%B1%E5%90%91%E6%97%A5/SoD9-2nATD6LrOfgjQhWjA?pl=JTdCJTIyYWRkcmVzcyUyMiUzQSUyMiVFNSU5MCU5MSVFNiU5NyVBNSVFNSVCOCU4MiUyMiUyQyUyMnJlZmVyZW5jZSUyMiUzQSUyMkNoSUpMNlpKcGlZRUFXQVI1X0hOWFpWTDZYYyUyMiUyQyUyMnJlZmVyZW5jZVR5cGUlMjIlM0ElMjJnb29nbGVfcGxhY2VzJTIyJTJDJTIybGF0aXR1ZGUlMjIlM0EzNC45NDg3MDYxJTJDJTIybG9uZ2l0dWRlJTIyJTNBMTM1LjY5ODQxNzElN0Q%3D"> 9 <figure height="240" class="ib af ic b3"> 10 <div class="cc el ag bp bq"> 11 <img alt="餃子の王将 東向日" src = "https://d1ralsognjng37.cloudfront.net/b06557fe-f9a0-4ed0-b72b-dedba826a37b.jpeg" aria-hidden="true" class="cc e1 hw cy"> 12 </div> 13 <div class="ag gt au cu cc id aq">...</div> 14 </figure> 15 <div class="im au aw">...</div> 16 <div class="iq c3 c4 ir is it au aw">...</div> 17 </a> 18 <div class="ag d9 fs ic cc ia">...</div> 19 </div> 20<div> 21""" 22soup = BeautifulSoup(page, 'html.parser') 23 24menus = soup.find_all(class_= 'cc el ag bp bq') 25menu_list = [menu.find('img').get("alt") for menu in menus] 26 27print(menu_list) 28# ['餃子の王将\u3000東向日']

投稿2020/09/04 01:46

jeanbiego

総合スコア3966

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

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

tatsuya5.22

2020/09/04 06:06

ご回答ありがとうございました。該当のソースコードを直接コードの中に入れてしまっている様なので質問を修正しておきました。一度UberEatsのページに行ってもらえるとわかると思うのですが該当のソースコードはあくまでもウェブページのHTMLの一部であり、取得する場合はソースコードを直接コード内に組み込むのではなくpage,soupメソッドを使って取得したいと考えております。
jeanbiego

2020/09/04 06:36

得られたsoupはご覧になってみましたか? こちらで確認したところそもそも該当classがないので、恐らく生成前のテンプレートしか取得できていません。 動的なサイトは、seleniumとか使わないと取得できないと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問