迭代,Nonetype转换为String

时间:2016-04-13 11:06:00

标签: python beautifulsoup python-3.4

我正在从“http://profit.ndtv.com/stock/hindustan-unilever-ltd_hindunilvr/financials-historical

中搜集财务数据

代码:

import requests
from bs4 import BeautifulSoup
import re

url = "http://profit.ndtv.com/stock/hindustan-unilever-ltd_hindunilvr/financials-historical"


page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
table = soup.find("table", {"id": "finsummaryTab"})
tr = table.findAll("tr")


def periodEnding(index):
    td = BeautifulSoup(str(tr[2]), 'html.parser')
    td_list = td.find_all("td")
    return td_list[index].getText()

b = print(periodEnding(1))
a = str(b)
print(type(a))
for i in a:
    print(i)

输出:

216.35

<class 'str'>
N
o
n
e

我不知道为什么会发生这种情况,任何人都可以帮助我。 thannkyou 我想迭代这个数字

1 个答案:

答案 0 :(得分:3)

您使用的是print()的返回值:

b = print(periodEnding(1))

print() 始终会返回None。然后,您尝试打印字符串"None"的每个字符(由a = str(b)生成),因此您确实得到了字母None已打印。

存储periodEnding()的返回值:

b = periodEnding(1)
print(b)

您还在不必要地重新解析tr[2]对象:

td = BeautifulSoup(str(tr[2]), 'html.parser')
td_list = td.find_all("td")

这样做有没有意义tr[2]Tag对象,直接支持find_all

def periodEnding(index):
    td_list = tr[2].find_all("td")
    return td_list[index].getText()

这为您提供了完全相同的结果,而无需将整个子树转换为字符串,然后再将其转换回几乎相同的BeautifulSoup对象树。