我滔滔不绝地问了很多相关的问题,但都无济于事。我需要从ASP.NET网页中抓取价格信息表(
http://www.spp.org/LIP.asp
)基于我指定的日期和时间。我很熟悉并想使用R。我的基本障碍是URL不反映搜索参数,它是静态的,我也不知道如何在ASP.NET网站上提交包含Javascript的HTML表单。
我查看了上面URL的源代码。我发现在iframe中有一个指向另一个“源数据”页面的链接:
http://www.spp.org/LIPPosting/LIP.aspx
。我尝试基于此StackOverflow线程在R中执行POST请求:
What if I want to web scrape with R for a page with parameters?
.
##ASP.NET site scrape
forms = getHTMLFormDescription("http://www.spp.org/LIPPosting/LIP.aspx")
# Name the list for easy reference
names(forms)='spp'
# Use the createFunction tool so I can submit a search
fun = createFunction(forms$spp, verbose=T)
# Submit an HTML form looking for data using all form defaults
# Except change the hour to '03'
results <- fun(ddlHour = '03')
# Grab the table results from the HTML based on its id tag
tableData <- getNodeSet(htmlParse(results), "//*/table[@id = 'dgLIP']")
readHTMLTable(tableData[[1]])
HTML结果显示,在“hour”表单元素中,我确实选择了“03”。
<td style="height: 42px; width: 77px;">
<span id="lblLIPHour">Hour</span><br><select name="ddlHour" id="ddlHour"><option value="1">01</option>
<option value="2">02</option>
<option selected value="3">03</option>
<option value="4">04</option>
<option value="5">05</option>
<option value="6">06</option>
<option value="7">07</option>
<option value="8">08</option>
但是,此请求不会传递给服务器,因为当我查看实际的表结果时,它是当前时间的,而不是“03”。
> readHTMLTable(tableData[[1]])
Publish Date Price Date PNode Price Parent PNode Settlement Location
1 201402281552 201402281600 AECI 23.45 AECI AECI
2 201402281552 201402281600 AMRN 23.45 AMRN AMRN
3 201402281552 201402281600 BLKW 23.45 BLKW BLKW
4 201402281552 201402281600 CLEC 23.45 CLEC CLEC
5 201402281552 201402281600 CSWS_AECC_LA 23.45 CSWS_AECC_LA AECC_CSWS
此外,我只能获取从服务器返回的页面的HTML,它不包含所有结果。事实上,页面底部有JavaScript箭头按钮,当我在网页中时,可以在所有结果之间切换。
在网页本身,要查看从下拉菜单中选择后的结果,我必须点击“查看”按钮。有没有一种方法可以在R中复制它,以将我的“03”参数作为查询发送到服务器,从而将新的HTML返回到网页?
如果我能做到这一点,我也可以写一些东西来“推”页面箭头。