Как получить HTML в Java

Каков самый простой способ получить HTML-контент веб-сайта в строку без использования какой-либо внешней библиотеки?

возможный дубликат stackoverflow.com/questions/238547/…

jjnguy 06.04.2010 09:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
28
1
62 132
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

В настоящее время я использую это:

String content = null;
URLConnection connection = null;
try {
  connection =  new URL("http://www.google.com").openConnection();
  Scanner scanner = new Scanner(connection.getInputStream());
  scanner.useDelimiter("\Z");
  content = scanner.next();
  scanner.close();
}catch ( Exception ex ) {
    ex.printStackTrace();
}
System.out.println(content);

Но не уверен, есть ли способ лучше.

Почему "\\ Z"? Разве это не EOF только для Windows? Я здесь просто догадываюсь.

greenoldman 10.11.2011 00:52

Почему вы используете "\\ Z"? Что оно делает? Пробовал без него, не вышло.

Max Husiv 03.02.2017 17:03

@MaxHusiv Я думаю, это потому, что, если вы не укажете разделитель, scanner.next () будет просто проходить весь символ HTML за символом, но если вы используете разделитель, которого нет в HTML, scanner.next () возвращает все.

Chris A 15.11.2020 18:27

Я только что оставил этот пост в другой вашей беседе, хотя то, что у вас есть выше, тоже может сработать. Я не думаю, что одно из них было бы проще другого. Доступ к пакетам Apache можно получить, просто используя import org.apache.commons.HttpClient в верхней части кода.

Обновлено: забыл ссылку;)

Видимо надо еще и JAR-файл установить :)

Seun Osewa 19.10.2009 07:19

Это хорошо сработало для меня:

URL url = new URL(theURL);
InputStream is = url.openStream();
int ptr = 0;
StringBuffer buffer = new StringBuffer();
while ((ptr = is.read()) != -1) {
    buffer.append((char)ptr);
}

Не уверен, являются ли другие предоставленные решения более эффективными или нет.

Разве вам не нужно включать следующее? импорт java.io. * импорт java.net. *

Seun Osewa 19.10.2009 07:05

Конечно, но это ядро ​​Java, очень простое. Что касается фактического кода, операторы импорта для ясности опущены.

Scott Bennett-McLeish 20.10.2009 04:14

после while вы также должны отображать содержимое буфера! или напишите метод там, где читаете!

rupinderjeet 01.07.2016 10:53

обязательно close входной поток

Aaron Esau 03.01.2017 06:34

Я предлагаю более простое решение, хотя и не ванильную Java. Используйте Groovy ;-)

String siteContent = new URL("http://www.google.com").text

Это не библиотека, а инструмент под названием curl, который обычно устанавливается на большинстве серверов, или вы можете легко установить его в ubuntu с помощью

sudo apt install curl

Затем загрузите любую html-страницу и сохраните ее в локальном файле, как в примере.

curl https://www.facebook.com/ > fb.html

Вы получите html-страницу домашней страницы. Вы также можете запустить ее в своем браузере.

Прищуривает глаза, чтобы показать шок. This is a Java Question.
user9016207 23.12.2018 04:50

Другие вопросы по теме