簡體   English   中英

RVest:如何在循環中修復“替換長度為零”

[英]RVest: How to fix 'Replacement has length zero' in a loop

我想從網站上抓取特定的 html 代碼。 所需的 object 並非在下面循環的每一頁上,因此,某些值為 NA。 但是,只要缺少 object,整個循環就會停止。

我嘗試了這段代碼進行非循環抓取,結果證明效果很好。 在這里,我排除了所有無法獲得或不感興趣的值。

BJ <- data.frame( Wohnungs_ID = ID, Baujahr = ifelse (nchar(Baujahr)==0 | nchar(Baujahr)>6, NA, Baujahr), stringsAsFactors = F

在相關情況下,我想抓取兩個並不總是列出的特定變量。 Url 是我之前抓取的 reflink 列表。

library(rvest)  
library(magrittr)
library(tidyr)  
library(ggplot2) 
library(stringr) 
library(jsonlite) 
library(purrr)  
library(dplyr)  

immo_webp <- read_html ("https://www.immobilienscout24.de/Suche/S-2/Wohnung-Miete/Rheinland-Pfalz/Koblenz")


# URLs 

base = 'https://www.immobilienscout24.de/expose/'

urls <- sapply(read_html("https://www.immobilienscout24.de/Suche/S-2/Wohnung-Miete/Rheinland-Pfalz/Koblenz")%>%
                 html_nodes('article')%>%
                 html_attr('data-obid'), function (url){paste0(base, url)})
print(urls)

# ID bilden

substring(urls, 1, 1)
ID <- substring(urls, 41)

Baujahr <- c(1 : 20)
Energie <- c(1 : 20)

for (i in urls){

  aktuellewohnung <- read_html(url(i))

  Baujahr[i] <- aktuellewohnung %>%
    html_nodes("#is24-content > div.grid-item.padding-desk-right-xl.desk-two-thirds.lap-one-whole.desk-column-left.flex-item.palm--flex__order--1.lap--flex__order--1 > div.is24-ex-details.main-criteria-headline-size.two-column-layout > div.criteriagroup.flex.flex--wrap.criteria-group--spacing.padding-top-s > div.criteriagroup.criteria-group--border.criteria-group--two-columns.criteria-group--spacing > dl:nth-child(1) > dd") %>%
    html_text()
  Energie[i] <- aktuellewohnung %>%
    html_nodes("#is24-content > div.grid-item.padding-desk-right-xl.desk-two-thirds.lap-one-whole.desk-column-left.flex-item.palm--flex__order--1.lap--flex__order--1 > div.is24-ex-details.main-criteria-headline-size.two-column-layout > div.criteriagroup.flex.flex--wrap.criteria-group--spacing.padding-top-s > div.criteriagroup.criteria-group--border.criteria-group--two-columns.criteria-group--spacing > dl:nth-child(7) > dd") %>%
    html_text()  
} 

我收到以下錯誤消息:

Error in Baujahr[i] <- aktuellewohnung %>% html_nodes("#is24-content > div.grid-item.padding-desk-right-xl.desk-two-thirds.lap-one-whole.desk-column-left.flex-item.palm--flex__order--1.lap--flex__order--1 > div.is24-ex-details.main-criteria-headline-size.two-column-layout > div.criteriagroup.flex.flex--wrap.criteria-group--spacing.padding-top-s > div.criteriagroup.criteria-group--border.criteria-group--two-columns.criteria-group--spacing > dl:nth-child(1) > dd") %>%  : 

replacement has length zero

我希望這個循環繼續並將缺失值保存為 NA。 希望你能幫助我。 提前非常感謝。

我無法對此進行測試,因為您沒有為真正的代表提供 url,但我認為將您的代碼包裝在一些 try() 函數中應該可行。

for (i in urls){

  aktuellewohnung <- read_html(url(i))

  Baujahr[i] <- aktuellewohnung %>%
    try(html_nodes("#is24-content > div.grid-item.padding-desk-right-xl.desk-two-thirds.lap-one-whole.desk-column-left.flex-item.palm--flex__order--1.lap--flex__order--1 > div.is24-ex-details.main-criteria-headline-size.two-column-layout > div.criteriagroup.flex.flex--wrap.criteria-group--spacing.padding-top-s > div.criteriagroup.criteria-group--border.criteria-group--two-columns.criteria-group--spacing > dl:nth-child(1) > dd")) %>%
    try(html_text())
  Energie[i] <- aktuellewohnung %>%
    try(html_nodes("#is24-content > div.grid-item.padding-desk-right-xl.desk-two-thirds.lap-one-whole.desk-column-left.flex-item.palm--flex__order--1.lap--flex__order--1 > div.is24-ex-details.main-criteria-headline-size.two-column-layout > div.criteriagroup.flex.flex--wrap.criteria-group--spacing.padding-top-s > div.criteriagroup.criteria-group--border.criteria-group--two-columns.criteria-group--spacing > dl:nth-child(7) > dd")) %>%
    try(html_text())  
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM