问题标签 [crawler4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
199 浏览

grails - Crawler4j 与 Grails 应用程序

我正在 Grails 上的 Groovy 中制作一个爬虫应用程序。我正在使用 Crawler4j 并遵循本教程

  1. 我创建了一个新的 grails 项目
  2. 将 BasicCrawlController.groovy 文件放入 controllers->package
  3. 没有创建任何视图,因为我预计在运行应用程序时,我的爬取数据会出现在我的crawlStorageFolder中(如果我的理解有缺陷,请纠正我)

之后我只是通过做运行应用程序,run-app但我没有在任何地方看到任何爬网数据。

  1. 我是否期望在我提供为 C:/crawl/crawler4jStorage 的 crawlStorageFolder 位置创建一些文件?
  2. 我需要为此创建任何视图吗?
  3. 如果我想在单击表单的提交按钮时从其他视图调用这个爬虫控制器,我可以写<g:form name="submitWebsite" url="[controller:'BasicCrawlController ']">吗?

我问这个是因为我在这个控制器中没有任何方法,那么它是调用这个控制器的正确方法吗?

我的代码如下:

0 投票
1 回答
570 浏览

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

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

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

我在BasicCrawler.groovy类中几乎没有属性,例如urlparentUrldomain等。

我想通过在爬行时将这些值传递给域类来将这些值保存到数据库中。

我尝试在 src/groovy 下的BasicCrawler类中执行此操作

我的域类如下:

但我收到以下错误:

在此之后,我尝试了另一种方法。在我的 src/groovy/BasicCrawler.groovy 类中,我在顶部声明了urlparentUrl属性,然后使用了数据绑定(我可能是错的,因为我只是一个初学者):

而我的Crawler.groovy域类如下:

现在,它没有显示任何错误,但是这些值没有保存在数据库中。我正在使用 mongodb 作为后端。

0 投票
1 回答
341 浏览

mongodb - Crawler4j 与 mongoDB

我正在研究 crawler4j。我发现它使用 BerkeleyDB 作为数据库。我正在使用 mongoDB 开发 Grails 应用程序,并且想知道 crawler4j 在我的应用程序中工作的灵活性。我基本上想将爬取的信息存储在mongodb数据库中。是否可以将 crawler4j 配置为使用 mongoDB 而不是 BerkeleyDB 作为默认数据存储?任何的意见都将会有帮助。谢谢

0 投票
1 回答
353 浏览

java - crawler4j 中 WebCrawler 的参数

是否可以将参数传递给 WebCrawler ?例如,我想WebCrawler.shouldVisit(WebURL url)在运行时为方法传递新规则或在我的 WebCrawler 中设置一些字段。可能吗?

0 投票
1 回答
551 浏览

grails - 在 Groovy 中使用 JSoup 获取 mp3/pdf 文件

我正在开发一个使用 crawler4j 和 Jsoup 抓取网络的应用程序。我需要使用 JSoup 解析网页并检查它是否有 zip 文件、pdf/doc 和 mp3/mov 文件可作为下载资源。

对于 zip 文件,我做了以下工作:

这段代码正确地告诉我一个页面中有多少个 zip 文件。我不确定如何使用 JSoup 计算所有音频文件或文档文件。任何帮助表示赞赏。谢谢。

0 投票
1 回答
645 浏览

grails - Crawler4j 不适用于 https 网址

我正在使用 crawler4j 开发一个 grails 应用程序。

我知道这是一个老问题,我在这里遇到了这个解决方案

我尝试了提供的解决方案,但不确定将另一个 fetcher 和 mockssl java 文件保存在哪里。

另外,我不确定在包含 https://... 的 url 的情况下如何调用这两个类

提前致谢。

0 投票
1 回答
306 浏览

java - 使用 Datasource 和 crawler4j 的“ResultSet 关闭后不允许操作”

在阅读了很多类似的问题后,我无法找到适合我的解决方案。

我有这个方法:

在 crawler4j 控制器中,我这样做:

这是 getURLs():

这是我的执行语句():

我得到错误

哪条线

在我的 getURLs() 方法中。

我究竟做错了什么?在获取语句和可以关闭语句的 while 循环之间没有代码。

0 投票
1 回答
866 浏览

mongodb - 使用 crawler4j & Jsoup 获取 Http 状态

我正在后端使用 MongoDB 创建一个 Groovy & Grails 应用程序。我使用 crawler4j 进行爬取,使用 JSoup 进行解析功能。我需要获取 URL 的 http 状态并将其保存到数据库。我正在尝试以下操作:

问题是,一旦我得到一个 http 状态不是 200(ok) 的 url,它就会直接转到 handlePageStatusCode() 方法(因为固有的 crawler4j 功能)并打印不成功的消息,但它没有保存到数据库中. 当页面状态不是 200 时,有什么方法可以保存到数据库中?如果我做错了什么,请告诉我。谢谢

0 投票
1 回答
520 浏览

java - 为什么 crawler4j 随机挂起?

我已经使用 crawler4j 几个月了。我最近开始注意到它挂在一些网站上,永远不会回来。推荐的解决方案是将 resumable 设置为 true。这对我来说不是一个选择,因为我的空间有限。我进行了多次测试,发现挂起非常随机。它会在 90-140 个网址之间爬行,然后停止。我想可能是该站点,但站点 robots.txt 中没有任何可疑之处,所有页面都以 200 OK 响应。我知道爬虫没有爬取整个网站,否则它会关闭。什么可能导致这种情况,我应该从哪里开始?

有趣的是我用 nonBlocking 启动爬虫,然后是一个 while 循环检查状态

当爬虫挂起时,while循环也停止响应,但线程仍然存在。这意味着整个线程没有响应。因此,我无法发送关机命令。

更新 我弄清楚是什么导致它挂起。我在访问方法中的 mysql 步骤中运行存储。该步骤如下所示:

非常有趣的是当我运行 st2.execute("SELECT NOW()"); 而不是当前的 st2.execute(query); 它工作正常,可以在不挂起的情况下抓取网站。但由于某种原因 st2.execute(query) 导致它在几次查询后挂起。它不是mysql,因为它不输出任何异常。我想也许我从 mysql 获得了“太多的连接”,但事实并非如此。我的过程对任何人都有意义吗?

0 投票
0 回答
131 浏览

grails - 将值从 visit() 传递到 handlePageStatusCode()

我正在研究 groovy 和 grails 项目。我有一个要求,我需要在 crawler4jvisit()中传递一些值。handlePageStatusCode()这两个方法位于类 src/groovy/BasicCrawler.groovy 类中。我无法更改函数原型,因为它们已被覆盖。我无法在会话中设置值,因为会话变量在 src/groovy 类中不起作用。我还能做些什么吗?

提前致谢。