2017-02-09 3 views
1

Я пытаюсь очистить 'http://www.phl.org/Pages/Flight-Information.aspx#/Arrivals' веб-страницу в R, чтобы получить расписание прибытий (а затем, в конечном счете, отправление) полетов в международном аэропорту Филадельфии. Это код, который я написал до сих пор:web scraping aspx веб-страница с R

require("rvest") 
require("dplyr") 

url1 <- "http://www.phl.org/Pages/Flight-Information.aspx#/Arrivals" 
url2 <- '//*[@id="ctl00_pageWrapper"]/main/div[3]/table' 

Trial_data <- url1 %>% read_html() %>% html_nodes(xpath=url2) %>% html_table() %>% data.frame() 

Однако это скребет только заголовки таблицы, а не сама таблица данных. Я проверил элементы веб-страницы с HTML-кода веб-сайта и использовал Xpath в своем скрипте. В качестве пробной версии я использовал один и тот же фрагмент кода, чтобы очистить таблицу википедии, и он работал отлично. Я чувствую, что проблема связана с веб-страницей .aspx.

действительно оценил бы любую помощь по этому поводу!

+1

Насколько я вижу, содержимое таблицы динамически заполняется с помощью AngularJs, поэтому эти данные могут быть недоступны без запуска и получения результата вызова AJAX. – kieraf

+1

rvest просто захватывает HTML, поэтому данные не загружаются. Вы можете использовать RSelenium для загрузки страницы (запуска любых необходимых скриптов в процессе), а затем rvest для синтаксического анализа, но это больше работает. Однако, учитывая эти конкретные данные, я уверен, что есть API где-то, который предоставляет эти же данные в более удобном для использования формате, поэтому немного поиска может быть лучшим следующим шагом. – alistaire

+0

[Вот API.] (Https://github.com/CityOfPhiladelphia/phl-airport-data) – alistaire

ответ

-1

Замечания выше верны, код html заполняется динамически, поэтому библиотека rvest не будет работать. Если вы загружаете веб-страницу с включенными инструментами разработчика и просматриваете загруженные файлы, есть несколько файлов типа XHR. Если вы изучите эти файлы, то этот файл, который называется FlightTracker.ashx, является файлом JSON, содержащим запрашиваемую информацию.

После того, как файл и завитка, это определить, что это просто вопрос создания запроса HTTR и разбор файла JSON:

library(httr) 
library(jsonlite) 

url<-'http://www.phl.org/_layouts/15/Fuseideas.PHL.SharePoint/FlightTracker.ashx?dir=D' 
flightdata<-GET(url) 

output<- content(flightdata, as="text") %>% fromJSON(flatten=FALSE) 

FYI: Вы можете посмотреть на этот файл: «http://www.phl.org/Style%20Library/PHL/Scripts/Angular/iata-data.jsn», который содержит информацию об аббревиатурах, названиях и ссылках авиакомпаний и аэропортов.

+0

спасибо за ваш ответ, код работал, и это действительно помогло мне !! Я все еще не мог найти файл FlightTracker.ashx. Я также вижу, что URL-адрес немного отличается от того, который я использовал. Можете ли вы сообщить мне, как вам удалось найти URL-адрес и файл .ashx? –

+0

Откройте нужную веб-страницу. Названия меню и опций будут различаться в зависимости от того, какой браузер вы используете. Затем, открыв страницу, включите опцию веб-инспектора (в меню инструментов разработчика), выберите вкладку «Сеть», а затем перезагрузите веб-страницу. В сетевом теге будут перечислены все файлы, связанные с веб-страницей: html, css, js и json. Тогда вам нужно посмотреть на каждый файл, чтобы найти ваши данные. – Dave2e