HtmlExtractor — это компонент, основанный на шаблонах и реализованный на Java, который предназначен для точного извлечения структурированной информации из веб-страниц. Он сам по себе не содержит функций краулера, но может быть вызван краулером или другими программами для более точного извлечения информации о структуре веб-страницы.
HtmlExtractor разработан для использования в крупномасштабных распределённых средах и использует архитектуру «главный-подчиненный». Главный узел отвечает за поддержание правил извлечения, а подчиненные узлы запрашивают правила извлечения у главного узла. Когда происходит изменение в правилах извлечения, главный узел активно уведомляет подчиненные узлы, что позволяет реализовать динамическое обновление после изменения правил извлечения.
Для использования SeleniumHtmlFetcher необходимо установить драйверы:
brew install geckodriver
.brew install chromedriver
.HtmlExtractor состоит из двух подпроектов: html-extractor и html-extractor-web. Html-extractor реализует логику извлечения данных и является подчиненным узлом, а html-extractor-web предоставляет веб-интерфейс для управления правилами извлечения и является главным узлом. HtmlExtractor представляет собой jar-пакет, который можно импортировать через maven:
<dependency>
<groupId>org.apdplat</groupId>
<artifactId>html-extractor</artifactId>
<version>1.1</version>
</dependency>
Html-extractor-web представляет собой war-пакет, который необходимо развернуть на сервере Servlet/Jsp. В каталоге html-extractor-web можно запустить mvn jetty:run
, чтобы запустить сервер Jetty, после чего можно открыть браузер и посетить http://localhost:8080/html-extractor-web/api/
для просмотра собственных правил.
Обратите внимание: страница считается успешно извлечённой только в том случае, если все пути CSS и выражения извлечения успешно извлечены. Если хотя бы один путь CSS или выражение извлечения не удалось извлечь, извлечение считается неудачным.
//1、Создание правил извлечения List urlPatterns = new ArrayList<>(); //1.1、Создание шаблона URL UrlPattern urlPattern = new UrlPattern(); urlPattern.setUrlPattern("http://money.163.com/\\d{2}/\\d{4}/\\d{2}/[0-9A-Z]{16}.html"); //1.2、Создание HTML-шаблона HtmlTemplate htmlTemplate = new HtmlTemplate(); htmlTemplate.setTemplateName("网易财经频道"); htmlTemplate.setTableName("finance"); //1.3、Связывание шаблона URL и HTML urlPattern.addHtmlTemplate(htmlTemplate); //1.4、Создание пути CSS CssPath cssPath = new CssPath(); cssPath.setCssPath("h1"); cssPath.setFieldName("title"); cssPath.setFieldDescription("标题"); //1.5、Связывание пути CSS с шаблоном htmlTemplate.addCssPath(cssPath); //1.6、Создание другого пути CSS cssPath = new CssPath(); cssPath.setCssPath("div#endText"); cssPath.setFieldName("content"); cssPath.setFieldDescription("正文"); //1.7、Связывание другого пути CSS с шаблоном htmlTemplate.addCssPath(cssPath); //Можно аналогичным образом создать несколько шаблонов URL urlPatterns.add(urlPattern);
//2、Получение объекта правил извлечения ExtractRegular extractRegular = ExtractRegular.getInstance(urlPatterns); //Обратите внимание: можно динамически изменять правила извлечения с помощью следующих трёх методов //extractRegular.addUrlPatterns(urlPatterns); //extractRegular.addUrlPattern(urlPattern); //extractRegular.removeUrlPattern(urlPattern.getUrlPattern());
//3、Получение инструмента извлечения HTML HtmlExtractor htmlExtractor = new DefaultHtmlExtractor(extractRegular);
//4、Извлечение веб-страницы String url = "http://money.163.com/08/1219/16/4THR2TMP002533QK.html"; HtmlFetcher htmlFetcher = new JSoupHtmlFetcher(); String html = htmlFetcher.fetch(url); List extractResults = htmlExtractor.extract(url, html);
//5、Вывод результатов int i = 1; for (ExtractResult extractResult : extractResults) { System.out.println((i++) + "、Веб-страница " + extractResult.getUrl() + " результаты извлечения"); if(!extractResult.isSuccess()){ System.out.println("Извлечение не удалось:"); for(ExtractFailLog extractFailLog : extractResult.getExtractFailLogs()){ System.out.println("\turl:"+extractFailLog.getUrl()); System.out.println("\turlPattern:"+extractFailLog.getUrlPattern()); System.out.println("\ttemplateName:"+extractFailLog.getTemplateName()); System.out.println("\tfieldName:"+extractFailLog.getFieldName()); System.out.println("\tfieldDescription:"+extractFailLog.getFieldDescription()); System.out.println("\tcssPath:"+extractFailLog.getCssPath()); if(extractFailLog.getExtractExpression()!=null) { System.out.println("\textractExpression:" + extractFailLog.getExtractExpression()); } } continue; } Map<String, List> extractResultItems = extractResult.getExtractResultItems(); for(String field : extractResultItems.keySet()){ List values = extractResultItems.get(field); if(values.size() > 1){ int j=1;
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )