In [1]:
# https://pandas.pydata.org/pandas-docs/stable/io.html#io-read-html
# https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_html.html
# pip install lxml html5lib beautifulsoup4

In [2]:
import pandas as pd

In [3]:
url = 'https://info.finance.yahoo.co.jp/ranking/?kd=4'
dfs = pd.read_html(url)

In [4]:
print(len(dfs))


1

In [5]:
print(dfs[0].head())


  順位   コード    市場                    名称    取引値 発行済み株式数    時価総額(百万円)      単元株数  \
0  1  7203  東証1部             トヨタ自動車(株)  09/15    6480   3262997492  21144224   
1  2  9432  東証1部             日本電信電話(株)  09/15    5127   2096394470  10748214   
2  3  9437  東証1部             (株)NTTドコモ  09/15  2539.5   3899563000   9902940   
3  4  8306  東証1部  (株)三菱UFJフィナンシャル・グループ  09/15   681.6  14027694920   9561277   
4  5  9984  東証1部         ソフトバンクグループ(株)  09/15    8587   1100660365   9451371   

   掲示板 Unnamed: 9  
0  100        掲示板  
1  100        掲示板  
2  100        掲示板  
3  100        掲示板  
4  100        掲示板  

In [6]:
print(dfs[0][['名称', '時価総額(百万円)']].head())


                     名称    時価総額(百万円)
0             トヨタ自動車(株)   3262997492
1             日本電信電話(株)   2096394470
2             (株)NTTドコモ   3899563000
3  (株)三菱UFJフィナンシャル・グループ  14027694920
4         ソフトバンクグループ(株)   1100660365

In [7]:
dfs[0].columns = ['順位', 'コード', '市場', '名称', '時刻', '取引値', '発行済み株式数', '時価総額(百万円)', '単元株数', '掲示板']

In [8]:
print(dfs[0][['名称', '時価総額(百万円)']].head())


                     名称 時価総額(百万円)
0             トヨタ自動車(株)  21144224
1             日本電信電話(株)  10748214
2             (株)NTTドコモ   9902940
3  (株)三菱UFJフィナンシャル・グループ   9561277
4         ソフトバンクグループ(株)   9451371

In [9]:
url = 'https://ja.wikipedia.org/wiki/Python'
dfs = pd.read_html(url)

In [10]:
print(len(dfs))


15

In [11]:
dfs = pd.read_html(url, match='リリース日')

In [12]:
print(len(dfs))


2

In [13]:
print(dfs[0])


       0            1
0  バージョン    リリース日[17]
1    2.0  2000年10月16日
2    2.1   2001年4月15日
3    2.2  2001年12月21日
4    2.3   2003年7月29日
5    2.4  2004年11月30日
6    2.5   2006年9月19日
7    2.6   2008年10月1日
8    2.7    2010年7月4日

In [14]:
print(dfs[1])


       0            1
0  バージョン    リリース日[17]
1    3.0   2008年12月3日
2    3.1   2009年6月27日
3    3.2   2011年2月20日
4    3.3   2012年9月29日
5    3.4   2014年3月16日
6    3.5   2015年9月13日
7    3.6  2016年12月23日

In [15]:
dfs = pd.read_html(url, match='リリース日', header=0)

In [16]:
print(len(dfs))


2

In [17]:
print(dfs[0])


   バージョン    リリース日[17]
0    2.0  2000年10月16日
1    2.1   2001年4月15日
2    2.2  2001年12月21日
3    2.3   2003年7月29日
4    2.4  2004年11月30日
5    2.5   2006年9月19日
6    2.6   2008年10月1日
7    2.7    2010年7月4日

In [18]:
print(dfs[1])


   バージョン    リリース日[17]
0    3.0   2008年12月3日
1    3.1   2009年6月27日
2    3.2   2011年2月20日
3    3.3   2012年9月29日
4    3.4   2014年3月16日
5    3.5   2015年9月13日
6    3.6  2016年12月23日

In [19]:
df = pd.concat([dfs[0], dfs[1]], ignore_index=True).sort_values('リリース日[17]')
print(df)


    バージョン    リリース日[17]
0     2.0  2000年10月16日
2     2.2  2001年12月21日
1     2.1   2001年4月15日
3     2.3   2003年7月29日
4     2.4  2004年11月30日
5     2.5   2006年9月19日
6     2.6   2008年10月1日
8     3.0   2008年12月3日
9     3.1   2009年6月27日
7     2.7    2010年7月4日
10    3.2   2011年2月20日
11    3.3   2012年9月29日
12    3.4   2014年3月16日
13    3.5   2015年9月13日
14    3.6  2016年12月23日

In [20]:
df.to_csv('data/dst/pandas_read_html_sample.csv')