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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

1271閲覧

beautifulsoup4 を使って、値を取得したいのですが ?になってしまいます。

dame-dame

総合スコア78

Beautiful Soup

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

Python 3.x

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

0グッド

2クリップ

投稿2021/07/12 01:28

python3 を使って、下記のようなコードを書いて、価格情報だけを
取り出そうと思っています。

今回テストに使ったサイトは http://www.jepx.org/market/' です
そして試しに、<p class="figcaption" id="chartDAAll">7.76</p>
に囲まれている7.76という数字を取り出したいと思いまして
beautifulsoup と re を使いました。

イメージ説明


python3

1import re 2import requests 3from bs4 import BeautifulSoup 4 5target_url = 'http://www.jepx.org/market/' 6 7r = requests.get(target_url) #requestsを使って、webから取得 8soup = BeautifulSoup(r.text, "html.parser") 9soup = soup.find_all(p=re.compile("chartDAAll")) 10print (soup)

しかしながら上記のコードを実行した結果は数値の7,76をとることはできず
?となってしまいます

python3

1# python3 jepx.py 2[<p class="figcaption" id="chartDAAll"> ?</p>]

なぜでしょうか?
何か間違っておりますでしょうか?
ご指摘いただければと思います。

よろしくお願いいたいます

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

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

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

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

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

guest

回答1

0

ベストアンサー

まず仮説を立てる、調べる、実際に試してみる、という3つのサイクルを意識してみましょう。

1. 仮説

おそらくですが取得しようとしているページでHTMLの生成の一部にJavaScriptが使われているからBeatutifulsoupやrequestsで取ってきた(ダウンロードしてきた)HTMLファイルと質問者さんのブラウザで表示されているHTMLが異なっているのだと思います。

上記のような仮説を立てたら次はGoogleで検索してたくさん記事を流し読みしましょう。

2. 調査

例えば今回であれば「スクレイピング JavaScript 取れない」等で検索してみると下記の参考に挙げたような参考になるWebサイトがたくさん見つかります。(実際に質問者さんもいろいろと検索して読んでみてください!)

※参考1:[Python] 気象庁からアメダスの最新の気温を取得して利用する
※参考2:requestsで取得できないWebページをスクレイピングする方法

3. 実験

一旦、下記のようなスクリプトで値は取得できると思いますので試してみてください。
その上でrequests_htmlについて更に自分で調べて勉強してみてください!
※例えばなぜ下記のスクリプトでsleepを入れいているのか、どういった場合にrequests+Beautifulsoupでなくrequests-htmlを使うほうが良いのか、についても考えてみると勉強になって良いかと!

Python

1from requests_html import HTMLSession 2 3target_url = 'http://www.jepx.org/market/' 4 5# セッション開始 6session = HTMLSession() 7r = session.get(target_url) 8 9# ブラウザエンジンでHTMLを生成させる 10r.html.render(sleep=3) 11 12# スクレイピング 13ans = r.html.find('#chartDAAll', first=True) 14print("ans", ans.text) # debug

一旦、これを回答とします。

投稿2021/07/12 02:39

編集2021/07/12 15:18
digitalhimiko

総合スコア142

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

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

dame-dame

2021/07/12 05:19

ありがおうございます。できました。javascript でも他の言語でもできるかどうかいろいろ勉強してみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問