仅抓取HTML网页

时间:2011-07-08 17:00:18

标签: java regex web-crawler

我想只抓取html页面所以当我在这段代码中更改了正则表达式时...它仍然在抓取一些xml页面..任何建议为什么会发生..

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("=============");
    }   
}

1 个答案:

答案 0 :(得分:3)

扩展在网络上毫无意义 - 特别是对于较新的“SEO”类型路径。你必须分析它的内容类型。

您可以通过请求(使用HTTP GET或可能HEAD方法)每个URL并分析其响应标头来执行此操作。如果Content-Type响应标头不是您想要的,则不必下载它 - 否则它就是您想要查看的内容。

编辑:HTML应该有text/html作为内容类型,XHTML是application/xhtml+xml(但请注意,后者可能需要进行内容协商,这通常取决于您的接受标头的内容和请求中的用户代理。)

您可以找到有关HTTP标头here的所有信息。