1

我第一次使用 RCurl 在网站上的表单中输入数据。我需要能够从下拉列表中选择特定选项并提交表单。棘手的部分是该网站是从之前的另一个页面定向的。更具体地说,以下是我尝试在其中发布表单的页面的网址:

http://energyalmanac.ca.gov/petroleum/fuels_watch/page2.php

正如您所看到的,下拉列表中没有可用的选项,因为此页面是从另一个页面引导的,该页面之前填充了选项。通过手动输入上一页中的数据并检查填充的值,我发现下拉列表中的值每周递增 1。当前,例如,该值为 1091。该值需要分配给输入字段“PkID”。但是,尽管查看了其他 StackOverflow 问题并阅读了 postForm 函数,但我无法填充表单并进入下一页。

我的问题是我的代码中是否缺少某些未正确发布值的内容?或者代码不起作用,因为输入该网址,下拉列表中没有可用的选项。

以下是我拥有的代码。如果我的解释不清楚,我深表歉意。

postForm("http://energyalmanac.ca.gov/petroleum/fuels_watch/page2.php",
    'PkID' = '1091', style = "post")

任何帮助是极大的赞赏!

4

1 回答 1

2

您必须将MonthandYear参数发布到,http://energyalmanac.ca.gov/petroleum/fuels_watch/page2.php以便它知道PkID要填写哪个 s。然后您可以抓取这些参数并将它们发布到http://energyalmanac.ca.gov/petroleum/fuels_watch/output.php包含实际数据的页面。

 > library(RCurl)
 > library(XML)
 > form <- postForm("http://energyalmanac.ca.gov/petroleum/fuels_watch/page2.php", Year = 1995, Month = 2)                                                                                                                                   
 > doc <- htmlParse(form)                                                                                                                                                                                                                    
 >                                                                                                                                                                                                                                           
 > pkids <- xpathSApply(doc, "//select[@name = 'PkID']/option", xmlAttrs)                                                                                                                                                                    
 > pkids                                                                                                                                                                                                                                     
 value value value value
 "162" "163" "164" "165"
 >                                                                                                                                                                                                                                           
 > data <- lapply(pkids, function(x) {                                                                                                                                                                                                       
    form <- postForm(uri = "http://energyalmanac.ca.gov/petroleum/fuels_watch/output.php", PkID = x)                                                                                                                                         
    htmlParse(form)                                                                                                                                                                                                                          
    })                                                                                                                                                                                                                                       
 >                                                                                                                                                                                                                                           
 > tab <- readHTMLTable(data[[1]], which = 1)                                                                                                                                                                                                
 R> head(tab)                                                                                                                                                                                                                                 
                                   02/03/1995 01/27/1995 Percent\n        Change
 1                  Refinery Input       <NA>       <NA>                    <NA>
 2                       Crude Oil      10965      11271                   -2.7%
 3                                       <NA>       <NA>                    <NA>
 4             Refinery Production       <NA>       <NA>                    <NA>
 5                 Motor Gasoline:       <NA>       <NA>                    <NA>
 6 CARB RFG (incl. Non-Oxygenated)       3049       2482                   22.8% ...
于 2013-11-05T18:06:18.590 回答