我正在使用 groovy 和 grails 开发 crawler4j。
我在 src/groovy 中有一个BasicCrawler.groovy类和域类Crawler.groovy和一个名为CrawlerController.groovy的控制器。
我在BasicCrawler.groovy类中几乎没有属性,例如url、parentUrl、domain等。
我想通过在爬行时将这些值传递给域类来将这些值保存到数据库中。
我尝试在 src/groovy 下的BasicCrawler类中执行此操作
class BasicCrawler extends WebCrawler {
Crawler obj = new Crawler()
//crawling code
@Override
void visit(Page page) {
//crawling code
obj.url = page.getWebURL().getURL()
obj.parentUrl = page.getWebURL().getParentUrl()
}
@Override
protected void handlePageStatusCode(WebURL webUrl, int statusCode, String statusDescription) {
//crawling code
obj.httpstatus = "not found"
}
}
我的域类如下:
class Crawler extends BasicCrawler {
String url
String parentUrl
String httpstatus
static constraints = {}
}
但我收到以下错误:
ERROR crawler.WebCrawler - Exception while running the visit method. Message: 'No such property: url for class: mypackage.BasicCrawler
Possible solutions: obj' at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:50)
在此之后,我尝试了另一种方法。在我的 src/groovy/BasicCrawler.groovy 类中,我在顶部声明了url和parentUrl属性,然后使用了数据绑定(我可能是错的,因为我只是一个初学者):
class BasicCrawler extends WebCrawler {
String url
String parentUrl
@Override
boolean shouldVisit(WebURL url) { //code
}
@Override
void visit(Page page) { //code
}
@Override
protected void handlePageStatusCode(WebURL webUrl, int statusCode, String statusDescription) {
//code}
}
def bindingMap = [url: url , parentUrl: parentUrl]
def Crawler = new Crawler(bindingMap)
}
而我的Crawler.groovy域类如下:
class Crawler {
String url
String parentUrl
static constraints = {}
}
现在,它没有显示任何错误,但是这些值没有保存在数据库中。我正在使用 mongodb 作为后端。