2017-10-04 14 views
0

ないときにいくつかのページにはタグが欠落しているように私が値を抽出し、厳しい時間を過ごしていたデータをスクレイピング:結果-猫をRvest:要素が存在し

私はすでに、しかし、私はまだないです、この質問hereを訪問しましたデータをスクラップすることができます。

HTML:一部のページが結果、猫タグを持っていないとして、私は次のコードをしようとしています

<div class="result "> 
    <span class="result-txt"> 

     <span class="result-name"> 
      <a href="/some/value/">COMPANY_NAME</a> 
      <a class="result-icons" href="/some/value/COMPANY_NAME_/"> 
       <span title="Info" class="sprite sprite-info">Info</span> 
       <span title="Phone" class="sprite sprite-phone">Phone</span> 
      </a> 
     </span> 

     <em> 
      <a href="/some/value/">LOCATION</a> 
      <span> ADDRESS </span> 
     </em> 

     <span class="result-cats"> 
      <a href="/some/value/" title="CAT1">CAT1</a> 
      <a href="/some/value/" title="CAT2">CAT2</a> 
     </span> 

    </span> 
</div> 

は、しかし、それは私にエラーを与えます。従って、データフレームは、ベクトル長のミスマッチを有する

コード

library(rvest) 
library(XML) 
library(stringi) 

df <- data.frame(CompanyName = NULL, CompanyLink = NULL, Address = NULL, cats = NULL) 

for(i in 1:100){ 

    print(paste("Page: ", i, sep = "")) 

    url <- "url.com" 
    page <- read_html(url) 

    CompanyNameNode <- html_nodes(page,'.result-name a:nth-child(1)') 
    CompanyName <- html_text(CompanyNameNode) 
    CompanyLink <- html_attr(CompanyNameNode, 'href') 

    Address <- html_text(html_nodes(page,'.result-txt em')) 
    Address <- gsub("[\r\n]", "", Address) 

    cats <- html_text(html_nodes(page,'.result-cats')) 
    cats <- stri_trim(cats) 
    cats <- gsub("[\r\n]", ", ", cats) 

    df <- rbind(df, data.frame(CompanyName = CompanyName, 
          CompanyLink = CompanyLink, 
          Address = Address, 
          cats = cats)) 

} 

UPDATE:問題は

pg <- html_nodes(page,'.result-txt') 
cats <- NULL 

for(j in 1:length(pg)){ 
    cats[j] <- ifelse(length(html_text(html_nodes(pg[j],'.result-cats')))==0, 
        NA, 
        html_text(html_nodes(pg[j],'.result-cats'))) 
} 

cats <- stri_trim(cats) 
cats <- gsub("[\r\n]", ", ", cats) 

答えて

1

次のコード

pg <- html_nodes(page,'.result-txt') 
cats <- NULL 

for(j in 1:length(pg)){ 
    cats[j] <- ifelse(length(html_text(html_nodes(pg[j],'.result-cats')))==0, 
        NA, 
        html_text(html_nodes(pg[j],'.result-cats'))) 
} 

cats <- stri_trim(cats) 
cats <- gsub("[\r\n]", ", ", cats) 
を使用して問題を解決し、以下のコードを使用して解決
関連する問題