【问题标题】:Regex for stock quote股票报价的正则表达式
【发布时间】:2013-03-11 01:57:38
【问题描述】:

我正在尝试从 Google 财经网络抓取数据,特别是股票报价。我正在使用此处找到的答案:How to create a stock quote fetching app in python,它工作正常,但仅适用于谷歌。我是正则表达式的新手,注意到需要更改的内容,但不知道该怎么做。

以下代码用于解析 google 报价的数据以获取当前价格。

m = re.search('id="ref_694653_l".*?>(.*?)<', content)

694653 是特定于谷歌的。如果我做Zynga,ZNGA,应该找:

<span id="ref_481720736332929_l">3.57</span>

我想要一个搜索的正则表达式

id="ref_SOME_NUMBER_l">SOME_PRICE"

任何帮助将不胜感激!

【问题讨论】:

  • 改用BeautifulSoup。使用 BeautifulSoup 从 HTML 中提取信息要比制作一个在每种情况下都可能有效也可能无效的复杂正则表达式要容易得多。

标签: python regex


【解决方案1】:

从另一个站点抓取 HTML 很少是最好的解决方案。构建 API 是有原因的。如果您需要机器可读的财务数据,请查看 https://stackoverflow.com/a/10040996/254973

如果您坚持要抓取 HTML,请使用提到的 @minitech 之类的库。您永远不应该尝试使用 Regex 解析 HTML。 read more here

【解决方案2】:

只要做对了:

import urllib2, re

from bs4 import BeautifulSoup

def get_quote(symbol):
    url = 'http://finance.google.com/finance?q=' + symbol
    soup = BeautifulSoup(urllib2.urlopen(url))

    return float(soup.find('span', id=re.compile(r'ref_\d+_l')).get_text())

如果您可以解析 HTML 并同样轻松地做到这一点,那么正则表达式并不是真正的答案。

【讨论】:

    【解决方案3】:
    match = re.search('<span (id="ref_\d*_l">\d*\.?\d*)</span>', content)
    print match.group(1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      相关资源
      最近更新 更多