今回は番外編で、第1回から第7回までの総選挙の結果を同じフォーマットのCSVで保存していく。
第1回ではRequestsとbs4を使ってスクレイピングを行ったが、今回は数が多いのとそれぞれのページが微妙に細かく違うのでpandasのpandas.read_htmlメソッドを使って楽させていただいた。
今回は番外編ということで覚書としてコードだけです。
※5回、6回のインデックスの付け方に誤りがあったので修正しました。
#第1回
import pandas as pd
elections = []
# 第1回
URL='https://dic.pixiv.net/a/%E7%AC%AC1%E5%9B%9E%E3%82%B7%E3%83%B3%E3%83%87%E3%83%AC%E3%83%A9%E3%82%AC%E3%83%BC%E3%83%AB%E9%81%B8%E6%8A%9C%E7%B7%8F%E9%81%B8%E6%8C%99'
dfs = pd.read_html(URL,header=0)
df = dfs[0].rename(columns={'順位':'rank'})
df[['name','votes']] = df['名前'].str.split('(',expand=True)
df['votes'] = df['votes'].str.extract('(.+)票')
df['votes'] = df['votes'].str.replace(',','')
df['rank'] = df['rank'].str.replace('位','')
df.set_index('name',inplace=True)
df = df[['rank','votes']]
# df.to_csv('data/election1.csv')
elections.append(df)
#第2回
# 第2回
URL='https://dic.pixiv.net/a/%E7%AC%AC2%E5%9B%9E%E3%82%B7%E3%83%B3%E3%83%87%E3%83%AC%E3%83%A9%E3%82%AC%E3%83%BC%E3%83%AB%E9%81%B8%E6%8A%9C%E7%B7%8F%E9%81%B8%E6%8C%99'
dfs = pd.read_html(URL,header=0)
df = dfs[0].rename(columns={'順位':'rank'})
df[['name','votes']] = df['名前'].str.split('(',expand=True) #(は全角
df['votes'] = df['votes'].str.extract('(.+)票')
df['votes'] = df['votes'].str.replace(',','')
df['rank'] = df['rank'].str.replace('位','')
df.set_index('name',inplace=True)
df = df[['rank','votes']]
# df.to_csv('data/election2.csv')
elections.append(df)
#第3回
# 第3回 ここだけなぜか1回と同じフォーマットのようだ
URL='https://dic.pixiv.net/a/%E7%AC%AC3%E5%9B%9E%E3%82%B7%E3%83%B3%E3%83%87%E3%83%AC%E3%83%A9%E3%82%AC%E3%83%BC%E3%83%AB%E7%B7%8F%E9%81%B8%E6%8C%99'
dfs = pd.read_html(URL,header=0)
df = dfs[0].rename(columns={'順位':'rank'})
df[['name','votes']] = df['名前'].str.split('(',expand=True) #(は半角
df['votes'] = df['votes'].str.extract('(.+)票')
df['votes'] = df['votes'].str.replace(',','')
df['rank'] = df['rank'].str.replace('位','')
df.set_index('name',inplace=True)
df = df[['rank','votes']]
# df.to_csv('data/election3.csv')
elections.append(df)
#第4回
# 第4回 pixivに票情報がないのでniconicoから抽出
URL='https://dic.nicovideo.jp/a/%E7%AC%AC4%E5%9B%9E%E3%82%B7%E3%83%B3%E3%83%87%E3%83%AC%E3%83%A9%E3%82%AC%E3%83%BC%E3%83%AB%E7%B7%8F%E9%81%B8%E6%8C%99'
dfs = pd.read_html(URL)
df = dfs[9]
df = df.iloc[:,-3:]
df.columns=['rank','name','votes']
df.set_index('name',inplace=True)
df['votes'] = df['votes'].str.extract('(.+)票')
df['votes'] = df['votes'].str.replace(',','')
# df.to_csv('data/election4.csv')
elections.append(df)
#第5回
# 第5回
URL='https://dic.pixiv.net/a/%E7%AC%AC5%E5%9B%9E%E3%82%B7%E3%83%B3%E3%83%87%E3%83%AC%E3%83%A9%E3%82%AC%E3%83%BC%E3%83%AB%E7%B7%8F%E9%81%B8%E6%8C%99'
dfs = pd.read_html(URL,header=0)
col_names={'順位':'rank','得票数':'votes','名前':'name'}
df = dfs[0].rename(columns=col_names).set_index('name')
df['rank'] = df['rank'].str.replace('位','')
df = df[['rank','votes']]
# fifth_df.to_csv('data/election5.csv')
elections.append(df)
#第6回
# 第6回
URL='https://dic.pixiv.net/a/%E7%AC%AC6%E5%9B%9E%E3%82%B7%E3%83%B3%E3%83%87%E3%83%AC%E3%83%A9%E3%82%AC%E3%83%BC%E3%83%AB%E7%B7%8F%E9%81%B8%E6%8C%99'
dfs = pd.read_html(URL,header=0)
col_names = {'Unnamed: 0':'rank','得票数':'votes','名前':'name'}
df = dfs[0].rename(columns=col_names).set_index('name')
df['rank'] = df['rank'].str.replace('位','')
df = df[['rank','votes']]
# df.to_csv('data/election6.csv')
elections.append(df)
#第7回
# 第7回(第1回で作ったファイルを使用)
df = pd.read_csv('data/senkyo7.csv').rename(columns={'7th':'rank','votes':'votes'})
df = df.set_index('name')
df = df[['rank','votes']]
# seventh_df.to_csv('data/election7.csv')
elections.append(df)
#確認
# 確認
for d in elections:
print(d.head(3))