Skip to content

[Bug]: Lỗi "Failed to fetch data: 403 - Forbidden" khi sử dụng trên Kaggle hoặc Google Colab #186

@huynambka

Description

@huynambka

Mô tả lỗi

Đôi khi sử dụng thư viện trên Kaggle hoặc Google Colab gặp lỗi "Failed to fetch data: 403 - Forbidden" khi thực hiện tải dữ liệu giá.

Image

Cách tái hiện lại lỗi để xử lý

from vnstock import Vnstock
import pandas as pd
import numpy as np

# forecast_horizon = 7

symbols = ['ACB', 'TCB', 'MBB', 'BID', 'VPB']
stocks = []
for symbol in symbols:
    stock = Vnstock().stock(symbol=symbol, source='VCI')
    stocks.append(stock)

dfs = []
for i, stock in enumerate(stocks):
    df = stock.quote.history(start='2000-01-01', end=None)
    df.set_index('time')
    print("Downloaded data of ticker:", symbols[i])
    dfs.append(df)

Thông báo lỗi hoặc logs

---------------------------------------------------------------------------
ConnectionError                           Traceback (most recent call last)
/tmp/ipykernel_35/774101317.py in <cell line: 0>()
      8 stocks = []
      9 for symbol in symbols:
---> 10     stock = Vnstock().stock(symbol=symbol, source='VCI')
     11     stocks.append(stock)
     12 

/usr/local/lib/python3.11/dist-packages/vnstock/common/vnstock.py in stock(self, symbol, source)
     47             self.symbol = symbol
     48 
---> 49         return StockComponents(self.symbol, source, show_log=self.show_log)
     50 
     51     def fx(self, symbol: Optional[str]='EURUSD', source: Optional[str] = "MSN"):

/usr/local/lib/python3.11/dist-packages/vnstock/common/data/data_explorer.py in __init__(self, symbol, source, show_log)
     52         if not show_log:
     53             logger.setLevel(logging.CRITICAL)
---> 54         self._initialize_components()
     55 
     56     def _initialize_components(self):

/usr/local/lib/python3.11/dist-packages/vnstock/common/data/data_explorer.py in _initialize_components(self)
     56     def _initialize_components(self):
     57         if self.asset_type == "stock":
---> 58             self.company = Company(self.symbol, source=self.source)
     59             self.finance = Finance(self.symbol, source=self.source)
     60         else:

/usr/local/lib/python3.11/dist-packages/vnstock/common/data/data_explorer.py in __init__(self, symbol, source)
    197 
    198     def __init__(self, symbol: Optional[str] = 'ACB', source: str = "TCBS"):
--> 199         super().__init__(symbol, source)
    200 
    201     def _load_data_source(self):

/usr/local/lib/python3.11/dist-packages/vnstock/common/data/data_explorer.py in __init__(self, symbol, source)
     34         self._validate_source()
     35         self.source_module = f"vnstock.explorer.{self.source.lower()}"
---> 36         self.data_source = self._load_data_source()
     37 
     38     def _validate_source(self) -> None:

/usr/local/lib/python3.11/dist-packages/vnstock/common/data/data_explorer.py in _load_data_source(self)
    201     def _load_data_source(self):
    202         module = importlib.import_module(self.source_module)
--> 203         return module.Company(self.symbol)
    204 
    205     def _update_data_source(self, symbol: Optional[str] = None):

/usr/local/lib/python3.11/dist-packages/vnstock/explorer/vci/company.py in __init__(self, symbol, random_agent, to_df, show_log)
     43         self.show_log = show_log
     44         self.to_df = to_df
---> 45         self.raw_data = self._fetch_data()
     46 
     47         if not show_log:

/usr/local/lib/python3.11/dist-packages/vnstock/explorer/vci/company.py in _fetch_data(self)
     67 
     68         # Use centralized API client instead of direct requests
---> 69         response_data = client.send_request(
     70             url=url,
     71             headers=self.headers,

/usr/local/lib/python3.11/dist-packages/vnstock/core/utils/client.py in send_request(url, headers, method, params, payload, show_log, timeout)
     68         # Check if the response status code is 200 (OK)
     69         if response.status_code != 200:
---> 70             raise ConnectionError(
     71                 f"Failed to fetch data: {response.status_code} - {response.reason}"
     72             )

ConnectionError: Failed to fetch data: 403 - Forbidden

Mong muốn đạt được

No response

Ảnh chụp màn hình

Image

Môi trường

Google Colab

Hệ điều hành

Linux

Phiên bản

3.2.6

Phiên bản Python

3.11

Môi trường ảo

Không

Xác nhận

  • Tôi đã kiểm tra thông tin và xác nhận lỗi này chưa được báo cáo trước đây

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions