在 rvest 中抓取位置数据
Scraping location data in rvest
我目前正在尝试从我使用 rvest 的网址列表中抓取 latitude/longitude 数据。每个 URL 都有一个带有特定位置的嵌入式 google 地图,但 url 本身并不显示 API 所采用的路径。
查看页面源代码时,我看到我要找的部分在这里:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var myLatlng = new google.maps.LatLng(43.805170,-70.722084);
var myOptions = {
zoom: 16,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.SATELLITE
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title:"F.E. Wood & Sons - Natural Energy"
});
现在,如果我能得到具有 LatLng(....) 输入的行,我就可以使用一些字符串解析操作来导出所有 URL 的纬度和经度值.
我编写了以下代码来获取我的数据:
require(rvest)
require(magrittr)
fetchLatLong<-function(url){
url<-as.character(url)
solNum<-html(url)%>%
html_nodes("#map_canvas")%>%
html_attr("script")
}
("map_canvas" 选择器是使用 selectorGadget 找到的;您可以查看整个源代码 here)。
我正在经历最糟糕的时光来阅读我想要的东西。我尝试了许多节点和节点组合,但无济于事。我玩过 phantom.js,但问题是它不是 js 渲染的 html 内容 我正在寻找:我正在寻找 API 查询输入,它被写成进入页面代码(或者,至少,在我的业余眼中似乎是)。
有人有什么建议吗?
这似乎有效:
library(rvest)
library(magrittr)
library(stringr)
pg <- html("http://biomassmagazine.com/plants/view/2285")
pg %>%
html_nodes("div.pad20 > script") %>%
extract2(2) %>%
html_text %>%
str_match_all("LatLng\(([[:digit:]\.\-]+),([[:digit:]\.\-]+)") %>%
extract2(1) %>%
extract(2:3) -> lat_lng
lat_lng
## [1] "43.805170" "-70.722084"
我目前正在尝试从我使用 rvest 的网址列表中抓取 latitude/longitude 数据。每个 URL 都有一个带有特定位置的嵌入式 google 地图,但 url 本身并不显示 API 所采用的路径。
查看页面源代码时,我看到我要找的部分在这里:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var myLatlng = new google.maps.LatLng(43.805170,-70.722084);
var myOptions = {
zoom: 16,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.SATELLITE
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title:"F.E. Wood & Sons - Natural Energy"
});
现在,如果我能得到具有 LatLng(....) 输入的行,我就可以使用一些字符串解析操作来导出所有 URL 的纬度和经度值.
我编写了以下代码来获取我的数据:
require(rvest)
require(magrittr)
fetchLatLong<-function(url){
url<-as.character(url)
solNum<-html(url)%>%
html_nodes("#map_canvas")%>%
html_attr("script")
}
("map_canvas" 选择器是使用 selectorGadget 找到的;您可以查看整个源代码 here)。
我正在经历最糟糕的时光来阅读我想要的东西。我尝试了许多节点和节点组合,但无济于事。我玩过 phantom.js,但问题是它不是 js 渲染的 html 内容 我正在寻找:我正在寻找 API 查询输入,它被写成进入页面代码(或者,至少,在我的业余眼中似乎是)。
有人有什么建议吗?
这似乎有效:
library(rvest)
library(magrittr)
library(stringr)
pg <- html("http://biomassmagazine.com/plants/view/2285")
pg %>%
html_nodes("div.pad20 > script") %>%
extract2(2) %>%
html_text %>%
str_match_all("LatLng\(([[:digit:]\.\-]+),([[:digit:]\.\-]+)") %>%
extract2(1) %>%
extract(2:3) -> lat_lng
lat_lng
## [1] "43.805170" "-70.722084"