政治資金収支報告書を自動でダウンロード【R】

Webスクレイピングという技術を使うと,ネットで公開されている政治資金収支報告書を自動でダウンロードすることができます。

以下は,総務省の定期公表分を全部ダウンロードするRのスクリプトです。都道府県選管の場合も,URLの語句などを手掛かりに改造することで実行可能になります(ただしWebにPDFがリンクで置かれているところに限ります)。

#3つのパッケージを使います。あらかじめインストールしてください。
library(rvest)
library(stringr)
library(dplyr)

Seiji <-read_html("https://www.soumu.go.jp/senkyo/seiji_s/seijishikin/index.html")

a_tags <- Seiji %>% html_nodes(css = "a[href *= 'seijishikin']")
li1 <- a_tags %>% html_attr("href")
titles <-a_tags %>% html_text()

df1 <- as.data.frame(cbind(li1,titles))
df2 <- df1[str_detect(df1$titles,"公表") ,]

#定期公表のナンバーを確認する
df2[grepl("定期公表",df2$titles) ,]


#保存先フォルダを指定。\ではなく/になるので注意。
setwd("F:/TEST/")
for ( i in c(6,16,27,36,41,48,52,60)) {		#定期公表のナンバーをc()の中に入れる
url <- paste0("https://www.soumu.go.jp",df2[i,1])
foldern <-df2[i,2]
dir.create(foldern)
Seiji2 <-read_html(url)
a_tags2 <- Seiji2 %>% html_nodes(css = "a[href *= 'seijishikin']")
li01 <- a_tags2 %>% html_attr("href")
li02 <- li01[str_detect(li01,"\\/senkyo.*html")]

for ( j in 1:length(li02)){
url2 <- paste0("https://www.soumu.go.jp",li02[j])
Seiji3 <-read_html(url2)
a_tags3 <- Seiji3 %>% html_nodes(css = "a[href *= 'seiji_s']")
li301 <- a_tags3 %>% html_attr("href")
li302 <- paste0("https://www.soumu.go.jp",li301)
fn302 <-a_tags3 %>% html_text()
fn303 <-gsub("\\s","",fn302)

for(h in 1:length(li302)){

if(str_detect(fn303[h], ".*ページへ.*", negate = TRUE)){
  download.file(url = li302[h],
                destfile = str_c("./",foldern,"/",fn303[h],".pdf"),
                mode = "wb")

Sys.sleep(1)	#1秒待機 
}
}
}}
#途中で止まったときは、h,j,iの値を調べて修正する
h
j
i

コメント

コメントを残す

メールアドレスが公開されることはありません。