2

私はいくつかのウェブスクレイピングを行っています。

actual_price を取得し、old_price を別の列に入れる必要があります。

問題は、新しい製品であるため、すべての製品に old_price 要素があるわけではないことです。

そして、それらは同じ長さではないため、data.frame に結合できません。

商品にold_priceがない場合、セルにNAを入れたいです。

Rvestでそれを行う方法はありますか?

期待される結果:

Product      PriceNew        PriceOld
  A          2300.00            NA
  B          9.90              49.00
  C          1299.00           2499.00
  D          829.00            1499.00
  

![ここに画像の説明を入力][1]

ご覧のとおり、ここに例があります。1 つの製品には実際の価格と古い価格があり、もう 1 つの製品にはありません。

私はこれをやっています:

Celulares_Telefonia_Precio_actual <- html(page_source[[1]]) %>% 
                            html_nodes(".product-itm-price-new") %>%
                            html_text()

Celulares_Telefonia_Precio_antiguo <- html(page_source[[1]]) %>% 
                            html_nodes(".product-itm-price-old") %>%
                            html_text()

すべての製品に価格が設定されていますが、すべての製品に古い価格が設定されているわけではありません。したがって、新しい価格のみの製品については、Old_Price 列に NA を入れたいと思います。

  length(Celulares_Telefonia_Precio_actual)  gives 120

  length(Celulares_Telefonia_Precio_antiguo)  gives 114 

編集1:

状況を再現するコード。Celulares セクション用です。

Gist を実行してデータを取得してください:

library(devtools)
source_gist("https://gist.github.com/OmarGonD/b70b712327d7e479f2c7")

編集2:

容器全体(商品ブランド、商品名、新価格、旧価格)を調べてみました。SelectorGadget を使用すると、コンテナー全体が次のようになっていることがわかります"#catalog-items"(間違っている場合は修正してください)。

だから私は使用します:

    Celulares_Telefonia_Catalogo <- html(page_source[[1]]) %>%
  html_nodes("#catalog-items")

しかし、質問にあるように、新旧の価格を抽出する方法がわかりません。

どんなヒントでも大歓迎です。

4

1 に答える 1

0
#This may be one solution
library(rvest)
kk1<-html("http://www.linio.com.co/tecnologia/celulares-telefonia-gps/")%>%
   html_nodes(".product-item-price")%>%
   html_text()
#remove spaces
kk2<-gsub("\\s+","",kk1)
#strsplit kk2
kk3<-strsplit(kk2,"\\$|\\-|Nuevo")
#convert to dataframe
kk4<-do.call(rbind,kk3)
kk5<-kk4[,2:3] # column 2 gives you new and column 3 gives you old (blank for no old price)

head(kk5)
     [,1]        [,2]       
[1,] "750.000"   "549.900"  
[2,] "999.900"   "579.900"  
[3,] "2.019.900" "1.729.900"
[4,] "2.399.900" "2.299.900"
[5,] "1.899.000" "1.099.900"
[6,] "2.500.000" "1.799.900"
于 2015-05-04T01:09:32.547 に答える