為替の現在レートを下記のサイト
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
該当サイトはスクレイピングが許可されていますか?
「何」が「どう」うまくいかないのでしょうか?
利用規約にはスクレイピングについては書かれていないので大丈夫だと思います。
すみません、説明不足でした。
soup.findで数値が取得できないということです。
soup.findでどうなるのですか?(どうならないじゃなくて)
File "C:\Users\kazuki\Documents\python\sukureipinngu.py", line 8
values = soup.find('div', class_='pair-box-rate')
^
SyntaxError: invalid character in identifier
上記のようなエラー分が出ます。
サイトのソースコードを見ましたが、`pair-box-rate` という名前のクラスがそもそもないようです。
SyntaxError: invalid character in identifier はコードに全角スペースが入っているのが原因です。
クラスが存在しないということは取得できないということでしょうか?
インデントのほうは解決したので、エラーコードを書き換えておきました。
これ「(42) 過剰リロード及びシステム的アクセス行為などによりPV(ページビュー)を増やす行為。」に該当する恐れがあるかもしれません。
プログラムを起動したときに一度だけ取得するだけでも該当しますか?
スクレイピングする場合は、まず Chrome の開発者ツールなどで Web サイトの HTML ソースコードを読んで、Web サイトがどういう作りになっているのかを把握する必要があります。
取得したソースコードを見てみると、pair-box-rate という名前のクラスはないようなので、soup.find('div', class_='pair-box-rate') では見つかりません。
提示サイトは規約上の問題があるようなので、問題点の指摘にとどめておきます。