【问题标题】:Scraping website that include JS/jquery code with R使用 R 抓取包含 JS/jquery 代码的网站
【发布时间】:2016-08-16 11:26:18
【问题描述】:

我想通过不同的搜索从this website 中提取超链接(不要害怕它是丹麦语)。可以在右侧找到超链接(v15、v14、v13 等)[example]。 我试图以某种方式抓取的网站使用来自某种 jquery/javascript 的搜索结果。这是基于我 非常 有限的 HTML 知识,可能是错误的。

我认为这一事实使以下代码无法运行(我使用“rvest”包):

sdslink="http://karakterstatistik.stads.ku.dk/#searchText=&term=&block=&institute=null&faculty=&searchingCourses=true&page=1"
s_link = recs %>% 
read_html(encoding = "UTF-8") %>% 
html_nodes("#searchResults a") %>% 
html_attr("href")

我找到了一种可行的方法,但它需要我手动下载页面,每个页面都使用“右键单击”+“另存为”。然而,这是不可行的,因为我想抓取总共 100 页的超链接。

我尝试将 jsonlite 包与 httr 结合使用,但似乎找不到正确的 .json 文件。

我希望你们可能有一个解决方案,要么让 jsonlite 工作,自动化“另存为”解决方案,要么第三个更聪明的路径。

【问题讨论】:

    标签: jquery json r web-scraping


    【解决方案1】:

    一种方法是使用RSelenium。这里有一些简单的代码可以帮助您入门。我假设您已经安装了 RSelenium 和 webdriver。导航到您感兴趣的网站:

    library(RSelenium)
    startServer()
    remDr <- remoteDriver(remoteServerAddr = "localhost", port = 4444, 
                          browserName = "chrome")
    remDr$open(silent = TRUE)
    remDr$navigate("http://karakterstatistik.stads.ku.dk/")
    

    通过检查源找到submit 按钮:

    webElem <- remDr$findElement("name", "submit")
    webElem$clickElement()
    

    保存前 5 页:

    html_source <- vector("list", 5)
    i <- 1
    while (i <= 5) {
      html_source[[i]] <- remDr$getPageSource()
      webElem <- remDr$findElement("id", "next")
      webElem$clickElement()
      Sys.sleep(2)
      i <- i + 1
    }
    remDr$close()
    

    【讨论】:

    • 感谢大家的帮助,它正是我所需要的。必须先研究一下 Selenium,然后才能让它工作。如果其他人在安装时遇到问题,This answer 另一个问题非常有用。
    • 不客气 -- 如果您的问题得到满意回答,请将答案标记为已接受。
    • 完成,谢谢。我有一个相当快的follow-up question
    猜你喜欢
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多