【发布时间】:2014-03-04 08:14:23
【问题描述】:
我已经倾注了相关的问题,但无济于事。我需要根据我指定的日期和时间从 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 结果显示,在“小时”表单元素中,我确实选择了“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 返回到网页?
如果我能做到这一点,我也可以写一些东西来“推动”页面箭头。
【问题讨论】:
-
我希望其他人能给你更多乐观的理由,但我的建议是不要这样做。使用 python 和 selenium 驱动程序,即使你事先不了解 python,也会容易得多。我这样说是作为一个热爱 R 并试图将它用于所有事情的人,但在这种情况下,我认为它不是适合这项工作的工具。
-
感谢 Ista...在进入这个小泡菜之前,我从未听说过 Selenium。您认为使用 Python 驱动程序优于下面 jdharrison 建议的 R 包吗?
标签: javascript asp.net r http rcurl