2017-04-11 155 views
-2

我试图从the usda export sales query system.[R刮ASPX网站

刮数据我有看的计算器一些类似的项目,但是这一次是在独特之处在于该网站的网址不变的形式有后已发布。

我试图使用rvest,httr和Rcurl无济于事。我的目标是从所有商品和所有国家(从01/01/2000开始直到最近的数据)中提取数据。

任何帮助将不胜感激。

回答

0

使用rvest我做了以下内容:

session <- html_session("https://apps.fas.usda.gov/esrquery/esrq.aspx") 
form <- html_form(session)[[1]] 

的形式如下

<form> 'aspnetForm' (POST esrq.aspx) 
<input hidden> '__VIEWSTATE': ... <truncated> 
<input hidden> '__VIEWSTATEGENERATOR': 41AA5B91 
<input hidden> '__EVENTVALIDATION': ... <truncated> 
<select> 'ctl00$MainContent$lbCommodity' [1/44] 
<select> 'ctl00$MainContent$lbCountry' [1/196] 
<select> 'ctl00$MainContent$ddlReportFormat' [1/4] 
<input checkbox> 'ctl00$MainContent$cbxSumGrand': 
<input checkbox> 'ctl00$MainContent$cbxSumKnown': 
<input radio> 'ctl00$MainContent$rblOutputType': 0 
<input radio> 'ctl00$MainContent$rblOutputType': 1 
<input radio> 'ctl00$MainContent$rblOutputType': 2 
<input text> 'ctl00$MainContent$tbStartDate': 03/30/2017 
<input image> 'ctl00$MainContent$ibtnStart': 
<input text> 'ctl00$MainContent$tbEndDate': 03/30/2017 
<input image> 'ctl00$MainContent$ibtnEnd': 
<input button> '': Help - Marketing Year 
<input radio> 'ctl00$MainContent$rblColumnSelection': regular 
<input radio> 'ctl00$MainContent$rblColumnSelection': weekly_exports 
<input radio> 'ctl00$MainContent$rblColumnSelection': net_sales_cmy 
<input radio> 'ctl00$MainContent$rblColumnSelection': ob_cmy 
<input radio> 'ctl00$MainContent$rblColumnSelection': ob_nmy 
<input hidden> '': 
<input hidden> '': 
<input submit> 'ctl00$MainContent$btnSubmit': Submit 

在上面我已经截断了VIEWSTATE和EVENTVALIDATION让它多一点可读性。请注意,有具有相同名称的三个单选按钮

'ctl00$MainContent$rblOutputType' 

假设我要选择所有的国家和玉米从2016年7月30日开始二零一七年三月三十日我使用

filledform <- set_values(form, 
       `ctl00$MainContent$lbCommodity` = "Corn", 
       `ctl00$MainContent$lbCommodity` = "ALL COUNTRIES", 
       `ctl00$MainContent$tbStartDate` = "07/30/2016", 
       `ctl00$MainContent$tbEndDate` = "03/30/2017") 
设置的值

查看填写的表格我得到这个(VIEWSTATE和EVENTVALIDATION截断)

<form> 'aspnetForm' (POST esrq.aspx) 
<input hidden> '__VIEWSTATE': ... <truncated> 
<input hidden> '__VIEWSTATEGENERATOR': 41AA5B91 
<input hidden> '__EVENTVALIDATION': ... <truncated> 
<select> 'ctl00$MainContent$lbCommodity' [1/44] 
<select> 'ctl00$MainContent$lbCountry' [1/196] 
<select> 'ctl00$MainContent$ddlReportFormat' [1/4] 
<input checkbox> 'ctl00$MainContent$cbxSumGrand': 
<input checkbox> 'ctl00$MainContent$cbxSumKnown': 
<input radio> 'ctl00$MainContent$rblOutputType': 0 
<input radio> 'ctl00$MainContent$rblOutputType': 1 
<input radio> 'ctl00$MainContent$rblOutputType': 2 
<input text> 'ctl00$MainContent$tbStartDate': 07/30/2016 
<input image> 'ctl00$MainContent$ibtnStart': 
<input text> 'ctl00$MainContent$tbEndDate': 03/30/2017 
<input image> 'ctl00$MainContent$ibtnEnd': 
<input button> '': Help - Marketing Year 
<input radio> 'ctl00$MainContent$rblColumnSelection': regular 
<input radio> 'ctl00$MainContent$rblColumnSelection': weekly_exports 
<input radio> 'ctl00$MainContent$rblColumnSelection': net_sales_cmy 
<input radio> 'ctl00$MainContent$rblColumnSelection': ob_cmy 
<input radio> 'ctl00$MainContent$rblColumnSelection': ob_nmy 
<input hidden> '': 
<input hidden> '': 
<input submit> 'ctl00$MainContent$btnSubmit': Submit 

在这里我可以看到,起始日期已更改为需要的值,但商品和COUNTR y值尚未设置。当我提交填好的表格与

session1 <- submit_form(session, filledform) 

我收到消息

Submitting with 'ctl00$MainContent$rblOutputType'. 

回想一下,有这三种形式。寻找表格使用

table <- session1 %>% html_nodes("table") 

不提供所需的结果。

我有具有通过不使用填充形式并设置在submit_form函数中的值这样

session1 <- submit_form(
      session, 
      form, 
      `ctl00$MainContent$lbCommodity` = "Corn", 
      `ctl00$MainContent$lbCommodity` = "ALL COUNTRIES", 
      `ctl00$MainContent$rblOutputType` = "Browser", 
      `ctl00$MainContent$tbStartDate` = "07/30/2016", 
      `ctl00$MainContent$btnSubmit` = "Submit" 
      ) 

这给出与上面相同的消息在其他网站上的成功。结果仍不包含所需的表格。

我在这里做错了什么?