1

我正在使用 Python 的 HTMLParser 和 BeautifulSoup 来解析 Yahoo 财务数据。已经有一个非常好的包可以做到这一点,但它没有得到“有形价格/账面价值”,也就是说它在计算账面价值时包括商誉和其他无形资产。因此,我被迫推出自己的解决方案。

它一直不漂亮。这是代码

from BeautifulSoup import BeautifulSoup
import urllib2
from HTMLParser import HTMLParse

class data(HTMLParser):
    def handle_data(self, data):
        print data
parser = data()

url='http://finance.yahoo.com/q/bs?s=BAC&annual'
response = urllib2.urlopen(url)
html = response.read()
soup=BeautifulSoup(html)
tangibles=[str(parser.feed(str(soup('strong')[24:26])))]

这有两个问题:1)我依赖数据总是在雅虎页面上的同一个地方,这不是最大的问题,但并不让我高兴,2)真正的问题;

 tangibles=[str(parser.feed(str(soup('strong')[24:26])))]

是一个空列表,因为“数据”类只是打印我想要的东西而不是存储它。

如果您为我回答第 2 部分),我会很高兴。我还不懂课。

4

1 回答 1

2

摆脱数据和解析器并支持导入然后执行此操作。

tangibles = [''.join(node(text=True)).strip() for node in soup('strong')[24:26]]

我基本上将其更改为使用一些 python 列表理解。如果您不知道 Python 中的列表理解是什么,请在此处阅读更多信息

本质上它做了这些事情:

  1. 告诉汤找到标记为强的元素并为每个实例命名node for node in soup.findAll('strong')[24:26]
  2. node它中,它完全找到并删除强标签node.findAll(text=True) Beautiful soup docs about text=True
  3. 连接元素中的元素,node所以它的 1 个元素而不是长度为 1 个元素的列表''.join()(python 技巧)

    ['Net Stuff', '152,113,000'][['Net Stuff'], ['152,113,000']]

  4. 删除多余的空格(尾随和前导).strip()

于 2012-08-05T06:58:23.123 回答