2014-10-15 2 views
1

Имея ссылку URL. Например: http://www.engineersireland.ie/home.aspxПолучите весь текстовый контент между тегами из URL-адреса?

Я могу прочитать их, используя java, встроенный в java.net.URL или Jsoup.

Затем мне нужно извлечь все текстовое содержимое между тегами после тега.

В тегах будут теги. Все, что мне нужно, это текст в середине.

, например:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <head id="head"><title> 
     Engineers Ireland - Home 
    </title><meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
    <meta http-equiv="pragma" content="no-cache" /> 
    <meta http-equiv="content-style-type" content="text/css" /> 
    <meta http-equiv="content-script-type" content="text/javascript" /> 

    <link href="/favicon.ico" type="image/x-icon" rel="shortcut icon"/> 
    <link href="/favicon.ico" type="image/x-icon" rel="icon"/> 
<body> 
<div class="module-content"> 

     <p id="1">Members can login for access to exclusive content, event booking, shop discounts and more...</p> 

      <fieldset> 
       <legend>Your Login Details</legend> 
       <div class="formline"> 
        <label for="1" id="1">Your Membership Number</label> 
        <input name="1" type="text" id="1" title="Your Membership Number" class="login-username clearlabel" /> 
        <span id="1e" class="ErrorLabel" style="display:none;">Enter your membership number</span> 
       </div> 
       <div class="formline"> 
        <label for="1" id="adasdasd">Password</label> 
        <input name="asdasd" type="password" id="dfbsdf" title="Password" class="login-password clearlabel" /> 
        <span id="drthd" class="ErrorLabel" style="display:none;">Enter your password</span> 
       </div> 
       <div class="formline"> 
        <input name="aseresrr" type="checkbox" id="bstg" class="login-remember" /> 
        <label for="ryjmf" id="asrats" class="remember">Remember Me</label> 

        <div class="button grey"> 
         <input type="submit" name="fgn" value="LOGIN" onclick="sdf;, false, false))" id="sdfsdf" /> 
        </div> 
       </div> 

      </fieldset> 
     <ul class="arrow"> 
      <li><a href="/site/reset-password.aspx">Forgot your password?</a></li> 
      <li><a href="/membership/apply.aspx">Haven't registered yet?</a></li> 
     </ul> 
    </div> 
</body> 
</html> 

Из этого кода HTML, все что мне нужно всего лишь:

Your Membership Number 
Enter your membership number 
Password 
Enter your password 
Remember Me 

Другое дело, что,

Keep in mind, the tag names and the number of tag are always random depend on the web page iteself. 

Любая помощь? Используя Jsoup или java? Thx

+0

Вы пробовали что-нибудь? Вы посмотрели документацию JSoup? Какие правила существуют для текста, который вы хотите, а какой текст у вас нет? Это похоже на текстовое содержимое всех '

', и ничего больше? Действительно ли это требования? Почему, например, текст из тега '

' или ссылки внизу исключены? –

+0

Да. Я посмотрел документы Jsoup. Изучая это сейчас. Для примера выше это просто случайный. Мне нужен весь текст между любыми тегами после . Теги могут содержать теги, но мне нужен текст в середине всех этих слоев тегов. Thx –

+0

Если вы все еще изучаете, просто прокрутите вниз. Я опубликовал рабочий пример. – nivekastoreth

ответ

2

С ниже, вы можете указать, какие части документа вы хотите извлечь текст из пропускания в правильном запросе CSS к методу getStringsFromUrl. Чтобы выполнить поиск всего документа, перейдите в нуль.

import org.jsoup.Jsoup; 
import org.jsoup.helper.StringUtil; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Node; 
import org.jsoup.nodes.TextNode; 
import org.jsoup.select.Elements; 
import org.jsoup.select.NodeVisitor; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class JSoupTest { 
    /* 
    Outputs: 
     Members can login for access to exclusive content, event booking, shop discounts and more... 
     Your Login Details 
     Your Membership Number 
     Enter your membership number 
     Password 
     Enter your password 
     Remember Me 
     Forgot your password? 
     Haven't registered yet? 
    */ 
    public static void main(String[] args) throws IOException { 
     String url = "http://localhost/test.html"; 
     List<String> strings = getStringsFromUrl(url, null); 
     for(String string : strings) { 
      System.out.println(string); 
     } 
    } 

    private static List<String> getStringsFromUrl(String url, String cssQuery) throws IOException { 
     Document document = Jsoup.connect(url).get(); 
     Elements elements = StringUtil.isBlank(cssQuery) 
       ? document.getElementsByTag("body") 
       : document.select(cssQuery); 

     List<String> strings = new ArrayList<String>(); 
     elements.traverse(new TextNodeExtractor(strings)); 
     return strings; 
    } 

    private static class TextNodeExtractor implements NodeVisitor { 
     private final List<String> strings; 

     public TextNodeExtractor(List<String> strings) { 
      this.strings = strings; 
     } 

     @Override 
     public void head(Node node, int depth) { 
      if (node instanceof TextNode) { 
       TextNode textNode = ((TextNode) node); 
       String text = textNode.getWholeText(); 
       if (!StringUtil.isBlank(text)) { 
        strings.add(text); 
       } 
      } 
     } 

     @Override 
     public void tail(Node node, int depth) {} 
    } 
} 
+0

Благодарим вас за ответ. В этом случае он работал с примером, который я дал.Но в реальных случаях мы не знаем, сколько тегов в , и мы не знаем, сколько слоев тегов окружало текст. Но все, что мне нужно, это текст, и программа просто принимает простой URL. Например, http://en.wikipedia.org/wiki/Engineer будет вход в Jsoup.connect (""); Затем будет возвращен весь требуемый текст. –

+0

Ну, ваш вопрос заявил, что вам нужно только подмножество фактических строк из документа. Если вы хотите все строки, просто замените вызов document.select() на document.body(), и он вернет все. – nivekastoreth

+0

Отредактировано, чтобы более точно продемонстрировать, что вы искали. Обратите внимание, что он возвращает больше строк, чем то, что вы изначально объявили в вопросе темы. – nivekastoreth

0

Используйте библиотеки HtmlUnit в java, чтобы вы могли находить содержимое тегов по вашему выбору.

Пожалуйста, посетите ниже ссылку:

http://htmlunit.sourceforge.net/gettingStarted.html

+0

Имя тега случайное. Все, что мне нужно, это текст между тегами. Независимо от того, сколько тегов слоев вне текста. –

+0

Вы используете HTML-тег или любые другие теги? Пожалуйста, позвольте мне сейчас. –

+0

, если вы хотите разобрать только html, то HTMLUnit определенно поможет вам. Я использовал несколько дней назад. –