从在线地图抓取信息



我正试图从这个网页的地图上抓取信息http://fhi360odk.org/kdesktoplb_2/

该网页有利比里亚所有公立学校的信息/位置。基本上,我想要学校的位置加上如果你点击一个特定的学校会显示的信息。

我以前用R做过网页抓取,但是从网页中的源代码中我找不到学校的位置。

我能算出来。问题是实际的学校数据是在一个框架,有差异的源代码!

下面是我的代码
rm(list=ls())
#install.packages("RCurl")
#install.packages("XML")
require(RCurl)
require(XML)
require(stringr)
require(foreign)

sources <- c('http://fhi360odk.org/kdesktopLB_2/EarthMapping.php#')
appUrl <- getURL(sources)
Markers=gregexpr("addMarker",appUrl)
Markers=Markers[[1]]
Markers=Markers[-1]
Markers=c(Markers,tail(Markers,1)+184)

Escuelas=data.frame(Lat=NA,Long=NA,Code=NA,Date=NA,EMIS=NA,Name=NA,Status=NA,County=NA,District=NA,Address=NA,Mobile=NA,Ownership=NA,
MaleStudents=NA,FemaleStudents=NA,TotalStudents=NA,
PermanentClassrooms=NA,SemiPermanentClassrooms=NA,RoofOnlyClassrooms=NA,TentClassrooms=NA,OpenAirClassrooms=NA,OtherClassrooms=NA,
MaleTeacher=NA,FemaleTeachers=NA,TotalTeachers=NA,stringsAsFactors =F)

for(i in 1:(length(Markers)-1)){
#for(i in 1:10){
string=substr(appUrl,Markers[i],Markers[i+1]-2)
matches=gregexpr ("\d+\.\d+", string)
Location=regmatches(string, matches)
Lat=as.numeric(Location[[1]][1])
Long=as.numeric(Location[[1]][2])
matches=gregexpr ("cod=\d+", string)
Codigo=regmatches(string, matches)
Codigo=as.numeric(gsub("cod=","",Codigo))
InfoColegio=getURL(paste0("http://fhi360odk.org/kdesktopLB_2/ident_gis.php?db=liberia_gis_v4&cod=",Codigo,"&nivel=null"))
Tabla=readHTMLTable(InfoColegio,header=F)
Tabla2=readHTMLTable(InfoColegio,header=T)
Escuelas=rbind(Escuelas,as.character(c(Lat,Long,Codigo,as.character(Tabla[[1]][,2]),as.numeric(as.character(unlist(Tabla2[[2]]))),as.numeric(as.character(Tabla[[3]][,2])),as.numeric(as.character(unlist(Tabla2[[4]]))))))
}
Escuelas=Escuelas[-1,]
save(Escuelas,file="C:/Users/Mauricio/Dropbox/Liberia/EMIS2015_RAW.Rdata")
Escuelas$Lat=as.numeric(Escuelas$Lat)
Escuelas$Long=as.numeric(Escuelas$Long)
Escuelas$Code=as.numeric(Escuelas$Code)
Escuelas$Date=as.Date(Escuelas$Date,format="%m %d %Y")
Escuelas$EMIS=as.numeric(Escuelas$EMIS)
Escuelas$MaleStudents=as.numeric(Escuelas$MaleStudents)
Escuelas$FemaleStudents=as.numeric(Escuelas$FemaleStudents)
Escuelas$TotalStudents=as.numeric(Escuelas$TotalStudents)
Escuelas$PermanentClassrooms=as.numeric(Escuelas$PermanentClassrooms)
Escuelas$SemiPermanentClassrooms=as.numeric(Escuelas$SemiPermanentClassrooms)
Escuelas$RoofOnlyClassrooms=as.numeric(Escuelas$RoofOnlyClassrooms)
Escuelas$TentClassrooms=as.numeric(Escuelas$TentClassrooms)
Escuelas$OpenAirClassrooms=as.numeric(Escuelas$OpenAirClassrooms)
Escuelas$OtherClassrooms=as.numeric(Escuelas$OtherClassrooms)
Escuelas$MaleTeacher=as.numeric(Escuelas$MaleTeacher)
Escuelas$FemaleTeachers=as.numeric(Escuelas$FemaleTeachers)
Escuelas$TotalTeachers=as.numeric(Escuelas$TotalTeachers)
Escuelas$Name[Escuelas$Name==""]=NA
Escuelas$Status[Escuelas$Status==""]=NA
Escuelas$County[Escuelas$County==""]=NA
Escuelas$District[Escuelas$District==""]=NA
Escuelas$Address[Escuelas$Address==""]=NA
Escuelas$Mobile[Escuelas$Mobile==""]=NA
Escuelas$Ownership[Escuelas$Ownership==""]=NA

save(Escuelas,file="C:/Users/Mauricio/Dropbox/Liberia/EMIS2015.Rdata")
write.dta(Escuelas,file="C:/Users/Mauricio/Dropbox/Liberia/EMIS2015.dta")

最新更新