Java 使用特定前缀对URL进行爬网
我只想使用Java 使用特定前缀对URL进行爬网,java,web-crawler,crawler4j,Java,Web Crawler,Crawler4j,我只想使用crawler4j进行爬网,特定的URL具有特定的前缀 例如,如果URL以http://url1.com/timer/image它是有效的。例如:http://url1.com/timer/image/text.php 此URL无效:http://test1.com/timer/image 我试着这样实现它: public boolean shouldVisit(Page page, WebURL url) { String href = url.getURL().toLowe
crawler4j
进行爬网,特定的URL具有特定的前缀
例如,如果URL以http://url1.com/timer/image
它是有效的。例如:http://url1.com/timer/image/text.php
此URL无效:http://test1.com/timer/image
我试着这样实现它:
public boolean shouldVisit(Page page, WebURL url) {
String href = url.getURL().toLowerCase();
String adrs1 = "http://url1.com/timer/image";
String adrs2 = "http://url2.com/house/image";
if (!(href.startsWith(adrs1)) || !(href.startsWith(adrs2))) {
return false;
}
if (filters.matcher(href).matches()) {
return false;
}
for (String crawlDomain : myCrawlDomains) {
if (href.startsWith(crawlDomain)) {
return true;
}
}
return false;
}
但是,这似乎不起作用,因为爬虫程序还访问其他URL
有什么建议吗
谢谢你的回答 基本上,您可以拥有一个前缀数组,其中包含您想要爬网的允许URL。在您的方法中,只要遍历数组,只要它使用您允许的前缀中的任何一个砍刀,就返回true。这意味着您不必列出任何不想爬网的域
public boolean shouldVisit(Page page, WebURL url) {
String href = url.getURL().toLowerCase();
// prefixes that you want to crawl
String allowedPrefixes[] = {"http://url1.com", "http://url2.com"};
for (String allowedPrefix : allowedPrefixes) {
if (href.startsWith(allowedPrefix)) {
return true;
}
}
return false;
}
您的代码不起作用,因为您的条件不正确:
(!(href.startsWith(adrs1)) || !(href.startsWith(adrs2))
另一个原因是您可能没有配置crawlerDomains
。它是在应用程序启动期间通过调用CrawlController#setCustomData(crawler1域)配置的代码>
看看crawler4j的示例源代码,这里设置了crawlerDomains:基本上,您可以有一个前缀数组,其中包含要爬网的允许URL。在您的方法中,只要遍历数组,只要它使用您允许的前缀中的任何一个砍刀,就返回true。这意味着您不必列出任何不想爬网的域
public boolean shouldVisit(Page page, WebURL url) {
String href = url.getURL().toLowerCase();
// prefixes that you want to crawl
String allowedPrefixes[] = {"http://url1.com", "http://url2.com"};
for (String allowedPrefix : allowedPrefixes) {
if (href.startsWith(allowedPrefix)) {
return true;
}
}
return false;
}
您的代码不起作用,因为您的条件不正确:
(!(href.startsWith(adrs1)) || !(href.startsWith(adrs2))
另一个原因是您可能没有配置crawlerDomains
。它是在应用程序启动期间通过调用CrawlController#setCustomData(crawler1域)配置的代码>
查看crawler4j的示例源代码,这里设置了crawlerDomains:查看下面的代码。这可能对你有帮助
public boolean shouldVisit(Page page,WebURL url) {
String href = url.getURL().toLowerCase();
String adrs1 = "http://url1.com/timer/image";
String adrs2 = "http://url2.com/house/image";
return !FILTERS.matcher(href).matches() && (href.startsWith(adrs1) || href.startsWith(adrs2));
}
请看下面的代码。这可能对你有帮助
public boolean shouldVisit(Page page,WebURL url) {
String href = url.getURL().toLowerCase();
String adrs1 = "http://url1.com/timer/image";
String adrs2 = "http://url2.com/house/image";
return !FILTERS.matcher(href).matches() && (href.startsWith(adrs1) || href.startsWith(adrs2));
}
当您提供正确的URL(带有特定前缀的URL)时,会发生什么情况?当您提供正确的URL(带有特定前缀的URL)时,会发生什么情况?它们会工作吗?