【问题标题】:Crawl Only HTML Pages仅抓取 HTML 页面
【发布时间】:2011-07-08 17:00:17
【问题描述】:

我想抓取仅 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("=============");
    }   
}

【问题讨论】:

  • @Lucero:这应该是一个答案。
  • @Lucero,感谢您的回复.. 是的,感谢您指出 xhtml,我想对 html 和 xhtml 都这样做.. 那么在这种情况下我们如何分析内容类型所以它只抓取 html 和 xhtml..
  • @Jim,感觉不像是一个真正的答案。 ;)

标签: java regex web-crawler


【解决方案1】:

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

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

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

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

【讨论】:

  • 感谢您的回复.. 是的,感谢您指出 xhtml,我想对 html 和 xhtml 都这样做.. 那么在这种情况下我们如何分析内容类型以便它爬行只有 html 和 xhtml..
猜你喜欢
  • 2012-11-24
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多