我试图将我在课程讲师告诉我的所有内容中输入的股票数据带入,但它不起作用。看来我的软件有问题。我问过chatgpt,他们说要更新pandas data reader。
这是我尝试过的
import pandas as pd
import pandas_datareader.data as pdr
stock='SPY'
source='yahoo'
startdate='2022-01-01'
enddate='2022-01-31'
stocks_df = pdr.DataReader(stock,source,startdate,enddate)
print(stocks_df)
这就是我得到的
TypeError Traceback (most recent call last)
Cell In[23], line 8
5 startdate='2022-01-01'
6 enddate='2022-01-31'
----> 8 stocks_df = pdr.DataReader(stock,source,startdate,enddate)
10 print(stocks_df)
File ~/anaconda3/lib/python3.11/site-packages/pandas/util/_decorators.py:210, in deprecate_kwarg.<locals>._deprecate_kwarg.<locals>.wrapper(*args, **kwargs)
208 raise TypeError(msg)
209 kwargs[new_arg_name] = new_arg_value
--> 210 return func(*args, **kwargs)
File ~/anaconda3/lib/python3.11/site-packages/pandas_datareader/data.py:379, in DataReader(name, data_source, start, end, retry_count, pause, session, api_key)
367 raise NotImplementedError(msg)
369 if data_source == "yahoo":
370 return YahooDailyReader(
371 symbols=name,
372 start=start,
373 end=end,
374 adjust_price=False,
375 chunksize=25,
376 retry_count=retry_count,
377 pause=pause,
378 session=session,
--> 379 ).read()
381 elif data_source == "iex":
382 return IEXDailyReader(
383 symbols=name,
384 start=start,
(...)
390 session=session,
391 ).read()
File ~/anaconda3/lib/python3.11/site-packages/pandas_datareader/base.py:253, in _DailyBaseReader.read(self)
251 # If a single symbol, (e.g., 'GOOG')
252 if isinstance(self.symbols, (string_types, int)):
--> 253 df = self._read_one_data(self.url, params=self._get_params(self.symbols))
254 # Or multiple symbols, (e.g., ['GOOG', 'AAPL', 'MSFT'])
255 elif isinstance(self.symbols, DataFrame):
File ~/anaconda3/lib/python3.11/site-packages/pandas_datareader/yahoo/daily.py:153, in YahooDailyReader._read_one_data(self, url, params)
151 try:
152 j = json.loads(re.search(ptrn, resp.text, re.DOTALL).group(1))
--> 153 data = j["context"]["dispatcher"]["stores"]["HistoricalPriceStore"]
154 except KeyError:
155 msg = "No data fetched for symbol {} using {}"
TypeError: string indices must be integers, not 'str'
如果您在使用
pandas_datareader
获取股票数据时遇到问题,请尝试使用 BeautifulSoup 进行网页抓取。然后将抓取的数据存储在 CSV 文件中。确保创建一个名为“Data”的文件夹并添加一个名为“Stocks.csv”的文件。阅读这些详细说明后,请查看响应末尾提供的示例代码。
网页抓取:首先,确定一个显示您需要的股票信息的网站,我推荐雅虎财经,因为它很容易抓取。使用Python的
from urllib.request import Request, urlopen
库来获取页面内容。然后,使用“from bs4 import BeautifulSoup”解析 HTML 并提取所需的数据,例如股票价格、日期等。BeautifulSoup 允许您导航和搜索网页的结构,使您更容易找到所需的数据需要。
将数据存储在 CSV 文件中:抓取数据后,您可以使用列表或字典在 Python 中组织数据。然后,使用 Python 的
csv
模块将此数据写入 CSV 文件。这涉及创建一个 csv.writer
对象并使用 writerow()
或 writerows()
等方法来写入数据。确保创建一个名为“Data”的文件夹并添加一个名为“Stocks.csv”的文件。
代码结构:您的 Python 脚本通常首先导入必要的库(
requests
、BeautifulSoup
和 csv
)。然后,它将具有用于获取和解析网页的不同功能,然后是提取所需数据的代码,最后是将此数据写入 CSV 文件的部分。
这是有关如何执行此操作的示例代码。此代码是从雅虎财经抓取趋势行情,点击下面的链接查看图片: