これがさまざまなシナリオで機能する理由がわかりませんが、このシナリオでは機能しません。基本的に、一部の紳士が私を助けてくれました [〜#〜]ここ[〜#〜] 天気をかき集めるようにコードを改善して、完全に機能しました。次に、同じようにして、スパンタグ<span class="text-large2" data-currency-value="">$196.01</span>
にあるETH値をスクレイピングしました。したがって、私はコードで同じテクニックに従い、フィールドを置き換え、それが機能することを望んでいました。
コードはここにあります:
import requests
from BeautifulSoup import BeautifulSoup
import time
url = 'https://coinmarketcap.com/currencies/litecoin/'
def ltc():
while (True):
response = requests.get(url)
soup = BeautifulSoup(response.content)
price_now = int(soup.find("div", {"class": "col-xs-6 col-sm-8 col-md-4 text-left"}).find(
"span", {"class": "text-large2"}).getText())
print(u"LTC price is: {}{}".format(price_now))
# if less than 150
if 150 > price_now:
print('Price is Low')
# if more than 200
Elif 200 < price_now:
print('Price is high')
if __name__ == "__main__":
ltc()
出力は次のようになります。
Traceback (most recent call last):
File "test2.py", line 24, in <module>
ltc()
File "test2.py", line 13, in ltc
"span", {"class": "text-large2"}).getText())
ValueError: invalid literal for int() with base 10: '196.01'
その後、ようやくこの方法で試しました。しかし、ここから誤検知が発生しますが、エラーは発生しません。何でも印刷します
import requests
from bs4 import BeautifulSoup
import time
url = 'https://coinmarketcap.com/currencies/litecoin/'
def liteCoin():
while (True):
response = requests.get(url)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
value = soup.find('span', {'class': 'text-large2'})
print(''.join(value.stripped_strings))
if 150 > value: # if less than 150
print('Price is Low!')
Elif 200 < value: # if more than 200
print('Price is High')
else:
print('N/A')
time.sleep(5)
if __name__ == "__main__":
liteCoin()
問題は、ETHの値が$
の内側にspan tag
記号を持っていることでしょうか?そして、そのようにして、プログラムは文字列をどう処理するかわかりませんか?
まず、サンプルプログラムを簡略化しましょう。
>>> int('196.01')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '196.01'
文字列'196.01'
を整数に変換することはできません。
これを試して:
>>> int(float('196.01'))
196
単純なものから複雑なものに戻ると、これを行うことができます:
#UNTESTED
price_now = int(float(soup.find("div", {"class": "col-xs-6 col-sm-8 col-md-4 text-left"}).find(
"span", {"class": "text-large2"}).getText()))
Pythonで型を理解する必要があります。intではなくfloatを取得し、floatを文字列にキャストして印刷する必要があります。したがって、2つの変更が必要です。
price_now = float(soup.find("div", {"class": "col-xs-6 col-sm-8 col-md-4 text-left"}).find("span", {"class": "text-large2"}).getText())
print(u"LTC price is: {}".format(str(price_now)))
出力:
LTC price is: 195.44
LTC price is: 195.44