efinance icon indicating copy to clipboard operation
efinance copied to clipboard

最近好像被东方财富针对了,下数据时频繁报类似的错

Open DavidRoboter opened this issue 7 months ago • 7 comments

alldate = ef.stock.get_quote_history('399001', beg=beg.replace('-',''), end=end.replace('-',''), fqt=2).iloc[:,2]
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "D:\miniconda3\Lib\site-packages\efinance\stock\getter.py", line 299, in get_quote_history df = get_quote_history_for_stock( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\miniconda3\Lib\site-packages\efinance\common\getter.py", line 288, in get_quote_history return get_quote_history_single( ^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\miniconda3\Lib\site-packages\efinance\utils_init_.py", line 48, in run values = func(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "D:\miniconda3\Lib\site-packages\efinance\common\getter.py", line 152, in get_quote_history_single json_response = session.get( ^^^^^^^^^^^^ File "D:\miniconda3\Lib\site-packages\requests\sessions.py", line 602, in get return self.request("GET", url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\miniconda3\Lib\site-packages\efinance\shared_init_.py", line 14, in request return super(CustomedSession, self).request(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\miniconda3\Lib\site-packages\requests\sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\miniconda3\Lib\site-packages\requests\sessions.py", line 703, in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\miniconda3\Lib\site-packages\requests\adapters.py", line 700, in send raise ConnectionError(e, request=request) requests.exceptions.ConnectionError: HTTPSConnectionPool(host='push2his.eastmoney.com', port=443): Max retries exceeded with url: /api/qt/stock/kline/get?fields1=f1%2Cf2%2Cf3%2Cf4%2Cf5%2Cf6%2Cf7%2Cf8%2Cf9%2Cf10%2Cf11%2Cf12%2Cf13&fields2=f51%2Cf52%2Cf53%2Cf54%2Cf55%2Cf56%2Cf57%2Cf58%2Cf59%2Cf60%2Cf61&beg=20230608&end=20250607&rtntype=6&secid=0.399001&klt=101&fqt=2 (Caused by ProtocolError('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))

DavidRoboter avatar Jun 07 '25 09:06 DavidRoboter

我也是这样的,第一次可以通,后面就连续失败。感觉不能频繁访问,

eastmoutain avatar Jun 08 '25 09:06 eastmoutain

我也是这样的,第一次可以通,后面就连续失败。感觉不能频繁访问,

现在服务端做限流了,稍微频繁访问一下会弹滑快验证码(网页可见)。

Micro-sheep avatar Jun 08 '25 10:06 Micro-sheep

我也是这样的,第一次可以通,后面就连续失败。感觉不能频繁访问,

现在服务端做限流了,稍微频繁访问一下会弹滑快验证码(网页可见)。 哥有解不 基本上调用到几百次就被封了

henry991217 avatar Jun 09 '25 05:06 henry991217

我也是这样的,第一次可以通,后面就连续失败。感觉不能频繁访问,

现在服务端做限流了,稍微频繁访问一下会弹滑快验证码(网页可见)。

分享一些我的观察:

  1. 每次都在相同的地方被中断,中间设置随机time.sleep后中断的地方也会前后变化,说明服务端统计了某预设时长内的总申请次数作为反爬阈值;
  2. 更换wifi至手机热点,问题依旧,说明不是针对IP,可能针对浏览器或物理机指纹。
  3. akshare的东财API同样悲剧,request可能够呛了

有没有可能将网页手动滑块验证和后台数据下载结合一下,中断了就滑动一下,通过了后台继续下载~

DavidRoboter avatar Jun 09 '25 13:06 DavidRoboter

@DavidRoboter @Micro-sheep 有什么替代方案吗?

eastmoutain avatar Jun 11 '25 02:06 eastmoutain

@DavidRoboter @Micro-sheep 有什么替代方案吗?

如果是获取A股k线数据,可以先切换到baostock

Micro-sheep avatar Jun 11 '25 02:06 Micro-sheep

如果每5分钟获取50只股票,是不会被封,频率太高的话就会有问题,可以用ef.stock.get_realtime_quotes收盘的时候获取一次,再进行增量保存日线,需要哪只的分钟线再单独获取。

mrwilson666 avatar Aug 02 '25 04:08 mrwilson666