1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ysc-HtmlExtractor

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 23:25 51dea88

HtmlExtractor — это компонент, основанный на шаблонах и реализованный на Java, который предназначен для точного извлечения структурированной информации из веб-страниц. Он сам по себе не содержит функций краулера, но может быть вызван краулером или другими программами для более точного извлечения информации о структуре веб-страницы.

HtmlExtractor разработан для использования в крупномасштабных распределённых средах и использует архитектуру «главный-подчиненный». Главный узел отвечает за поддержание правил извлечения, а подчиненные узлы запрашивают правила извлечения у главного узла. Когда происходит изменение в правилах извлечения, главный узел активно уведомляет подчиненные узлы, что позволяет реализовать динамическое обновление после изменения правил извлечения.

Как использовать?

Для использования SeleniumHtmlFetcher необходимо установить драйверы:

  • FirefoxDriver: brew install geckodriver.
  • ChromeDriver: 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 или выражение извлечения не удалось извлечь, извлечение считается неудачным.

Как использовать HtmlExtractor для точного извлечения структурированной информации на основе шаблонов?

Метод централизованного использования на одном компьютере:

//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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/ysc-HtmlExtractor.git
git@api.gitlife.ru:oschina-mirror/ysc-HtmlExtractor.git
oschina-mirror
ysc-HtmlExtractor
ysc-HtmlExtractor
master