如何使 yfinance 通过 HTTP(S) 或ocks5 代理工作?

it_*_*ure 6 proxy python-3.x yfinance

Yahoo网站可以通过浏览器中的2081端口打开(在Firefox中为HTTP和HTTPS设置代理端口2081)。端口 2081 提供 HTTP(S) 代理。

2080端口提供SOCKS5代理服务:

url="https://query1.finance.yahoo.com/v7/finance/download/MSFT"
curl --socks5-hostname 127.0.0.1:2080 $url -o msft.txt
Run Code Online (Sandbox Code Playgroud)

我现在可以下载 Yahoo 数据,并希望通过此代理使用yfinance库。

尝试方法1:

import yfinance as yf
msft = yf.Ticker("MSFT")
msft.history(proxy="http://127.0.0.1:2081")
msft.history(proxy="https://127.0.0.1:2081")
msft.history(proxy="socks5://127.0.0.1:2080")
Run Code Online (Sandbox Code Playgroud)

它们都不起作用!它们具有相同的输出:

MSFT: No price data found, symbol may be delisted (period=1mo)
Empty DataFrame
Columns: [Open, High, Low, Close, Adj Close, Volume]
Index: []
Run Code Online (Sandbox Code Playgroud)

尝试方法2:

MSFT: No price data found, symbol may be delisted (period=1mo)
Empty DataFrame
Columns: [Open, High, Low, Close, Adj Close, Volume]
Index: []
Run Code Online (Sandbox Code Playgroud)

输出:

cd ~
export all_proxy=socks5://127.0.0.1:2080
python3
Run Code Online (Sandbox Code Playgroud)

然后

Python 3.9.2 (default, Feb 28 2021, 17:03:44)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
Run Code Online (Sandbox Code Playgroud)

输出:

import yfinance as yf

msft = yf.Ticker("MSFT")
msft.history()
Run Code Online (Sandbox Code Playgroud)

同样的问题对于export https_proxy=http://127.0.0.1:2081.

尝试方法3:

Failed to get ticker 'MSFT' reason: SOCKSHTTPSConnectionPool(host='query2.finance.yahoo.com', port=443): Read timed out. (read timeout=10)
MSFT: No price data found, symbol may be delisted (period=1mo)
Empty DataFrame
Columns: [Open, High, Low, Close, Adj Close, Volume]
Index: []
Run Code Online (Sandbox Code Playgroud)

错误信息:

#pip install Pysocks first
import socket
import socks
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 2080)
socket.socket = socks.socksocket
import yfinance as yf
msft = yf.Ticker("MSFT")
msft.history()
Run Code Online (Sandbox Code Playgroud)

那我该如何解决呢?

已经更新:

在此输入图像描述

通过代理请求:

在此输入图像描述

yfinance 通过代理:

在此输入图像描述

雅虎不再提供任何服务。

在此输入图像描述

Bash 命令和 Python 的最新尝试:

在此输入图像描述

port 2080 for socks5 proxy比 更稳定2081(https proxy)

在此输入图像描述

https最后用proxy取数据,但每次都取不到数据。

ana*_*chy 1

我没有\xe2\x80\x99t有代理服务器,但是你可以尝试一下,看看是否可以访问该网站吗?

\n
import requests\n\nproxies = {\n    'http': 'http://127.0.0.1:2081',\n    'https': 'https://127.0.0.1:2081',\n}\n\nresponse = requests.get("https://query1.finance.yahoo.com/v7/finance/download/MSFT", proxies=proxies)\n\nprint(response.text)\n
Run Code Online (Sandbox Code Playgroud)\n

另请尝试以下操作。确保您拥有最新版本的 yfinance(pip install yfinance --upgrade --no-cache-dir在命令行中使用),然后运行它。

\n
import yfinance as yf\n\nmsft = yf.Ticker("MSFT")\n\nmsft.history(period="1mo", proxy="https://127.0.0.1:2081")\n
Run Code Online (Sandbox Code Playgroud)\n

或者,您也可以尝试:

\n
df = yf.download("MSFT", period="max", proxy="https://127.0.0.1:2081")\n
Run Code Online (Sandbox Code Playgroud)\n

如果有错误,请告诉我。

\n

也请尝试以下操作,看看您的代理是否可以访问。使用您的代理地址和端口。

\n
import requests\n\nproxies = {\n   "http": "http://USERNAME:PASSWORD@pr.oxylabs.io:7777",\n   "https": "http://USERNAME:PASSWORD@pr.oxylabs.io:7777"\n}\n\nresponse=requests.get("http://httpbin.org/ip", proxies=proxies)\n\nprint("Response Status Code", response.status_code)\n\nprint("Response data in Content format:\\n", response.content)\n
Run Code Online (Sandbox Code Playgroud)\n

还可以尝试在没有代理的情况下使用正常的 yfinance 方法,并显示输出。

\n

尝试这个方法并让我知道会发生什么。

\n
import requests\nimport yfinance as yf\n\nproxies = {\n    'http': 'socks5://127.0.0.1:2080',\n    'https': 'socks5://127.0.0.1:2080'\n}\n\nsession = requests.Session()\nsession.proxies = proxies\nyf.pdr_override(session)\n\ndata = yf.download('MSFT', start='2023-01-01', end='2024-01-01')\n\nprint(data.head())\n
Run Code Online (Sandbox Code Playgroud)\n

更新:\n似乎 yfinance 没有\xe2\x80\x99t 对socks5 代理提供适当的支持。

\n

我建议您尝试通过socks5重定向计算机中的所有流量,然后像这样正常运行您的代码。

\n
\nimport os\n\nproxy = 'http://<user>:<pass>@<proxy>:<port>'\n\nos.environ['http_proxy'] = proxy \nos.environ['HTTP_PROXY'] = proxy\nos.environ['https_proxy'] = proxy\nos.environ['HTTPS_PROXY'] = proxy\n\nimport yfinance as yf\n\nmsft = yf.Ticker("MSFT")\n\nmsft.history(period="1mo")\n\n
Run Code Online (Sandbox Code Playgroud)\n