
Парсинг сайтов уже был ранее, но тут вопрос принципиальный. Отдыхали на природе, рыбачили в Подмосковье, место было выбрано впервые, поблизости был аэропорт, самолеты летали туда обратно. Стало интересно, какое же количество самолетов прибыло в Москву за время проведенное на рыбалке.
Задание:
Распарсить сайт авиакомпании. Залогировать в файл всю доступную информацию относительно прибывших авиарейсах за период времени.
Использовал:
Jsoup | log4j |
Заходим на сайт авиакомпании, и фильтруем необходимое нам время прибытия самолетов.
Сохранил html страничку, что бы всегда была возможность парсить с постоянными данными.
Инициализация Logger и настройки в log4j.xml
public static final Logger LOGGER = LogManager.getLogger(FlightHistory.class); |
<File name="MyFile" fileName="all.log" immediateFlush="true" append="false"> <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </File> |
Читаем файл и парсим его в Document doc.
private static final String FILEPATH = "D:\\arrival.html"; File input = new File(FILEPATH); Document doc = Jsoup.parse(input, "utf-8"); |
В цикле разбираем коллекцию.
Elements allflightsblocks = doc.select("#table > tbody > tr.vat"); for (Element allflightsblock : allflightsblocks) { String plannedTime = allflightsblock.select("td:nth-child(2)").text().replace("May ", "May 2018 "); |
Работа с датой – SimpleDateFormat патерн.
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy hh:mm", Locale.ENGLISH); Date date = formatter.parse(plannedTime); |
Логирование в файл.
LOGGER.info("Planned time: " +plannedTime); LOGGER.info("Actual time: " +actualTime); |
Вывод в консоль:
10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - -------- 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Upper time: 15 minutes 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Planned time: 26 May 2018 14:55 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Actual time: 26 May 2018 14:40 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Flight number: U6 144 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Departure airport: ANAPA 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Status : Arrived Bags delivered 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - -------- 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Upper time: 45 minutes 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Planned time: 26 May 2018 15:00 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Actual time: 26 May 2018 14:15 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Flight number: JL 421 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Departure airport: TOKYO 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Status : Arrived Bags delivered 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - --------------------------------- 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - All flights: 161 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Arrived flights: 157 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Cancelled flights: 4 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Delay fly: 65 airFlights 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - Total delay : -899 minutes 10:23:41.811 [main] INFO ru.gotoqa.FlightHistory - --------------------------------- |
Ссылка на GitHub:
Github Flight Radar Project