phantomjs没有评估javascript表

时间:2017-03-24 06:21:05

标签: javascript r web-scraping phantomjs

我正在尝试从页面http://empres-i.fao.org/empres-i/2/obd?idOutbreak=225334&rss=t中删除数据。数据包含在几个似乎使用javascript动态生成的表中。 html源代码仅显示容器(id container1container2),但不显示实际数据本身。我尝试使用以下代码在Windows 10系统上使用phantomjs(版本2.1.1。)

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提取我需要的数据。我知道,R可能不是最好的工具,但它是我最熟悉的和我们在我的公司。

使用上面的代码,我也只是使用空容器获取未评估的源代码而不是数据(例如,当我在firefox中手动保存网页时获取)。为什么phantomjs没有评估javascript?我该怎么做才能访问数据?

我对网络平台很少有经验,如果有人能指出我正确的方向,我真的很感激。正如丹泽尔华盛顿喜欢在费城所说的那样,请向我解释,好像我是一个六岁的孩子一样。谢谢!

1 个答案:

答案 0 :(得分: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"