我正在尝试在Groovy中创建一个webcrawler。我希望从网页中提取资源类型。我需要检查特定网页是否具有以下资源类型:
PDF文件
JMP文件
SWF文件
ZIP文件
MP3文件
图片
电影档案
JSL文件
我正在使用crawler4j进行爬网,使用JSoup进行解析。 总的来说,我想了解任何获取我将来可能需要的资源类型的方法。我在BasicCrawler.groovy中尝试了以下内容。它只是告诉页面的内容类型,即text / html或text / xml。我需要在该页面上获取所有类型的资源。请纠正我出错的地方:
@Override
void visit(Page page) {
println "inside visit"
int docid = page.getWebURL().getDocid()
url = page.getWebURL().getURL()
String domain = page.getWebURL().getDomain()
String path = page.getWebURL().getPath()
String subDomain = page.getWebURL().getSubDomain()
parentUrl = page.getWebURL().getParentUrl()
String anchor = page.getWebURL().getAnchor()
println("Docid: ${docid} ")
println("URL: ${url} ")
Document doc = Jsoup.connect(url).get();
Elements nextLinks = doc.body().select("[href]");
for( Element link : nextLinks ) {
String contentType = new URL(link.attr("href")).openConnection().getContentType();
println url + "***" + contentType
}
if (page.getParseData() instanceof HtmlParseData) {
HtmlParseData htmlParseData = (HtmlParseData) page.getParseData()
String text = htmlParseData.getText()
String html = htmlParseData.getHtml()
List<WebURL> links = htmlParseData.getOutgoingUrls()
}
println("FINISHED CRAWLING")
def crawlObj = new Resource(url : url)
if (!crawlObj.save(flush: true, failOnError: true)) {
crawlObj.errors.each { println it }
}
}
打印两个文档ID后,会抛出错误:ERROR crawler.WebCrawler - Exception while running the visit method. Message: 'unknown protocol: tel' at java.net.URL.<init>(URL.java:592)
答案 0 :(得分:3)
您可以检查文档中的所有网址,并向服务器询问内容类型。 这是一个快速+肮脏的例子:
Document doc = Jsoup.connect("http://yourpage").get();
Elements elements = doc.body().select("[href]");
for (Element element : elements) {
String contentType = new URL(element.attr("href")).openConnection().getContentType();
}
对于图像,嵌入元素等,您应该搜索src
属性。
答案 1 :(得分:2)
Apache Tika涵盖了很多这些格式
Apache Tika™工具包使用现有的解析器库检测并从各种文档中提取元数据和结构化文本内容。
那些没有的,你应该能够写一个识别器