【问题标题】:Scraping location data in rvest在 rvest 中抓取位置数据
【发布时间】:2015-08-23 15:02:20
【问题描述】:

我目前正在尝试从使用 rvest 的 url 列表中抓取纬度/经度数据。每个 URL 都有一个带有特定位置的嵌入式谷歌地图,但 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 查询输入,它被写入页面代码(或者,至少,在我的业余爱好者看来是)。

有人有什么建议吗?

【问题讨论】:

    标签: javascript r web-scraping scraper rvest


    【解决方案1】:

    这似乎有效:

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      • 2018-02-07
      • 2018-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多