私は、PythonでBeautifulSoupを使って様々な株のYahoo financeの株価テーブルを解析しようとしています。Yahoo financeの株価を掻き集める
import requests
import pandas as pd
import urllib
from bs4 import BeautifulSoup
tickers = ['HSBA.L', 'RDSA.L', 'RIO.L', 'BP.L', 'GSK.L', 'DGE.L', 'AZN.L', 'VOD.L', 'GLEN.L', 'ULVR.L']
url = 'https://uk.finance.yahoo.com/quote/HSBA.L/history?period1=1478647619&period2=1510183619&interval=1d&filter=history&frequency=1d'
request = requests.get(url)
soup = BeautifulSoup(request.text, 'lxml')
table = soup.find_all('table')[0]
n_rows = 0
n_columns = 0
column_name = []
for row in table.find_all('tr'):
data = row.find_all('td')
if len(data) > 0:
n_rows += 1
if n_columns == 0:
n_columns = len(data)
headers = row.find_all('th')
if len(headers) > 0 and len(column_name) == 0:
for header_names in headers:
column_name.append(header_names.get_text())
new_table = pd.DataFrame(columns = column_name, index = range(0,n_rows))
row_index = 0
for row in table.find_all('tr'):
column_index = 0
columns = row.find_all('td')
for column in columns:
new_table.iat[row_index, column_index] = column.get_text()
column_index += 1
if len(columns) > 0:
row_index += 1
私は、コードを実行した最初の時間、私は間隔が11月から丁度2年に設定していた2015(毎週価格)7:ここでは、コードです。問題は、結果のデータフレームが101行の長さですが、私はそれがもっと多くなるはずです(106)ことを知っています。それから私はページを開くとき(毎日ですが)、実際のデータがはるかに大きいのに対し、同じ101行が残っているので、間隔を完全にデフォルトのものに変更しようとしました。コードに何か問題はありますか、それともYahooの財務がやっていることですか?
何か助けていただければ幸いです。
私もいくつかの履歴データを収集してきたが、データは通常、APIが提供するものに限られています。 2015年以降に発生した1分ごとのデータを取得することはできません。私は検証していませんが、それは私が期待するものです。 – Xorifelse
しかし、実際には週ごとの株価を手動でダウンロードして、毎週101回以上の観測を得ることができます。私はちょうどそれがデータを制限しているAPIか、何かコードに間違いがないかどうかを確認したい。 – hhkk
この目的のために構築されたライブラリを使用することができます:https://pandas-datareader.readthedocs.io/en/latest/remote_data.html#yahoo-finance –