【问题标题】:R: Webpage scraping with JavaScript (need to give two values and grab tables)R:使用 JavaScript 抓取网页(需要给出两个值并抓取表格)
【发布时间】:2014-08-12 01:09:10
【问题描述】:

我正在尝试从交通部 (DOT) 交通统计网页(南卡罗来纳州 - 美国)获取表格。在这种特殊情况下,我试图抓取特定位置 (textBox1) 和日期范围 (textBox2) 的所有表格。我已经做了一些基本的网页抓取,但这真的超出了我目前的知识范围。

这是网页(添加 http -- 不知道为什么他们没有此域名): 206.74.144.15/Poll5WebAppPublic/wfrm/wfrmViewDataNightly.aspx

第一个文本框(站点)对应于以下行:

<input name="WucSites1:txtSiteID" value="0032" maxlength="4" size="1" id="WucSites1_txtSiteID" class="TextBox" style="width:40px;" type="text">

第二个文本框(日期)对应于以下行:

<input name="WucDates1:txtDate" value="08/10/2014" maxlength="10" size="8" id="WucDates1_txtDate" class="TextBox" style="width:88px;" type="text">

“Go”按钮对应于以下行:

<input name="btnSmGOIcon" id="btnSmGOIcon" tabindex="1" title="Get Data for Chosen Site" class="cssLargeIcons" onmouseover="this.src = '../images/iconImages/GO_o.png';" onmouseout="this.src = '../images/iconImages/GO.png';" src="../images/iconImages/GO.png" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;btnSmGOIcon&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" language="javascript" border="0" type="image">

我想将位置/站点设置为“32”,并在从 2013 年 1 月 1 日到 2014 年 8 月 11 日期间轮换日历日,同时选择所有表格并将它们绑定到一个数据框中。

非常感谢您

【问题讨论】:

  • 你真的要尝试“模拟”一个帖子吗?如果是这样,恕我直言,您应该首先测试您是否真的可以 - 例如使用curl 之类的工具。如果你不能模拟 POST,你就不能“刮”任何东西——例如如果站点使用 ASP.NET EVENT/VIEWSTATE 验证(换句话说,防止欺骗/模拟 POST)。快速查看源代码表明它们是......
  • @EdSF,你是说无法从这个网页上抓取信息?
  • 在我最近的一个问题中。有人推荐使用RSelenium,它非常适合这些类型的问题。安装它并查看??RSelenium 并在小插图中选择RSelenium-basics 以获得一组很好的示例
  • @JoseR 是的,我做了(如果某些方面存在,则很难)虽然下面的工具连接/自动化浏览器活动应该很棒(没有不知道,也没有尝试过)。所以这对我来说也是一个学习的时刻:)

标签: javascript asp.net r geolocation web-scraping


【解决方案1】:

这是一份非常适合RSelenium的工作

安装适当的软件后

library(RSelenium)
library(XML)
startServer()
d <- remoteDriver$new()
# open and navigate to page
d$open()
d$navigate('http://206.74.144.15/Poll5WebAppPublic/wfrm/wfrmViewDataNightly.aspx')
# set site = 0032
d$findElement('name','WucSites1:txtSiteID')$setElementAttribute('value',list('0032'))
# loop through dates    
dates <- strftime(seq.Date(as.Date('01/01/2013', format = 
     '%m/%d/%Y'),  as.Date('08/11/2014', format = '%m/%d/%Y'),by=1),
      '%m/%d/%Y')

results <- lapply(dates, function(i,dr){
      ii <- force(i)
      # change date
     dr$findElement('name','WucDates1:txtDate')$setElementAttribute('value',list(ii))
     # click go
     dr$findElement('name','btnSmGOIcon')$clickElement()
     # extract table (the first three lines are header)
     data <- readHTMLTable(dr$findElement('id', 'gridForData')$getElementAttribute('outerHTML')[[1]], 
             skip=1:3)
     data$date = ii
     return(data)
},dr = d)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    相关资源
    最近更新 更多