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

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

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

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

Python 3.x

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

Q&A

1回答

1000閲覧

Webスクレイピングの手法、spanタグ内の情報がNoneTypeになる事象を解決したい

Takahisa0069

総合スコア4

Beautiful Soup

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

Python 3.x

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

0グッド

0クリップ

投稿2023/05/07 13:04

実現したいこと

Webスクレイピングで価格情報を取得したい

前提

Pythonでwebスクレイピングのコードを作成しています。

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

コード内には価格と思われる文字列はあるものの、
<span>に関するものはNoneTypeとなってしまい抽出できません。

該当のソースコード

Python

import pandas as pd
import requests
from bs4 import BeautifulSoup

エクセルファイルを読み込む

excel_file = pd.read_excel('/Users/takahisayonezu/Desktop/URLリスト_0425.xlsx')

URLリストを取得する

url_list = excel_file['URL'].tolist()

取得した情報を格納するためのリストを用意する

descriptions = []

各URLから情報を取得する

for url in url_list:
# URLを読み込む
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')

価格を取得する

price = soup.find('span', {'class': 'chr-lot-header__value-field'}) if price is not None: text = price.get_text(separator="\n") price = text.strip() else: price = ''
### 補足情報(FW/ツールのバージョンなど) 以下が情報を抜き出したいページです。 欲しい情報はPriceRealised USD 88,200の部分です。 https://onlineonly.christies.com/s/first-open-post-war-contemporary-art/bob-thompson-1936-1966-1/172454?ldp_breadcrumb=back ChatGPTを使いながら何度も修正を繰り返したのですが、何度やってもNone Typeとなってしまいました。

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

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

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

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

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

melian

2023/05/07 13:51

そのページのソースコード(HTML)を見ると判るかと思いますが、値段等のデータは JavaScript によって表示されています。ページに埋め込まれている JavaScript のコードをパースするか、Selenium を使うなどの対応が考えられます。
Takahisa0069

2023/05/07 14:40

ありがとうございます! アドバイスを基にSeleniumを用いましたところうまくいきました!
guest

回答1

0

print(response.content)して、出力されたHTMLを見ましょう。そこに無いものは、
soup = BeautifulSoup(response.content, 'html.parser')以降で、どう頑張ろうが取得しようがないです。

ブラウザで見ると表示されているのに、response.contentに無いとすると、その理由は、
・JavaScriptで追加された項目
・frameやiframeの中
・Shadow-rootがらみ
などです。
これら(※)を理解した上で、上記で得たHTMLとブラウザ開発者ツールで見るHTMLを見比べると原因がわかります。

JavaScriptで追加された項目を取得したい場合は、Seleniumライブラリを使うことが多いです。

※:JavaScriptで要素を追加すると言うのはどういうことか、frame/iframeとは何か、Shadow-rootとは何か

投稿2023/05/07 14:25

otn

総合スコア84499

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

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

Takahisa0069

2023/05/07 14:39

ありがとうございます! HTMLを再度確認の上、Seleniumで作成をしましたところ必要なデータを得ることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問