gpt4 book ai didi

javascript - 从 R 中使用 JavaScript 抓取页面

转载 作者:行者123 更新时间:2023-11-30 17:09:19 25 4
gpt4 key购买 nike

我是 R 中网络抓取的新手,最近遇到了引用 javascript 的网站的问题。我正试图从下面的网页中抓取数据,但没有成功。我相信 javascript 链接阻止我访问该表。结果,带有函数“readHTMLTable”的 R 包“XML”变为空。

library(XML)
library(RCurl)
url <- "http://votingrights.news21.com/interactive/movement-voter-id/index.html"
tabs <- getURL(url)
tabs <- htmlParse(url)
tabs <- readHTMLTable(tabs, stringsAsFactors = FALSE)

如何访问 javascript 链接以获取数据?或者这甚至可能吗?当使用数据的直接链接(下方)和 R 包“rjson”时,我仍然无法读取数据。

library("rjson")
json_file <- "http://votingrights.news21.com/static/interactives/movement/data/fulldata.js"
lines <- readLines(json_file)
json_data <- fromJSON(lines, collapse="")

最佳答案

您引用的文件是一个包含 JSON 而不是 JSON 的 javascript 文件。在这种情况下,您可以手动删除内容以获取数据:

library("rjson")
json_file <- "http://votingrights.news21.com/static/interactives/movement/data/fulldata.js"
lines <- readLines(json_file)
lines[1] <- sub(".* = (.*)", "\\1", lines[1])
lines[length(lines)] <- sub(";", "", lines[length(lines)])
json_data <- fromJSON(paste(lines, collapse="\n"))
> head(json_data[[1]][[1]])
$state
[1] "Alabama"

$bill
[1] "HB 19"

$category
[1] "Strict photo ID"

$introduced
[1] "Mar 1, 2011"

$house
[1] "Yes"

$senate
[1] "Yes"

如果你想与网页上的 javascript 数据交互,你可以使用 Selenium:

library(RSelenium)
appURL <- "http://votingrights.news21.com/static/interactives/movement/index.html"
pJS <- phantom()
remDr <- remoteDriver(browserName = "phantom")
remDr$open()
remDr$navigate(appURL)
fullData <- remDr$executeScript("return fullData;")
pJS$stop()
> head(fullData[[1]][[1]])
$state
[1] "Alabama"

$bill
[1] "HB 19"

$category
[1] "Strict photo ID"

$introduced
[1] "Mar 1, 2011"

$house
[1] "Yes"

$senate
[1] "Yes"

关于javascript - 从 R 中使用 JavaScript 抓取页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27327277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com