2012-01-05 73 views
1

我有一塊HTML,我用Jsoup解析,然而,並不是所有的都是相關的,解析不相關的部分拋出我的數據集。Jsoup開始解析AFTER指定的標籤或從頁面底部開始?

在該網站上,有一個標題可以隨時更改。在這個頭裏面是鏈接,但是我不關心的鏈接。當Jsoup解析文檔時,它會將這些文件添加到我的鏈接數組中,並拋出我的值。

我感興趣的HTML之後是 <!-- BEGIN TOPICS --> 標記。

我希望能夠告訴Jsoup忽略標籤上方的所有內容。這可能嗎?如果沒有,我可以通過在文檔底部開始解析來解決這個問題,但我不知道我會如何去解決這個問題。

我的Jsoup查詢如下。請忽略所有的註釋行和調試語句,我一直在努力工作,這一點了一會兒,仍然在測試代碼。

 Thread getTitlesThread = new Thread() { 
      public void run() { 
       TitleResults titleArray = new TitleResults(); 
       StringBuilder whole = new StringBuilder(); 

       try { 
        URL url = new URL(
          Constants.FORUM); 
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
        urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); 
        try { 
         BufferedReader in = new BufferedReader(
          new InputStreamReader(new BufferedInputStream(urlConnection.getInputStream()))); 
         String inputLine; 
         while ((inputLine = in.readLine()) != null) 
          whole.append(inputLine); 
         in.close(); 
        } catch (IOException e) {} 
        finally { 
         urlConnection.disconnect(); 
        } 
       } catch (Exception e) {} 
       Document doc = Parser.parse(whole.toString(), Constants.FORUM); 
       Elements threads = doc.select("TOPICS > .topic_title"); 
       Elements authors = doc.select("a[hovercard-ref]"); 
//    for (Element author : authors) { 
//     authorArray.add(author.text()); 
//    } 
//    cleanAuthors(); 
       if (threads.isEmpty()) { 
        Log.d("POC", "EMPTY BRO!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11"); 
       } 
//    for (Element thread : threads) { 
//     titleArray = new TitleResults(); 
//     Log.d("POC", thread.toString()); 
// 
//     titleArray.setAuthorDate(authorArray.get(0)); 
//     authorArray.remove(0); 

        //Thread title 
//     threadTitle = thread.text(); 
//     titleArray.setItemName(threadTitle); 
//     
//     //Thread link 
//     String threadStr = thread.attr("abs:href"); 
//     String endTag = "/page__view__getnewpost"; //trim link 
//     threadStr = new String(threadStr.replace(endTag, "")); 
//     threadArray.add(threadStr); 
//     results.add(titleArray); 
//    } 
      } 
     }; 
     getTitlesThread.start(); 
+0

我能得到它 '書籍DOC = Parser.parse(whole.toString()工作的replaceAll(「<! - 結束廣告代碼 - > * < - ?。?!BEGIN話題 - >「,」「),Constants.FORUM);' 其中'<! - end ad tag - >'是我想要忽略的開始,'<! - BEGIN TOPICS - > '結束了。 – r2DoesInc 2012-01-05 13:54:00

回答

0

刪除您不想與解析文檔的一部分:

Document doc = Parser.parse(whole.toString().replaceAll("<!-- end ad tag -->?.*?<!-- BEGIN TOPICS -->", ""), Constants.FORUM); 

<!-- end ad tag -->是世界衛生大會的開始我想忽略和<!-- BEGIN TOPICS -->是結束。

+0

這是什麼Constants.FORUM?你能鏈接到適當的javadoc什麼的? – Sparker0i 2017-05-11 18:20:04

1

這應該工作,因爲你的描述(很難受某些不實際的HTML輸入):

Document document = ...; 
    Elements elements = document.getAllElements(); 
    Element comment = null; 
    int size = elements.size(); 
    for (int i = 0; comment == null && i < size; i++) { 
     Element element = elements.get(i); 
     for (Node node : element.childNodes()) { 
      if (node instanceof Comment) { 
       String str = ((Comment) node).getData().trim(); 
       if ("BEGIN TOPICS".equals(str)) { 
        comment = element; 
        break; 
       } 
      } 
     } 
    } 

    // Did we find <-- BEGIN TOPICS -->? 
    if (comment != null) { 
     // You can now select from the siblingElements of comment 
     // and only get stuff "after" that comment: 
     // e.g. Elements e = comment.siblingElements().select("a"); 
    } else { 
     // Oh snap. 
    } 
+0

如果你檢查我對這個問題所做的評論,我最終只是刪除了我不想要的所有內容,然後纔開始分析這些元素。不幸的是,我的代表不夠高,不能回答我自己的問題7個小時。 – r2DoesInc 2012-01-05 14:28:29