R:网络抓取具有相同 URL 的多个表时出错
R: Errors when webscraping across mulitple tables with same URL
我对网络抓取还很陌生,在对我的代码进行故障排除时遇到了问题。目前,我每次都会遇到不同的错误,并且真的不知道从哪里继续。目前正在研究使用 RSelenium,但非常感谢对以下代码的一些建议和反馈。
我的初始代码基于以下内容:
library(xml2)
library(RCurl)
library(dplyr)
library(rvest)
i=1
table = list()
for (i in 1:15) {
data=("https://www.forsvarsbygg.no/no/salg-av-eiendom/solgte-eiendommer/","?page=",i))
page <- read_html(data)
table1 <- page %>%
html_nodes(xpath = "(//table)[2]") %>%
html_table(header=T)
i=i+1
table1[[1]][[7]]=as.integer(gsub(",", "",table1[[1]][[7]]))
table=bind_rows(table, table1)
print(i)}
table$`ÅR`=as.Date(table$`ÅR`,format ="%Y")
下面是我目前收到的错误。我知道很多,但我认为其中一些是以前错误的结果。任何帮助将不胜感激!
我=1
table = list()
for (i in 1:15) {
- data=("https://www.forsvarsbygg.no/no/salg-av-eiendom/solgte-eiendommer/","?page=",i))
错误:意外的“,”在:
“对于(我在1:15){
data=("https://www.forsvarsbygg.no/no/salg-av-eiendom/solgte-eiendommer/","
page <- read_html(data)
UseMethod("read_xml") 错误:
没有适用于 'read_xml' 的方法应用于 class“函数”
的对象
table1 <- page %>%
-
html_nodes(xpath = "(//table)[2]") %>%
-
html_table(header=T)
UseMethod("xml_find_all") 错误:
没有适用于 'xml_find_all' 的方法应用于 class“函数”
的对象
i=i+1
table1[[1]][[7]]=as.integer(gsub(",", "",table1[[1]][[7]]))
is.factor(x) 中出错:找不到对象 'table1'
table=bind_rows(table, table1)
list2(...) 错误:未找到对象 'table1'
print(i)}
错误:“print(i)}”中出现意外的“}”
table$ÃR
=as.Date(table$ÃR
,format ="%Y")
以下代码生成一个数据框,其中包含您要查找的所有数据。下面的代码没有使用 RSelenium,而是直接从站点填充 table 的同一个 API 获取数据,因此您不需要合并多个页面:
library(tidyverse)
library(rvest)
library(jsonlite)
####GET NUMBER OF ITEMS#####
url <- "https://www.forsvarsbygg.no/ListApi/ListContent/78635/SoldEstates/0/10/"
data <- jsonlite::fromJSON(url, flatten = TRUE)
totalItems <- data$TotalNumberOfItems
####GET ALL OF THE ITEMS#####
allData <- paste0('https://www.forsvarsbygg.no/ListApi/ListContent/78635/SoldEstates/0/', totalItems,'/') %>%
jsonlite::fromJSON(., flatten = TRUE) %>%
.[1] %>%
as.data.frame() %>%
rename_with(~str_replace(., "ListItems.", ""), everything())
我对网络抓取还很陌生,在对我的代码进行故障排除时遇到了问题。目前,我每次都会遇到不同的错误,并且真的不知道从哪里继续。目前正在研究使用 RSelenium,但非常感谢对以下代码的一些建议和反馈。
我的初始代码基于以下内容:
library(xml2)
library(RCurl)
library(dplyr)
library(rvest)
i=1
table = list()
for (i in 1:15) {
data=("https://www.forsvarsbygg.no/no/salg-av-eiendom/solgte-eiendommer/","?page=",i))
page <- read_html(data)
table1 <- page %>%
html_nodes(xpath = "(//table)[2]") %>%
html_table(header=T)
i=i+1
table1[[1]][[7]]=as.integer(gsub(",", "",table1[[1]][[7]]))
table=bind_rows(table, table1)
print(i)}
table$`ÅR`=as.Date(table$`ÅR`,format ="%Y")
下面是我目前收到的错误。我知道很多,但我认为其中一些是以前错误的结果。任何帮助将不胜感激!
我=1
table = list() for (i in 1:15) {
- data=("https://www.forsvarsbygg.no/no/salg-av-eiendom/solgte-eiendommer/","?page=",i))
错误:意外的“,”在: “对于(我在1:15){ data=("https://www.forsvarsbygg.no/no/salg-av-eiendom/solgte-eiendommer/","
page <- read_html(data)
UseMethod("read_xml") 错误: 没有适用于 'read_xml' 的方法应用于 class“函数”
的对象table1 <- page %>%
-
html_nodes(xpath = "(//table)[2]") %>%
-
html_table(header=T)
UseMethod("xml_find_all") 错误: 没有适用于 'xml_find_all' 的方法应用于 class“函数”
的对象i=i+1 table1[[1]][[7]]=as.integer(gsub(",", "",table1[[1]][[7]]))
is.factor(x) 中出错:找不到对象 'table1'
table=bind_rows(table, table1)
list2(...) 错误:未找到对象 'table1'
print(i)}
错误:“print(i)}”中出现意外的“}”
table$
ÃR
=as.Date(table$ÃR
,format ="%Y")
以下代码生成一个数据框,其中包含您要查找的所有数据。下面的代码没有使用 RSelenium,而是直接从站点填充 table 的同一个 API 获取数据,因此您不需要合并多个页面:
library(tidyverse)
library(rvest)
library(jsonlite)
####GET NUMBER OF ITEMS#####
url <- "https://www.forsvarsbygg.no/ListApi/ListContent/78635/SoldEstates/0/10/"
data <- jsonlite::fromJSON(url, flatten = TRUE)
totalItems <- data$TotalNumberOfItems
####GET ALL OF THE ITEMS#####
allData <- paste0('https://www.forsvarsbygg.no/ListApi/ListContent/78635/SoldEstates/0/', totalItems,'/') %>%
jsonlite::fromJSON(., flatten = TRUE) %>%
.[1] %>%
as.data.frame() %>%
rename_with(~str_replace(., "ListItems.", ""), everything())