我倒过相关的问题无济于事。我需要根据我指定的日期和小时从ASP.NET网页(http://www.spp.org/LIP.asp)中刮取价格信息表。我很满意并想使用R.我的基本绊脚石是URL不反映搜索参数,它是静态的,我也不知道如何在ASP.NET中使用Javascript提交HTML表单现场。使用R按钮从ASP.NET网页中刮取表格
我查看了上面URL的源代码。我发现在iframe中有一个链接指向另一个'源数据'页面:http://www.spp.org/LIPPosting/LIP.aspx。我尝试在R基于这个StackOverflow线程做一个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结果显示在'小时'表单元素中,我确实选择了'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返回到网页?
如果我能做到这一点,我可以写些东西来“推”页面箭头。
我希望别人会给你一个更乐观的理由,但我的建议是不要做它。在selenium驱动程序中使用python,即使你事先不知道python也会容易得多。我说这是一个热爱R并试图将其用于一切的人,但在这种情况下,我认为这不是适合工作的正确工具。 – Ista
谢谢Ista ......在进入这个小小的泡菜之前,我从来没有听说过硒。你认为他们在通过jdharrison建议的R包使用Python驱动程序方面是一个优势吗? – sclarky