Как вы получаете текст с веб-страницы (Java)? - PullRequest
3 голосов
/ 16 сентября 2008

Я планирую написать простое приложение J2SE для сбора информации из нескольких веб-источников.

Самым сложным, на мой взгляд, является извлечение значимой информации из веб-страниц, если она недоступна в виде каналов RSS или Atom. Например, я могу захотеть извлечь список вопросов из stackoverflow, но мне совершенно не нужно это огромное облако тегов или панель навигации.

Какую технику / библиотеку вы бы посоветовали?

Обновление / примечание

  • Скорость не имеет значения - если она может анализировать около 5 МБ HTML менее чем за 10 минут.
  • Это может быть очень просто.

Ответы [ 10 ]

3 голосов
/ 16 сентября 2008

Вы можете использовать HTMLParser (http://htmlparser.sourceforge.net/)in в сочетании с URL # getInputStream () для анализа содержимого HTML-страниц, размещенных в Интернете.

2 голосов
/ 16 сентября 2008

Если вы хотите воспользоваться какой-либо структурной или семантической разметкой, вы можете изучить возможность преобразования HTML в XML и использования XQuery для извлечения информации в стандартной форме. Взгляните на эту статью IBM developerWorks , где приведен типичный код, приведенный ниже (они выводят HTML, что, конечно, не требуется):

<table>
{
  for $d in //td[contains(a/small/text(), "New York, NY")]
  for $row in $d/parent::tr/parent::table/tr
  where contains($d/a/small/text()[1], "New York")
  return <tr><td>{data($row/td[1])}</td> 
           <td>{data($row/td[2])}</td>              
           <td>{$row/td[3]//img}</td> </tr>
}
</table>
2 голосов
/ 16 сентября 2008

Вы можете посмотреть, как это делает httpunit. Они используют несколько приличных парсеров html, один - nekohtml. Что касается получения данных, вы можете использовать то, что встроено в JDK (httpurlconnection), или использовать Apache

http://hc.apache.org/httpclient-3.x/

0 голосов
/ 30 января 2011

Проверьте это http://www.alchemyapi.com/api/demo.html

Они дают довольно хорошие результаты и имеют SDK для большинства платформ. Не только извлечение текста, но и анализ ключевых слов и т. Д.

0 голосов
/ 16 сентября 2008

Рассматривали ли вы возможность использования каналов RSS / Atom? Зачем очищать контент, когда он обычно доступен для вас в формате расходных материалов? Существуют библиотеки, доступные для использования RSS практически на любом языке, о котором вы только можете подумать, и это будет в гораздо меньшей степени зависеть от разметки страницы, чем попытка очистки содержимого.

Если вы абсолютно ДОЛЖНЫ проверять содержимое, поищите в разметке микроформаты , большинство блогов (особенно блогов на основе WordPress) по умолчанию имеют это. Существуют также библиотеки и парсеры для поиска и извлечения микроформатов с веб-страниц.

Наконец, службы / приложения агрегирования, такие как Yahoo Pipes , могут выполнить эту работу за вас, не изобретая колесо.

0 голосов
/ 16 сентября 2008

Если ваши "веб-источники" - это обычные веб-сайты, использующие HTML (в отличие от структурированного XML-формата, такого как RSS), я бы посоветовал взглянуть на HTMLUnit .

Эта библиотека, хотя и предназначена для тестирования, является действительно универсальным "браузером Java". Он построен на основе Apache httpclient, парсера Nekohtml и Rhino для поддержки Javascript. Он предоставляет действительно хороший API для веб-страницы и позволяет легко перемещаться по сайту.

0 голосов
/ 16 сентября 2008

Вы можете использовать nekohtml для анализа вашего HTML-документа. Вы получите документ DOM. Вы можете использовать XPATH для получения необходимых данных.

0 голосов
/ 16 сентября 2008

Если вы хотите сделать это старомодным способом, вам нужно подключиться через сокет к порту веб-сервера, а затем отправить следующие данные:

GET /file.html HTTP/1.0
Host: site.com
<ENTER>
<ENTER>

затем используйте Socket#getInputStream, затем прочитайте данные с помощью BufferedReader и проанализируйте данные, используя все, что вам нравится.

0 голосов
/ 16 сентября 2008

Вы, кажется, хотите, чтобы очистить экран. Возможно, вы захотите написать фреймворк, который через адаптер / плагин для сайта-источника (так как формат каждого сайта будет отличаться), вы могли бы проанализировать источник HTML и извлечь текст. Вы можете использовать io API java для подключения к URL и потоковой передачи данных через InputStreams.

0 голосов
/ 16 сентября 2008

Короче говоря, вы можете либо проанализировать всю страницу и выбрать нужные вам вещи (для скорости я рекомендую посмотреть SAXParser), либо запустить HTML через регулярное выражение, которое обрезает весь HTML ... вы также можете преобразовать все это в DOM, но это будет дорого, особенно если вы стреляете из-за приличной пропускной способности.

...