2017-01-27 85 views
0

任何人都可以帮助我解释为什么我不能在这里工作?Python BeautifulSoup如何提取/找到

我不太明白BeautifulSoup的文档。

req = Request('http://performance.morningstar.com/stock/performance-return.action?p=dividend_split_page&t=D05, headers={'User-Agent': 'Mozilla/5.0'}) 
webpage = urlopen(req).read() 

soup = bs4.BeautifulSoup(webpage, 'lxml') 

div = soup.find('div', {'id': 'div_annual_dividends'}) 

th = div.find('th', text="Dividend Amount") 

㈡着似乎使用nextSibling.text

这是我收到的错误来提取值0.56

AttributeError: 'NoneType' object has no attribute 'nextSibling' 

如何将输出存储到数组?

for tr in soup('th', text="Dividend Amount"): 
row = [td.text for td in tr('td')] 
print(row) 

这是正确的?

回答

0

此页由JavaScript渲染,真实数据是在这个网址:

http://performance.morningstar.com/perform/Performance/stock/annual-dividends.action?&t=XSES:D05&region=sgp&culture=en-US&cur=&ops=clear&ndec=2&y=5 

enter image description here

你可以找到的网址,Chrome浏览器开发工具。

代码:

import requests, bs4 

r = requests.get('http://performance.morningstar.com/perform/Performance/stock/annual-dividends.action?&t=XSES:D05&region=sgp&culture=en-US&cur=&ops=clear&ndec=2&y=5') 
soup = bs4.BeautifulSoup(r.text, 'lxml') 
rows = [] 
for tr in soup('tr', class_=False): 
    row = [td.text for td in tr('td')] 
    rows.append(row) 

出来:

[['0.56', '0.56', '0.58', '0.60', '0.60'], 
['3.77', '3.27', '2.82', '3.59', '3.46']] 
+0

AttributeError的: 'NavigableString' 对象有没有属性 '文本' 如果我做打印nextSibling.text –

+0

你能包括评论和更新代码,这样我可以将它们存储到一个数组? 我明白tr为汤('tr',class_ = False):将抓取“Dividend Amount”的html。 但我如何将td存储到数组? 谢谢。 –

+0

@OOI YI YONG在问题中发布你想要的结果。 –