股票报价的正则表达式
我正在尝试从谷歌财经抓取数据,特别是股票报价。我使用了这里的一个答案:如何用Python创建一个股票报价获取应用,这个方法运行得很好,但只适用于谷歌。我对正则表达式还不太熟悉,注意到需要更改的地方,但不太确定该怎么做。
下面的代码可以用来解析谷歌报价的数据,以获取当前价格。
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"
任何帮助都会非常感谢!
3 个回答
0
match = re.search('<span (id="ref_\d*_l">\d*\.?\d*)</span>', content)
print match.group(1)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
0
就这样做,按照正确的方法:
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,轻松搞定的话,其实用正则表达式并不是最好的选择。
2
从其他网站抓取HTML内容通常不是最好的解决办法。API(应用程序接口)是为了特定目的而设计的。如果你想要机器可读的金融数据,可以看看这个链接:https://stackoverflow.com/a/10040996/254973。
如果你还是想抓取HTML,建议使用像@minitech提到的那种库。千万不要用正则表达式来解析HTML。想了解更多,可以看看这个链接:这里。