2017-03-04 40 views
0

我正在寻找自动从FEC下载数据的过程,但我仍然是一个业余的高级数据刮。FEC Data Scraping - 如何处理.do扩展名?

我想剧本做什么:

下载分项个人及其他委员会捐款CSV文件,对于给定的候选人PAC。 FEC在静态页面上没有可用的数据。相反,这是一些时髦的Javascript(我认为)数据扩展。对于给定的PAC域名始终是相同的:

http://www.fec.gov/fecviewer/CandidateCommitteeDetail.do

中的链接可以使用搜索框,而不是一个静态页面,我不知道如何解决它的代码。

我不完全确定如何访问我需要的页面,也不知道如何将CSV文件下载到我选择的位置。任何帮助将非常感激。

+0

你试过的是什么没有奏效? – hrbrmstr

回答

0

.dostrutshttps://struts.apache.org/扩展名:它会在每次调用时引发服务器端页面生成,并基于可见和隐藏的servlet参数。我不确定是否有系统的方法来处理解析/抓取。

+0

我发现[this](https://github.com/cschnaars/FEC-Scraper-Toolbox),但我真的不确定它究竟做了什么。 – Hanna

2

这应该给你一个出发点。如果你想要挖苦,学习如何使用浏览器开发者工具将是一个很好的时间投资。

library(httr) 
library(jsonlite) 
library(tidyverse) 

POST(url = "http://www.fec.gov/fecviewer/ExportImageSearchResults.do", 
    body = list(format = "json", 
       candCmteIdName = "", 
       state = "ME", 
       district = "", 
       city = "", 
       treasurerName = "", 
       reportYear = "", 
       covStartDate = "", 
       covEndDate = "", 
       defaultTab = "1"), 
    encode = "form") -> res 

res_j <- fromJSON(content(res, as="text")) 
map_df(res_j$fec.gov$results, flatten_df) %>% 
    glimpse() 
## Observations: 343 
## Variables: 9 
## $ ID        <chr> "S4ME00071", "S4ME00089", "H6M... 
## $ Name       <chr> "BELLOWS, SHENNA", "BENNETT, E... 
## $ Treasurer Name     <chr> "null", "null", "null", "null"... 
## $ Active Through     <chr> "2018", "2018", "2018", "2018"... 
## $ City       <chr> "MANCHESTER", "PORTLAND", "BRU... 
## $ State       <chr> "ME", "ME", "ME", "ME", "ME", ... 
## $ Party       <chr> "DEMOCRATIC PARTY", "REPUBLICA... 
## $ Committee Type/Candidate Office <chr> "S - Senate", "S - Senate", "H... 
## $ Committee Designation   <chr> "null", "null", "null", "null"... 

如果您检查网页交易更多开发工具的网络选项卡上,你会看到像其他调用这些资源:

POST(url = "http://www.fec.gov/fecviewer/ExportCandidateCommitteeCurrentSummary.do", 
    body = list(format = "json", 
       electionYr = "2016", 
       tabIndex = "1", 
       candidateCommitteeId = "S4ME00071", 
       conCandidateCommitteId = "C00550434", 
       conCandidateCommitteeName = "BELLOWS+FOR+SENATE", 
       lineNumber = "", 
       lineDescription = "", 
       commingFrom = "twoYearSummary", 
       comingFromCashExpSummary = "false", 
       electionYrOpt = "2016"), 
    encode = "form") 

GET(url = "http://www.fec.gov/fecviewer/CommitteeDetailCurrentSummary.do", 
    query=list(tabIndex=1, 
       candidateCommitteeId="H6ME02130", 
       electionYr=2016)) 

而且,你可以批量下载数据文件:http://www.fec.gov/finance/disclosure/ftpdet.shtml

+0

我开始玩这个游戏(终于明白了你写的代码),我想知道你在哪里得到了标题中带有“ExportImage”的URL。 – Hanna