python - ValueError:以 10 为底的 int() 无效文字: '196.41'

标签 python web-scraping beautifulsoup data-science valueerror

我不明白为什么它适用于不同的场景,但不适用于这个场景。 基本上,一些绅士帮助了我HERE通过改进我的代码来抓取天气,效果很好。然后我尝试做同样的事情来抓取跨度标签 <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 的值(value)有一个 $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 - ValueError:以 10 为底的 int() 无效文字: '196.41',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47762060/

相关文章:

python - 扭曲的 websockets 导入错误

javascript - 导入的函数在 puppeteer 中不起作用

python - BeautifulSoup- find_all- 订单保存

Python BeautifulSoup : 'list_iterator' object is not subscriptable

python - 函数内部多处理 scipy 优化的奇怪行为

python - 在执行 pandas.DataFrame.groupby().sum() 时保留非数字列

python - 使用selenium(python)抓取网页

python - 如何在Python和beautifulsoup中从CDATA中提取数据?

python - sys.stdout 在 bpython 中没有刷新属性

python - 使用 BeautifulSoup 在 python 中抓取多个页面