2017-11-06 5 views
0

웹 페이지에서 데이터를 스크랩하면 일부 요소/값이 반환되지 않습니다.R : 웹 페이지 스크래핑시 누락 된 값

특히, 나는 rvest 패키지를 사용하여 스크랩합니다.

원하는 정보가 포함 된 웹 페이지는 https://azure.microsoft.com/en-us/pricing/details/virtual-machines/windows/입니다. 그러나 데이터를 스크랩하면 가격이있는 열은 "$ -"만 반환합니다.

샘플 코드 : 첫째 안양의

library(rvest) 

webpage <- read_html("https://azure.microsoft.com/en-us/pricing/details/virtual-machines/windows/") 
tbls <- html_nodes(webpage, "table") 

tbls_ls <- webpage %>% 
    html_nodes("table") %>% 
    .[1:(length(tbls)-2)] %>% 
    html_table() 

출력 :

> List of 22 $ :'data.frame': 7 obs. of 6 variables: ..$ Instance 
> : chr [1:7] "B1L" "B1S" "B2S" "B1MS" ... ..$ Cores     
> : int [1:7] 1 1 2 1 2 4 8 ..$ RAM         
> : chr [1:7] "0.50 GiB" "1.00 GiB" "4.00 GiB" "2.00 GiB" ... ..$ 
> Temporary Storage       : chr [1:7] "1 GiB" "2 
> GiB" "8 GiB" "4 GiB" ... ..$ Price         
> : chr [1:7] "$-" "$-" "$-" "$-" ... ..$ Prices with Azure Hybrid 
> Benefit1 (% savings): chr [1:7] "$-" "$-" "$-" "$-" ... 

나는이 특정 요소의 전체 값을 얻기 위해 무엇을 할 수 있는가?

답변

0

필터와 상관없이 가격 데이터가 하나입니다. 그래서 당신은 그 속성 값을 가져 와서 json을 파싱 할 필요가 있습니다.

library(rvest) 

webpage <- read_html("https://azure.microsoft.com/en-us/pricing/details/virtual-machines/windows/") 
tbls <- html_nodes(webpage, "table") 

webpage %>% 
    html_nodes("table") %>% 
    .[1:(length(tbls)-2)] %>% 
    html_table() 


ss <- webpage %>% html_nodes("table span.price-data ") %>% xml_attr('data-amount') 

lapply(ss,function(x){data.frame(jsonlite::fromJSON(x))}) 

샘플 출력 :

[[176]] 
    regional.asia.pacific.southeast regional.australia.east regional.canada.central regional.canada.east 
1       1.496     1.496     1.376    1.376 
    regional.europe.west regional.japan.east regional.united.kingdom.south regional.us.east.2 regional.usgov.virginia 
1    1.488    1.464       1.448    1.373     1.504 
    regional.us.west regional.us.west.2 
1   1.376    1.248 

[[177]] 
    regional.asia.pacific.southeast regional.australia.east regional.canada.central regional.canada.east 
1       4.464     4.464     4.224    4.224 
    regional.europe.west regional.japan.east regional.united.kingdom.south regional.us.east.2 regional.usgov.virginia 
1    4.448     4.4       4.368    4.365     4.48 
    regional.us.west regional.us.west.2 
1   4.224    3.968 

당신은 특정 값과 일치하고이에서 가격을해야합니다.

+0

감사합니다. 그것은 매력처럼 작동했습니다. 그러나 직감을 공유 할 수 있습니까? json 파일이 있다는 것을 감지 할 수없는 것 같습니다. 어디서 볼 수 있습니까? –

+0

아니요. json 파일이 없습니다. json 데이터 만 있습니다. 가격에 대해 긁힌 데이터가 표시되면 중괄호와 :가있는 중첩 된 데이터와 json 구조와 매우 유사한 키 - 값 쌍이 표시됩니다. – amrrs

+0

아, 이제 알겠습니다. 각 지역별 가격 시나리오 별 열을 원한다면 어떻게해야합니까? 즉, PriceScenarioA.RegionX, PriceScenarioA.RegionY, PriceScenarioB.RegionX, PriceScenarioB.RegionY 일종의 것입니까? –