[英]Using python and urllib to get data from Yahoo FInance
我在python中使用urllib從雅虎財務中獲取股票價格。 到目前為止,這是我的代碼:
import urllib
import re
name = raw_input(">")
htmlfile = urllib.urlopen("http://finance.yahoo.com/q?s=%s" % name)
htmltext = htmlfile.read()
# The problemed area
regex = '<span id="yfs_l84_%s">(.+?)</span>' % name
pattern = re.compile(regex)
price = re.findall(pattern, htmltext)
print price
所以我輸入一個值,股票價格就出來了。 但到目前為止,我可以讓它顯示價格,只是一個空白[]。 我已經評論了我認為問題所在。 有什么建議? 謝謝。
你沒有在你的正則表達式中逃脫正斜杠。 改變你的正則表達式:
<span id="yfs_l84_%s">(.+?)</span>
至
<span id="yfs_l84_goog">(.+?)<\/span>
假設您輸入公司的列表代碼作為代碼的輸入,這將解決您的問題。 防爆; google for google。
也就是說,正則表達式對於你想要做的事情來說是一個糟糕的選擇。 正如其他人所建議的那樣,探索BeautifulSoup ,這是一個用於從HTML中提取數據的Python庫。 使用BeautifulSoup,您的代碼可以像下面這樣簡單:
from bs4 import BeautifulSoup
import requests
name = raw_input('>')
url = 'http://finance.yahoo.com/q?s={}'.format(name)
r = requests.get(url)
soup = BeautifulSoup(r.text)
data = soup.find('span', attrs={'id':'yfs_l84_'.format(name)})
print data.text
你有什么理由不能使用熊貓嗎? 它對財務數據抓取和時間序列分析有很好的支持。
http://pandas.pydata.org/pandas-docs/stable/remote_data.html
以下是來自文檔的雅虎示例:
In [1]: import pandas.io.data as web
In [2]: import datetime
In [3]: start = datetime.datetime(2010, 1, 1)
In [4]: end = datetime.datetime(2013, 01, 27)
In [5]: f=web.DataReader("F", 'yahoo', start, end)
In [6]: f.ix['2010-01-04']
Out[6]:
OnOpen 10.17
High 10.28
Low 10.05
Close 10.28
Volume 60855800.00
Adj Close 9.75
Name: 2010-01-04 00:00:00, dtype: float64
本指南將向您展示如何構建將返回csvs的Yahoo財務查詢。 然后,您可以使用csv
庫輕松解析它們。
如果您真的想嘗試黑客攻擊HTML,請使用BeautifulSoup 。 使用正則表達式無法輕松解析HTML。
使用python2或python3從Yahoo Finance獲取數據的最佳方法是使用POST方法。
您可以使用像Postman這樣的Rest服務輕松測試
打開郵遞員並使用方法POST並使用此然后您將看到數據。 只需在python中重新創建它
import requests
url="https://query1.finance.yahoo.com/v7/finance/download/GOOG? period1=1519938930&period2=1522354530&interval=1d&events=history&crumb=.tLvYBkGDu3"
response = requests.post(url)
print response.text
我曾經使用urllib2獲取數據,但它現在給出了授權錯誤他們可能通過GET和POST之類的Rest方法過濾所有內容
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.