网络刮刮谷歌财经

时间:2013-11-16 19:38:19

标签: python beautifulsoup screen-scraping

我正在努力教自己如何网上刮取股票数据。我是一个新手,所以请原谅我可能会问的任何愚蠢的问题。

这是我的价格刮削代码,我也试图削减市盈率。

import urllib.request
from bs4 import BeautifulSoup

start = 'http://www.google.com/finance?cid=694653'

page = urllib.request.urlopen(start)
soup = BeautifulSoup(page)


P = soup.find('span',{'id':'ref_694653_l'})

print(P.get_text())


pe = soup.find_all('td',{'class':'val'})

print(pe[5].get_text())

pe = soup.find('td',{'data-snapfield':'pe_ratio'})

print(pe.td.next_sibling.get_text())

我可以获得价格数据,但我设法获得了PE比率,但没有直接获得。我尝试使用next_sibling和next_element,但它给出了一个错误,说没有属性。

我无法弄清楚如何从表中抓取数据,因为它通常是按行设置的,并且数据周围的类通常很常见,如或。

所以我只想在刮取市盈率方面寻求帮助。

谢谢你们

YS

1 个答案:

答案 0 :(得分:0)

这会有所帮助:

>>> pe = soup.find('td',{'data-snapfield':'pe_ratio'})
>>> pe
<td class="key" data-snapfield="pe_ratio">P/E
</td>
>>> print(pe.td.next_sibling.get_text())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'next_sibling'
>>> 
>>> 
>>> 
>>> pe
<td class="key" data-snapfield="pe_ratio">P/E
</td>
>>> pe.td
>>> pe.next_sibling
u'\n'
>>> pe.next_sibling.next_sibling
<td class="val">29.69
</td>
>>> pe.next_sibling.next_sibling.get_text()
u'29.69\n'