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

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

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

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

Python 3.x

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

Q&A

2回答

752閲覧

python BeautifulSoupによるスクレイピング

k_trader

総合スコア14

Beautiful Soup

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

Python 3.x

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

0グッド

0クリップ

投稿2020/02/01 13:05

編集2020/02/01 14:01

為替の現在レートを下記のサイト
https://fx.minkabu.jp/pair/USDJPY
からクラスのpair-box-rateの数値を取得して、活用したいと考えています。

from bs4 import BeautifulSoup import urllib.request as req def USDJPY(): url="https://fx.minkabu.jp/pair/USDJPY" res = req.urlopen(url) soup = BeautifulSoup(res, 'lxml');   values = soup.find('div', class_='pair-box-rate')   current_value = float(values) return current_value result=USDJPY() print(result)

エラー

Traceback (most recent call last): File "C:\Users\kazuki\Documents\python\sukureipinngu.py", line 12, in <module> result=USDJPY() File "C:\Users\kazuki\Documents\python\sukureipinngu.py", line 9, in USDJPY current_value = float(values) TypeError: float() argument must be a string or a number, not 'NoneType'

サイトで検索して様々な方法を試しましたがどうもうまくいかないです。
初歩的なことですが、どなたかご教授いただければ幸いです。

環境
Python 3.7.1

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

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

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

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

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

meg_

2020/02/01 13:11

該当サイトはスクレイピングが許可されていますか?
otn

2020/02/01 13:12

「何」が「どう」うまくいかないのでしょうか?
k_trader

2020/02/01 13:15

利用規約にはスクレイピングについては書かれていないので大丈夫だと思います。
k_trader

2020/02/01 13:17

すみません、説明不足でした。 soup.findで数値が取得できないということです。
otn

2020/02/01 13:26

soup.findでどうなるのですか?(どうならないじゃなくて)
k_trader

2020/02/01 13:30

File "C:\Users\kazuki\Documents\python\sukureipinngu.py", line 8   values = soup.find('div', class_='pair-box-rate') ^ SyntaxError: invalid character in identifier 上記のようなエラー分が出ます。
tiitoi

2020/02/01 13:32

サイトのソースコードを見ましたが、`pair-box-rate` という名前のクラスがそもそもないようです。
tiitoi

2020/02/01 13:34

SyntaxError: invalid character in identifier はコードに全角スペースが入っているのが原因です。
k_trader

2020/02/01 13:40

クラスが存在しないということは取得できないということでしょうか? インデントのほうは解決したので、エラーコードを書き換えておきました。
meg_

2020/02/01 13:42

これ「(42) 過剰リロード及びシステム的アクセス行為などによりPV(ページビュー)を増やす行為。」に該当する恐れがあるかもしれません。
k_trader

2020/02/01 13:48

プログラムを起動したときに一度だけ取得するだけでも該当しますか?
tiitoi

2020/02/01 13:49 編集

スクレイピングする場合は、まず Chrome の開発者ツールなどで Web サイトの HTML ソースコードを読んで、Web サイトがどういう作りになっているのかを把握する必要があります。 取得したソースコードを見てみると、pair-box-rate という名前のクラスはないようなので、soup.find('div', class_='pair-box-rate') では見つかりません。 提示サイトは規約上の問題があるようなので、問題点の指摘にとどめておきます。
guest

回答2

0

失礼しました。
pair-box-rate
ありました。ただし別のHTMLに書かれていて、それを取り込んで
表示しているようです。

<div class="pair-box-rate"> <i class="is-even"></i> <span class="item">108.32</span> <span class="fs-xl mr10">9</span> </div>

https://fx.minkabu.jp/pair/USDJPY
ブラウザでこのURLのHTMLソースを見てみましたが、
pair-box-rate
というクラスはありませんでした。

ですから
values = soup.find('div', class_='pair-box-rate')
の結果はnullではないですか?
valuesの内容を確認してみてください。

投稿2020/02/01 14:25

編集2020/02/01 14:57
technocore

総合スコア7225

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

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

0

>IndentationError: unindent does not match any outer indentation level

インデントが崩れている、というエラーみたいですね。
tabキーを使ってインデントを整えてください。

投稿2020/02/01 13:58

technocore

総合スコア7225

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

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

k_trader

2020/02/01 14:02

ご指摘ありがとうございます。 インデントはこのコードをコピペしたときに壊れたものだと思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問