2017-08-03 3 views
0

問題:rvestを使用して、私が必要とする情報のブロックを、ファントムjsでレンダリングしたHTMLページから見つけることができないようです。ほぼすべてのフォーマットを試しましたが、html_nodeを取得して正しいブロックを取得できないようです。ファントムをHTMLをRにレンダリングする

ファントムからレンダリングされたHTML:私は完全に希望のコードブロックをしないのです車ベクトルを検査するとき、私は、しかし、R

library(rvest) 
library(stringr) 
library(plyr) 
library(dplyr) 
library(ggvis) 
library(knitr) 
library(tidyverse) 

cars <- read_html("my file.html") %>% 
    html_nodes("div") %>% 
    html_text() 

でやっていること

<div class="page"> 

<div class="main-header">  
</script> 

    <div id="listing-703036966" class="shop-srp-listings__listing"> 
     <div class="card listing-row--search hide-fade"> 

      <div class="listing-row__main"> 
       <div class="listing-row__image"> 

        <div class="media-count shadowed"> 
         <a href="/vehicledetail/detail/703036966/overview/" target="_self" class="media-count--photo" data-goto-vdp="703036966" data-standard-link="md-thumb"> 
          25 Photos 
         </a> 

          <a href="/vehicledetail/detail/703036966/overview/" target="_self" class="media-count--video" data-goto-vdp="703036966" data-standard-link="md-thumb"> 
           1 Video 
          </a> 
        </div> 

        <a href="/vehicledetail/detail/703036966/overview/" target="_self" class="gray-bg listing-row__photo" data-goto-vdp="703036966" data-standard-link="md-thumb"> 
         <img alt="New 2018 BMW 750 i" src="https://www.cstatic-images.com/phototab/e/1/4/e2/f87fb57ec51cab4f57cbaeb9f9f.jpg" onload="window.performance.mark('serverSideFirstPhotoLoaded')"> 
        </a> 
        <div class="compare-srp"> 
         <div class="listing-row__save"> 
          <a id="703036966" class="switch-favorite unsaved saveVehicleHeart compare-switch-favorite" savedfeatureinstance="" vehicle="{&quot;listingId&quot;:703036966,&quot;mkId&quot;:20005,&quot;mkNm&quot;:&quot;BMW&quot;,&quot;mdId&quot;:20536,&quot;mdNm&quot;:&quot;750&quot;,&quot;trimId&quot;:25905,&quot;trimName&quot;:&quot;i&quot;,&quot;modelYearId&quot;:35797618,&quot;modelYear&quot;:2018,&quot;stkTyp&quot;:&quot;New&quot;,&quot;state&quot;:&quot;NC&quot;,&quot;zipcode&quot;:&quot;27107&quot;}" cars-common-omniture-custom="" omniture-events=""> 
           <div class="save-icon-wrapper"> 
            <div class="cui-icon icon-heart-line"> 
             <svg width="16" height="16" class="icon-image"> 
              <use xlink:href="#cui-icon-heart-outline"></use> 
             </svg> 
            </div> 

            <div class="cui-icon icon-heart"> 
             <svg width="16" height="16" class="icon-image"> 
              <use xlink:href="#cui-icon-heart-fill"></use> 
             </svg> 
            </div> 
           </div> 

           <p class="saved-label">Save</p> 
          </a> 
         </div> 
         <div class="compare-button" data-compare-listing="703036966"> 
          <div class="compare-icon-wrapper"> 
           <div class="cui-icon icon-plus-sign"> 
            <svg width="16" height="16" class="icon-plus-sign"> 
             <use xlink:href="#cui-icon-plus-sign"></use> 
            </svg> 
           </div> 
           <div class="cui-icon icon-checkmark"> 
            <svg width="16" height="16" class="icon-checkmark"> 
             <use xlink:href="#cui-icon-checkmark"></use> 
            </svg> 
           </div> 
          </div> 
          <p class="compare-button__label compare">Compare</p> 
          <p class="compare-button__label added">Added</p> 
         </div> 
        </div> 
       </div> 

など

これは:

<a id="703036966" class="switch-favorite unsaved saveVehicleHeart   compare-switch-favorite" savedfeatureinstance="" vehicle=". {&quot;listingId&quot;:703036966,&quot;mkId&quot;:20005,&quot;mkNm&quot;:&quot;BMW&quot;,&quot;mdId&quot;:20536,&quot;mdNm&quot;:&quot;750&quot;,&quot;trimId&quot;:25905,&quot;trimName&quot;:&quot;i&quot;,&quot;modelYearId&quot;:35797618,&quot;modelYear&quot;:2018,&quot;stkTyp&quot;:&quot;New&quot;,&quot;state&quot;:&quot;NC&quot;,&quot;zipcode&quot;:&quot;27107&quot;}" cars-common-omniture-custom="" omniture-events=""> 

しかし、それは決して使用可能な形式に変換されず、私が試してみるさまざまなノード(div、p、span)を失います。

アイデア?

答えて

1

括弧で囲まれたコンテンツを1つのノードから解析することを検討しているようです。 の場合:"vehicle = '{" listingId ":703036966、..."、出典:"id.703036966 saveVehicleHeart"のノードから。

このノードには、HTMLブラウザでレンダリングするテキストが含まれていないため、html_text()コマンドを使用するとどこも表示されません。代わりに、ノードのコードを文字列として格納して、関心のあるセクションを解析することができます。

1.ノードの文字列を取得します。ノードへのいくつかの可能なCSS経路のうちの1つは、ある括弧内のコンテンツ2.Extract '.saveVehicleHeart'

library(rvest) 
library(stringr) 
library(dplyr) 
car_html <- read_html("my file.html") 
cars <- as.character(html_node(car_html, css = '.saveVehicleHeart')) 

"{}"

cars <- cars %>% 
str_match(., "\\{.*?\\}") %>% ## Extract everything between the first "{" and the subsequent "}" 
gsub("\\{|\\}", "", .) ## Remove the characters "{" and "}" 

3.ボーナス。素敵なデータフレームにしましょう。あなたはこれを求めていませんでしたが、参考になるかもしれません。

df_cars <- cars %>% 
    cbind(read.table(text = ., sep = (','))) %>% 
    t() %>% 
    as_data_frame() %>% 
    .[-1,] %>% ## The first row contains the original unparsed string. We drop it. 
    separate(., V1, into = c("Variable", "Value"), sep = "\\:") 
df_cars 

# A tibble: 12 × 2 
     Variable  Value 
*  <chr>  <chr> 
1 listingId 703036966 
2   mkId  20005 
3   mkNm  BMW 
4   mdId  20536 
5   mdNm  750 
6  trimId  25905 
7  trimName   i 
8 modelYearId 35797618 
9 modelYear  2018 
10  stkTyp  New 
11  state  NC 
12  zipcode  27107 
+0

"フルHTML"とは、投稿したもの、または複数の車の投稿を含むさらに大きなHTMLを指していますか? –

+0

私はそれを考え出しました.html_nodeとhtml_nodes。再度、感謝します!応答は完璧です – MDEWITT

+0

ありがとうございます。それが助けてくれてうれしい。 –

関連する問題