



Зависит от того, насколько сложен HTTP-запрос, который вам нужно создать (аутентификация и т. д.). Вот один простой способ, который я видел раньше.
StringBuilder html = new StringBuilder();
java.net.URL url = new URL("http://www.google.com/");
BufferedReader input = null;
try {
input new BufferedReader(
new InputStreamReader(url.openStream()));
String htmlLine;
while ((htmlLine=input.readLine())!=null) {
html.appendLine(htmlLine);
}
}
finally {
input.close();
}
Pattern exp = Pattern.compile(
"<meta name=\"generator\" value=\"([^\"]*)\" />");
Matcher matcher = exp.matcher(html.toString());
if (matcher.find())
{
System.out.println("Generator: "+matcher.group(1));
}
Вероятно, при компиляции здесь можно найти множество опечаток. (надеюсь, это не было домашним заданием)
Вы можете проверить документацию для пакета Apache org.apache.commons.HttpClient и связанных пакетов здесь. Отправить HTTP-запрос из Java-приложения довольно просто. Просматривая документацию, вы должны двигаться в правильном направлении.
Я не пробовал это, но разве базовая структура не будет
java.net.HttpURLConnectiongetInputStreamСтрого говоря, вы не можете быть уверены, что получили правильное значение, поскольку метатег может быть закомментирован, или метатег может быть в верхнем регистре и т. д. Это зависит от того, насколько вы уверены, что HTML можно считать "хорошим". ".
Вы должны использовать запрос XPath.
Это так же просто, как получить значение /html/head/meta[@name=generator]/@value.
Хороший учебник: Анализ XML-документа с помощью XPath
Как вы предлагаете выполнить XPath для Html, если Html не является Xml? Вы не можете гарантировать, что Html можно будет загрузить как документ Xml для навигации XPath. Теперь Html DOM - отличный инструмент для этого, но RegEx работает и прост.
Примером в вопросе, очевидно, является XHTML и, следовательно, XML, потому что он имеет самозакрывающийся тег.
По-разному.
Если вы извлекаете информацию с сайта или сайтов, которые гарантированно представляют собой правильно сформированный HTML, и знаете, что <meta> не будет каким-либо образом запутан, то чтение
section line by line and applying a regex is a good approach.С другой стороны, если HTML может быть искажен или «запутан», вам нужно использовать правильный HTML-анализатор, возможно, разрешающий, например HTMLTidy. Остерегайтесь использования строгого парсера HTML или XML для материалов, полученных со случайных веб-сайтов. Вы обнаружите, что так называемый HTML-код на самом деле искажен.
Правильно сформированный HTML - это еще одна причина попробовать использовать правильный синтаксический анализатор вместо регулярного выражения. Regex никогда не следует использовать для синтаксического анализа HTML, точка.
Удивительно, как никто, обращаясь к проблеме использования RegEx с HTML, не сталкивается с проблемой того, что HTML часто имеет правильный формат НЕТ, что делает многие HTML-парсеры совершенно бесполезными.
Если вы разрабатываете инструменты для анализа веб-страниц и факт, что они не являются правильно сформированным HTML, утверждение «Regex никогда не следует использовать для синтаксического анализа HTML» или «использовать HTML-синтаксический анализатор» является полностью ложным. Факты таковы, что в реальном мире люди создают HTML по своему усмотрению - и это не обязательно подходит для парсеров.
RegEx является - полностью действующий способ поиска элементов в тексте, то есть в HTML. Если есть какой-либо другой разумный способ решить проблемы, которые есть в оригинальном плакате, то опубликуйте их вместо того, чтобы ссылаться на «использовать синтаксический анализатор» или «RTFM».
Что делать, если метатег закомментирован? Это все равно будет читать. Это правильно? Что делать, если между метой и именем есть два пробела? Или вкладка? Или перевод строки? Что делать, если генератор слов не заключен в кавычки? Из-за этих и многих других проблем я предлагаю не писать это самостоятельно, а найти библиотеку, которая сделает это за вас.