2017-03-24 136 views
0

我想從頁面http://empres-i.fao.org/empres-i/2/obd?idOutbreak=225334&rss=t刮數據。這些數據包含在幾個似乎是使用javascript動態生成的表中。 html源代碼僅顯示容器(編號爲container1container2),但不包含實際的數據本身。我試着用下面的代碼phantomjs沒有評估javascript表

var url = 'http://empres-i.fao.org/empres-i/2/obd?idOutbreak=225334&rss=t'; 
var page = require('webpage').create(); 
page.open(url, function() { 
    console.log(page.content); 
    phantom.exit(); 
}); 

我的計劃是使用phantomjs刮評估HTML,然後提取我需要使用R.我知道數據使用phantomjs(2.1.1版本)。在Windows 10系統,R可能不是最好的工具,但這是我最熟悉的,也是我們公司使用的。

使用上面的代碼,我也只是得到未評估的源代碼與空容器,而不是數據(因爲我例如得到當我手動保存在Firefox的網頁)。爲什麼phantomjs不評估JavaScript?我能做些什麼來訪問數據?

我幾乎沒有webscaping的經驗,如果有人能指出我正確的方向,我會非常感激。正如丹澤爾華盛頓喜歡在費城說的那樣,「請給我解釋一下,好像我六歲那樣。」謝謝!

回答

2

不需要phantomjs(等)。只需使用隱藏的XHR API:

library(jsonlite) 

str(fromJSON("http://empres-i.fao.org/empres-i/obdj?id=225334&lang=EN")) 
## List of 31 
## $ outbreak    :List of 23 
## ..$ id      : int 225334 
## ..$ reportingDate   : chr "Mar 23, 2017" 
## ..$ markerIcon    : chr "domestic_red.png" 
## ..$ localityName   : chr "Cullman" 
## ..$ localityQuality   : chr "Centroid Admin2" 
## ..$ region     : chr "Americas" 
## ..$ country     : chr "United States of America" 
## ..$ admin1     : chr "Alabama" 
## ..$ latitude    : num 34.1 
## ..$ longitude    : num -86.9 
## ..$ status     : chr "Confirmed" 
## ..$ disease     : chr "Influenza - Avian" 
## ..$ serotypes    : chr "H7N9 LPAI" 
## ..$ source     : chr "National authorities" 
## ..$ speciesDescription  : chr "domestic, unspecified bird" 
## ..$ hasHumansAffected  : logi FALSE 
## ..$ humansAge    : int 0 
## ..$ speciesAffectedList  :'data.frame': 1 obs. of 5 variables: 
## .. ..$ id   : int 109831 
## .. ..$ idOutbreak : int 225334 
## .. ..$ animalType : chr "Domestic" 
## .. ..$ animalClass: chr "Birds" 
## .. ..$ species : chr "Unspecified bird" 
## ..$ laboratoryTestList  :'data.frame': 1 obs. of 6 variables: 
## .. ..$ id     : int 74563 
## .. ..$ idOutbreak   : int 225334 
## .. ..$ formattedResultDate: chr "22/03/2017" 
## .. ..$ diseaseTested  : chr "Influenza - Avian" 
## .. ..$ speciesTested  : chr "Unspecified bird" 
## .. ..$ result    : chr "Positive" 
## ..$ sibMatchedIsolateList : list() 
## ..$ formattedObservationDate: chr "23/03/2017" 
## ..$ formattedReportingDate : chr "23/03/2017" 
## ..$ idWorkspace    : chr "empresi" 
## $ strGeneralInfo  : chr "GENERAL INFO" 
## $ strDiseaseEventID  : chr "Disease Event ID" 
## $ strReportingDate  : chr "Reporting date" 
## $ strObservationDate : chr "Observation date" 
## $ strLocation   : chr "LOCATION" 
## $ strRegion    : chr "Region" 
## $ strAdmin1    : chr "Admin 1 (Country)" 
## $ strLocality   : chr "Locality" 
## $ strLatLong   : chr "Lat/Long" 
## $ strCoordsQuality  : chr "Quality of Coordinates" 
## $ strDisease   : chr "DISEASE" 
## $ strStatus    : chr "Status" 
## $ strSerotypes   : chr "Serotype" 
## $ strSource    : chr "Source" 
## $ strSpeciesAffected : chr "SPECIES AFFECTED" 
## $ strAnType    : chr "An.Type" 
## $ strAnClass   : chr "An.Class" 
## $ strSpecies   : chr "Species" 
## $ strAtRisk    : chr "At Risk" 
## $ strCases    : chr "Cases" 
## $ strDeaths    : chr "Deaths" 
## $ strDestroyed   : chr "Destroyed" 
## $ strSlaughtered  : chr "Slaughtered" 
## $ strTest    : chr "Test" 
## $ strResult    : chr "Result" 
## $ strResultDate   : chr "Result Date" 
## $ strDiseaseTested  : chr "Disease Tested" 
## $ strReferenceLaboratory: chr "Reference Laboratory" 
## $ strLaboratory   : chr "LABORATORIES" 
## $ strPageTitle   : chr "Disease Event Details" 
+0

哇,我不知道那件事。謝謝! – ikop