我想只抓取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("=============");
}
}
答案 0 :(得分:3)
扩展在网络上毫无意义 - 特别是对于较新的“SEO”类型路径。你必须分析它的内容类型。
您可以通过请求(使用HTTP GET
或可能HEAD
方法)每个URL并分析其响应标头来执行此操作。如果Content-Type响应标头不是您想要的,则不必下载它 - 否则它就是您想要查看的内容。
编辑:HTML应该有text/html
作为内容类型,XHTML是application/xhtml+xml
(但请注意,后者可能需要进行内容协商,这通常取决于您的接受标头的内容和请求中的用户代理。)
您可以找到有关HTTP标头here的所有信息。