【问题标题】:RVest: How to fix 'Replacement has length zero' in a loopRVest:如何在循环中修复“替换长度为零”
【发布时间】:2019-10-24 14:23:29
【问题描述】:

我想从网站上抓取特定的 html 代码。所需的对象不在下面循环的每一页上,因此,某些值为 NA。但是只要一个对象丢失,整个循环就会停止。

我尝试了这段代码进行非循环抓取,结果证明效果很好。 在这里,我排除了所有无法获得或不感兴趣的值。

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。 希望你能帮助我。 提前非常感谢。

【问题讨论】:

    标签: r web-scraping rvest


    【解决方案1】:

    我无法对此进行测试,因为您没有为真正的 reprex 提供 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())  
    } 
    

    【讨论】:

    • 我添加了手动执行代码所需的代码。使用您的修复程序时,我收到以下错误:```要替换的项目数不是替换长度的倍数```也许添加的代码可以帮助您解决我的问题 :) 提前非常感谢 -
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    相关资源
    最近更新 更多