本記事では、html解析により、web上のデータを抜き出し、csvへ書き出す雛形コードを載せました。下図は、日経HPの株の売買ランキングを抽出した場合の例です。証券コードと銘柄名を抽出してcsvへ出力します。

ライブラリのインストールは次の通りです。
pip install beautifulsoup4
■日経HPの売買高ランキングのhtml解析の場合の例('22/02/26時点)
import requests
from bs4 import BeautifulSoup
import pandas as pd
import datetime
now = datetime.datetime.now()
now = now.strftime("%y%m%d")
save_file_name = '売買高ランキング'
load_url_list = [
'https://www.nikkei.com/markets/ranking/page/?bd=vol&ba=11&Gcode=&excflag=1&hm=1',
'https://www.nikkei.com/markets/ranking/page/?bd=vol&ba=11&Gcode=&excflag=1&hm=2',
]
ticker_symbol_list = []
stock_name_list = []
for load_url in load_url_list:
print(load_url)
html = requests.get(load_url)
soup = BeautifulSoup(html.content, "html.parser")
for i, element in enumerate(soup.find_all(class_="left"), start=1):
my_str = element.a.get('href')
my_stock_name = element.text
print(i, my_str, my_stock_name)
my_left_index = my_str.find('=')
my_right_index = my_str.rfind('&')
my_ticker_symbol = my_str[my_left_index + 1: my_right_index]
ticker_symbol_list.append(my_ticker_symbol)
stock_name_list.append(my_stock_name)
stock_dict = dict(zip(ticker_symbol_list, stock_name_list))
print(stock_dict)
df = pd.DataFrame(list(stock_dict.items()),
columns = ['証券コード', '銘柄名'],
)
print(df)
df.to_csv(now + '_' + save_file_name + '.csv',
index = False,
encoding = 'utf_8_sig',
)
print('finished')
■日経HPの適時開示ランキングのhtml解析の場合の例('22/02/26時点)
上記の売買高ランキングとはhtmlの記述が微妙に異なることがわかった。そのため、抽出の方法も異なる。ここでは、if文やtry文を使用している。もちろんこの雛形コードは一例であり、さらに可読性が良い、あるいは効率的な書き方はありえます。
import requests
from bs4 import BeautifulSoup
import pandas as pd
import datetime
now = datetime.datetime.now()
now = now.strftime("%y%m%d")
save_file_name = '適時開示ランキング'
load_url_list = [
'https://www.nikkei.com/markets/ranking/page/?bd=disclose&hm=1',
'https://www.nikkei.com/markets/ranking/page/?bd=disclose&hm=2',
]
ticker_symbol_list = []
stock_name_list = []
j = 0
for load_url in load_url_list:
print(load_url)
html = requests.get(load_url)
soup = BeautifulSoup(html.content, "html.parser")
for i, element in enumerate(soup.find_all('a'), start=1):
my_str = element.get('href')
my_stock_symbol_or_name = element.text
if '/nkd/company/?scode=' in my_str:
try:
my_stock_symbol_or_name = int(my_stock_symbol_or_name)
except:
pass
if isinstance(my_stock_symbol_or_name, int):
ticker_symbol_list.append(my_stock_symbol_or_name)
else:
stock_name_list.append(my_stock_symbol_or_name)
j = j + 1
print(j, my_str, my_stock_symbol_or_name)
stock_dict = dict(zip(ticker_symbol_list, stock_name_list))
print(stock_dict)
df = pd.DataFrame(list(stock_dict.items()),
columns = ['証券コード', '銘柄名'],
)
print(df)
df.to_csv(now + '_' + save_file_name + '.csv',
index = False,
encoding = 'utf_8_sig',
)
print('finished')
以上
<広告>
リンク