簡體   English   中英

使用python和urllib從Yahoo FInance獲取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM