Разработаю парсер на Java.

Если вам необходимо получать товары с интернет-магазина, новости или статьи с сайта, одной из популярных технологий является парсинг HTML-страницы. Пишите парсеры на Java, чтобы получать необходимую информацию. В статье мы расскажем, как создавать парсеры без использования скриптов, используя простую HTML-структуру страницы.
Для начала нам нужно понять, какие есть виды парсинга HTML-страницы. В стандартный кворк входит парсер на сайт без использования скриптов, без вариации товаров, без адаптации под ваш формат. Простая HTML-структура – это когда страница заключена в одни и те же теги, например с шапкой с навигацией, контентом, футером и тд. Во всех вариациях структуры остаётся самое важное — структура и семантика тегов.
Например, если у вас есть страница товара с простой HTML-структурой, она может выглядеть так:
`
Описание товара
Цена и акции
Осталось в запасе
Производитель
Продавец
`
Чтобы выделить нужную нам информацию без использования скриптов, мы можем сначала посмотреть на структуру HTML страницы и выявить наиболее часто используемые теги и их атрибуты. Если страница простая, то обычно используемой информацией являются:
1) Название товара
2) Описание товара
3) Цена и акции
4) Осталось в запасе
5) Производитель
6) Продавец
На практике нам часто может понадобиться больше информации. Однако простая структура – это под собой понять, что у каждого сайта может быть своя форма, с которой мы не сможем легко работать.
Сначала создадим класс парсера, при помощи которого мы сможем проанализировать страницу и предоставить структуру данный, где ключом будет идти название и значение, где значение может быть цифрограммой из вида String.
«`java
public class SimpleParser{
private final String regexName = «(.*?)»;
public Map getMap(String html){
Pattern regex = Pattern.compile(regexName);
Matcher matcher = regex.matcher(html);
Map map = new HashMap();
while (matcher.find()) {
System.out.println(matcher.group(1) + «: » + matcher.group(2));
map.put(matcher.group(1).replaceFirst(«», «»), matcher.group(2));
}
System.out.println(map);
return map;
}
}
«`
А ниже показан пример кода, как вы можете использовать класс, который мы создали раньше для работы с HTML станиц.
«`java
public class Main {
public static void main(String[] args){
String url = «https://yandex.com»;
SimpleParser sp = new SimpleParser();
try {
URL oracle = new URL(url);
HttpURLConnection huc = (HttpURLConnection) oracle.openConnection();
huc.setRequestMethod(«GET»);
huc.connect();
int status = huc.getResponseCode();
System.out.println(«Status: » + status);
if (status > 200){
System.out.println(«Error: unexpected response code for GET request: » + status);
return;
}
BufferedReader in = new BufferedReader(new InputStreamReader(huc.getInputStream()), 1024 * 4);
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
} in.close();
System.out.println(response.toString());
sp.getMap(response.toString());
}
catch (IOException e) {
System.out.println(«Unexpected error for GET request: » + e);
}
}
}
«`
Для простой работы, данного метода с различными HTML структурами всегда можно подписать новую информацию согласно вашему заданию. Чтобы создать адаптацию, которая будет срабатывать хоть и с другими вариантами и форматом, может понадобиться тоже сложное решение, которое могло бы установить индивидуальный текст на основе имеющихся данных.
Развернемся специально, решив детальную версию данного проблемы с парсинга данных из разных страниц интернет магазинов, новостей с веб-сайта или блога.
Если простая структура не сработала, то нам нужно будет решить основную проблему структуры на нашей работе. В среднем, если структура имеющий определенные единичные закрывающие теги в каждом окне и каждой функции в нашем интерфейсе или форме.
В этом случае появляется возможность решить эту проблему двумя способами. Первый вариант состоит в том, что нам необходимо изменить наши HTML страницы под подписываемые данные или под существующий формат. Во втором варианте – использовать Java библиотеку, которая позволяет выполнять рендеринг с обеих сторон из HTML.
Рассмотрим пример того, что рендеринг должен выполнить на стороне используя Java библиотеку. Например, для того чтобы парсить интерфейс по заявлению при сдаче или получения задания между студентами и преподавателями на платформе 1C. На нем есть разделы,
1) поле или текстовое поле:
— при сдаче – это сдать на проверку;
— при получении — есть получение на проверку с вариантами сдачи.
2) checkbox:
— при сдаче – этодать или отработать на проверку;
— при получении – этодать, отказать или вернуть на корректировку.
3) конфигурационный вариант:
— при сдаче — оно не используется по соглашению между преподавателем и студентом.
— при получении для студента подписавшего или отказавшегося данные будут скачаны по единой системе.
Рендеринг будет выглядеть так:
Российский политехнический университет
Заявление об отработке 1 семестра
Приложенный образец отработки семестра – это представление всего выполненного кода, содержащего приложение которое решает задачу и решает поставленные задачи.
> Отработка семестра представлена ниже:
[CheckBox отработать]
[CheckBox сдать]
Отчет предлагается в виде видеоролика или PDF файла.
> Отчет для студента можно скачать по ссылке.
Год выпуска ____________.
Окончательная версия отчета может понадобиться до 4 уведомлений о проверке при сдаче отработки.
> Строка 1 _______________________ Дата ___/____/_____
> Строка 2 _______________________ Дата ___/____/_____
> Строка 3 _______________________ Дата ___/____/_____
> Строка 4 _______________________ Дата ___/____/_____
При отсутствии необходимости более длительного видео и большой PDF файлы, студентами могут дать ссылку на доступ к отработке.
> Инициативное отображение записи о выдаче доступа в систему:
«Об особенностях данного шага можно попросить ответить у индивидуального информированию между преподавателем и студентом с целью определить правильную стратегию.»)
Используют разные шаблоны конфигураций от сотрудников или студентов – у юриста есть свои конфигурации, такие же как и у секретаря – своя, так же, как у инженеров. Технология у всех разная.
Тогда парсинг данных будет выводить в поле или текстовое поле правильную конкретную информацию которые при работе парсера не будут подписывать одну и ту же информацию, то есть будет показана реальная разница во времени.
На примере, после получения отчета студентам на экране отображалось, на каких страницах данные отображались не правильные данные. С точностью до секунды показывалось количество секунд того, как длиннее выводит данные чем предприятие неисправности есть в наших данных с поле или дополнительным текстовым поле.
Но эта подпись, которая вошла, понятно видно на слайде — технологично в отличии от предыдущих классов и базы была основана на принципиально иной концепции и решения задачи при разработки данного решения.
И именно таких решений, когда парсер ищет данны об устройстве все-таки технологии приходят на помощь как база для изоляции технологий.
Для разных структур может понадобиться разработка отдельной технологии.

