如何将使用BeatifulSoup4获得的数据作为浮点数或整数分配给变量?

时间:2018-02-21 21:23:18

标签: python dictionary beautifulsoup python-3.6

我是Python的新手,对于这样一个noob问题感到抱歉,但我对以下代码有两个问题:

1)我试图从网站上抓取数据,但我在通过for循环以外的任何其他方式获取数据时遇到问题,因此我需要继续使用{{ 1}}以便能够在以下命令中将值赋给变量:

print

2)接下来我尝试将特定值(例如receivables2017 = receivables2017.string )分配给Receivables2017字典,但我无法以字典的形式获取字典中的值稍后需要aaplfloat来应用于公式。

非常感谢帮助,谢谢!

int

2 个答案:

答案 0 :(得分:2)

您不需要for循环来将值分配给变量:

for receivables2016 in soup.find_all('td')[40]:
    print(receivables2016.string)

可缩短为:

receivables2016 = soup.find_all('td')[40].string

如果你试图迭代汤的元素,它确实会产生一个对象,即使它只包含一个元素。这就是它如何设计工作。但它实际上是一个包含一些数据的元素,不一定是可迭代的(列表,元组等)。 你应该看看python的迭代器和生成器: https://anandology.com/python-practice-book/iterators.html#the-iteration-protocol

如果您不想要一段代码来执行任何操作,请使用pass

for i in range(10):
    pass # will iterate 10 times but won't don anything

或者,如果您定义了一个功能但尚未决定实施:

def my_funct():
    pass

如果调用my_funct,它将默认返回None,因为没有声明返回值。

我看到你想要在dict中拥有的值的小数点为,。如果它是一个字符串,您可以轻松地用点替换逗号并在之后将其转换为浮点数:

aapl = {'Cash & Cash Equivalents':
            {'2017': float(cash_and_equivalents2017.replace(",", ".")),
             '2016': float(cash_and_equivalents2016.replace(",", "."))},
        'Receivables':
            {'2017': float(receivables2017.replace(",", ".")),
             '2016': float(receivables2016.replace(",", "."))}
        }

使用python的内置int()函数,您可以将数字字符串转换为整数。请记住,即使是字符串格式,它们也必须是有效的整数。这不会起作用,会抛出ValueError

int(receivables2016.replace(",", "."))

在这种情况下,您必须将字符串转换为float并转换为整数:

int(float(receivables2016.replace(",", ".")))

答案 1 :(得分:0)

我不确定这是否是您正在寻找的,但是:

aapl = dict([('Cash & Cash Equivalents 2017', cash_and_equivalents2017),
         ('Cash & Cash Equivalents 2016', cash_and_equivalents2016),
         ('Receivables 2017', receivables2017),
         ('Receivables 2016', receivables2016)])

print(aapl)

让我回来:

{'Cash & Cash Equivalents 2016': '67,155', 'Receivables 2016': '29,299', 'Cash & Cash Equivalents 2017': '74,181', 'Receivables 2017': '35,673'}