Я хочу вытащить весь файл исходного кода HTML с веб-сайта на Java (или Python или PHP, если это проще на этих языках для отображения). Я хочу только просмотреть HTML и просмотреть его с помощью нескольких методов - никоим образом не редактировать и не манипулировать им, и я действительно хочу, чтобы я не записывал его в новый файл, если нет другого пути. Существуют ли какие-либо классы библиотеки или методы, которые это делают? Если нет, есть ли способ обойти это?Вытягивание HTML с веб-страницы в Java
ответ
В Java:
URL url = new URL("http://stackoverflow.com");
URLConnection connection = new URLConnection(url);
InputStream stream = url.openConnection();
// ... read stream like any file stream
Этот код хорош для целей сценариев и внутреннего использования. Я бы возражал против использования его для использования в производстве. Он не обрабатывает тайм-ауты и неудачные соединения.
Я бы рекомендовал использовать HttpClient library для производства. Он поддерживает проверку подлинности, обработку перенаправлений, потоковую обработку, объединение в пул и т. Д.
В Python:
import urllib
# Get a file-like object for the Python Web site's home page.
f = urllib.urlopen("http://www.python.org")
# Read from the object, storing the page's contents in 's'.
s = f.read()
f.close()
Пожалуйста, смотрите Python and HTML Processing для более подробной информации.
Возможно, вам также стоит рассмотреть альтернативу, например, запускать стандартную утилиту, такую как wget или curl, из командной строки для извлечения дерева сайта в локальное дерево каталогов. Затем выполните сканирование (в Java, Python, независимо) с помощью локальной копии. Это должно быть проще сделать, чем реализовать все такие скучные вещи, как обработка ошибок, разбор аргументов и т. Д. Самостоятельно.
Если вы хотите получить все страницы на сайте, wget и curl не знают, как собирать ссылки с HTML-страниц. Альтернативой является использование open source web crawler.
Я думаю, что я делаю что-то неправильно. Компилятор сообщает мне, что URLConnection не может быть создан (это абстрактный класс). Как я могу создать его корректно или существует подкласс для URLConnection, который может быть создан? – Brian
Я думаю, что это должно быть URL hp = новый URL ("http://stackoverflow.com"); URLConnection hpCon = hp.openConnection(); – GustyWind
@GustlyWind, спасибо. Должен был действительно проверить код. – notnoop