将src/groovy类的值设置为域类属性



我正在使用groovy和grails开发crawler4j。

我有一个BasicCrawler。groovy类和域类Crawler。groovy和一个名为的控制器CrawlerController.groovy.

我在BasicCrawler中有几个属性。groovy类,如urlparentUrldomain

我想通过将这些值传递给域类来将这些值持久化到数据库,而爬行正在发生。

我尝试在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类中,我在顶部声明了urlparentUrl属性,然后使用了数据绑定(我可能错了,因为我只是一个初学者):
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的后端。

我认为这个例子有点做作,但这里有一种方法可以在当前情况下解决这个问题:

class BasicCrawler extends WebCrawler {
   @Override
   void visit(Page page) {
      Crawler obj = new Crawler()
      obj.url = page.getWebURL().getURL()
      obj.parentUrl = page.getWebURL().getParentUrl()
      obj.save()
   }
   @Override
   protected void handlePageStatusCode(WebURL webUrl, int statusCode, String   statusDescription) {
      Crawler obj = Crawler.findByUrl(webUrl)
      obj.httpstatus = "not found"
      obj.save()
   }
}

这里的关键是不使用成员实例变量,并使用URL来'重新获取'和更新原始网站'访问',因为我假设这将是对每一行的唯一约束。

相关内容

  • 没有找到相关文章

最新更新