2011-07-08 58 views
1

我想,當我在這個代碼在這裏改變了正則表達式來抓取磺酰基HTML頁面等等..它仍然會檢索一些XML頁面還..任何建議,爲什麼會發生..僅檢索HTML頁面

public class MyCrawler extends WebCrawler { 


    Pattern filters = Pattern.compile("(.(html))"); 

    public MyCrawler() { 
    } 

    public boolean shouldVisit(WebURL url) { 
     String href = url.getURL().toLowerCase(); 
     if (filters.matcher(href).matches()) { 
      return false; 
     } 
     if (href.startsWith("http://www.somehost.com/")) { 
      return true; 
     } 
     return false; 
    } 

    public void visit(Page page) { 
     int docid = page.getWebURL().getDocid(); 

     String url = page.getWebURL().getURL();   
     String text = page.getText(); 
     List<WebURL> links = page.getURLs(); 
     int parentDocid = page.getWebURL().getParentDocid(); 

     System.out.println("Docid: " + docid); 
     System.out.println("URL: " + url); 
     System.out.println("Text length: " + text.length()); 
     System.out.println("Number of links: " + links.size()); 
     System.out.println("Docid of parent page: " + parentDocid); 
     System.out.println("============="); 
    } 
} 
+0

@Lucero:這應該是一個答案。 –

+0

@Lucero,謝謝你的回覆。是的,謝謝你指出了關於xhtml,我想這樣做的HTML和XHTML兩者..所以我們如何分析這種情況下的內容類型,以便它只抓取HTML和XHTML .. – ferhan

+0

@Jim,它並沒有真正的感覺真正的答案。 ;) – Lucero

回答

3

該擴展在網絡上毫無意義 - 尤其是對於更新的「SEO」類型的路徑。你必須分析它的內容類型。

您可以通過請求(使用HTTP GET或可能HEAD方法)每個URL並分析其響應標頭來完成此操作。如果Content-Type響應標題不是您想要的,則不必下載它,否則就是您想要查看的內容。

編輯:HTML應該有text/html的內容類型,XHTML是application/xhtml+xml(但要注意的是,後者可能會受到內容協商,這通常取決於你接受頭的請求的內容和用戶代理)。

您可以找到有關HTTP標頭here的所有信息。

+0

感謝您的回覆..是的感謝您指出了關於xhtml,我想這樣做的HTML和XHTML兩者..所以我們如何分析這種情況下的內容類型,以便它只抓取HTML和XHTML。 。 – ferhan

+0

@Raihan,增加了更多信息。 – Lucero