Сбор данных о местоположении в rvest

В настоящее время я пытаюсь очистить данные широты / долготы из списка URL-адресов, которые у меня есть, используя rvest. Каждый 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; вы можете просмотреть весь исходный текст здесь).

У меня худшее время, чтобы прочитать то, что мне нужно. Я пробовал много узлов и комбинаций узлов, но безрезультатно. Я играл с phantom.js, но проблема в том, что это не js-рендеринг html-контент, который мне нужен: я ищу ввод запроса API, который записан в код страницы (или, по крайней мере, на мой любительский глаз кажется).

Есть ли у кого-нибудь совет?


person jtexnl    schedule 09.06.2015    source источник


Ответы (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"
person hrbrmstr    schedule 09.06.2015