我正在从“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 我想迭代这个数字
答案 0 :(得分:3)
您使用的是print()
的返回值:
b = print(periodEnding(1))
print()
始终会返回None
。然后,您尝试打印字符串"None"
的每个字符(由a = str(b)
生成),因此您确实得到了字母N
,o
,n
和e
已打印。
存储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对象树。