问题标签 [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.
java - 提高 Crawler4j-Crawler 效率、可扩展性
我正在使用 Crawler4j 爬虫爬取一些域。现在我想提高爬虫的效率,我希望我的爬虫在给定的时间段内使用我的全部带宽并爬取尽可能多的 url。为此我正在采取以下措施设置: -
- 我增加了编号。爬虫线程数为 10(使用此函数 ContentCrawler('classfilename',10);)
- 我已将礼貌延迟减少到 50 毫秒(使用 Crawlconfig.setpolitenessdelay(50);)
- 我将爬行深度设为 2(使用 Crawlconfig.setMaxDepthOfCrawling(2))
现在我想知道的是:-
1) 这种设置是否有任何副作用。
2)除此之外我还有什么需要做的,这样我才能提高我的爬虫速度。
3) 有人能告诉我每个设置的最大限制吗(例如:- crawler4j 一次支持的最大线程数等)。因为我已经浏览了 Crawler4j 的代码,但我在任何地方都没有找到任何限制。
4)如何在不检查它的robots.txt文件的情况下抓取一个域。因为我知道crawler4j在抓取之前首先检查一个域的robots.txt文件。我不想要那个!
5)page fetcher是如何工作的(请简单解释一下)
任何帮助表示赞赏,如果问题很愚蠢,请放轻松。
web-crawler - 如何使用一组特定的网站抓取特定域中的最新文章?
我有兴趣构建一个程序来从一组特定的网站(例如“ScienceDirect”)获取特定领域(“计算机科学”)中的所有最新文章。如您所知,有些网站会为每篇研究文章发布一个页面,例如:http ://www.sciencedirect.com/science/article/pii/S108480451400085X 每个页面都包含特定文章的信息。
我很想知道什么是用于此目的的最佳工具(开源)?通用网络爬虫(例如 Apache Nutch)提供了一个通用框架来爬取整个网络,但在我的情况下,我需要一个特定于网站的爬虫。
web-crawler - crawler4j:网站在 20-30 秒的爬网后禁止我的 IP 地址几分钟
我正在尝试使用开源 crawler4j 在 mystore411.com 上抓取一个网站。
爬虫在有限的时间内(比如 20-30 秒)正常工作,然后网站在我可以再次爬取之前禁止我的地址几分钟。我想不出可能的解决方案。
我浏览了它的 robots.txt,这是我从中得到的:
请建议是否有任何替代方案。
web-crawler - 将基本 crawler4j 转换为集中爬虫
我已经实现了一个基本的爬虫,它从种子 URL 中检索数据并能够下载页面。此外,我可以将我的爬虫保留在同一个种子网站中,直到达到指定的深度。 我如何才能对我的爬虫施加更多限制,例如只有在通过预定义关键字的最小阈值时才下载页面? shouldvisit() 函数中有这样的方法吗?
java - 如何使用 crawler4j 进行抓取?
我已经做了 4 个小时了,我根本看不出我做错了什么。我有两个文件:
- MyCrawler.java
- 控制器.java
MyCrawler.java
控制器.java
结构如下:
我尝试使用以下方法在 WINDOWS 机器上编译它:
这非常有效,我最终得到:
但是,当我输入:
它爆炸了:
所以,我认为不知何故我没有做我需要做的事情。使这个新的可执行类“意识到”MyCrawler.class 的东西。我曾尝试在命令行 javac 部分中摆弄类路径。我也尝试在我的环境变量中设置它......没有运气。
知道我怎样才能让它工作吗?
更新
我从 Google 代码页面本身获得了大部分代码。但我就是不知道必须去那里。即使我尝试这个:
没运气。不知何故,Controller.class 不知道 MyCrawler.class。
更新 2
我认为这并不重要,因为问题显然是找不到类,但无论哪种方式,这里都是“CrawlController 控制器”的签名。取自这里。
实际上,当我通过“MyCrawler”时,我正在通过“爬虫”。问题是应用程序不知道 MyCrawler 是什么。
java - Java Web 应用程序上的阻塞任务,以及 Heroku 服务器上的请求超时
我是 Java 网络编程的新手,我正在尝试制作一个网络爬虫,使用 Crawler4j示例代码
我的问题是当我提交repost请求时,Crawling任务(这是一个阻塞任务)需要一些时间才能完成,Heroku托管有3秒的请求超时,这使得无法运行同步抓取任务,相同的程序在我的本地机器上运行良好。
根据我的阅读,不可能通过基本/免费提供来更改 Heroku 的超时。
我想知道是否可以将其作为异步任务启动(我知道可以使用 CrawlerController.startNonBlocking() 函数)并等待它完成,以便我可以显示爬行操作的结果。
web-crawler - Crawler4j - NoSuchMethod getOutgoingUrls()
我正在尝试设置craweler4j。我正在从 Netbeans 的源代码构建它。我使用的是 crawler4j 的 3.5 版本,调用类与网站上曾经给出的类相同 - 为方便起见,请在下面复制 -
}
和
}
代码编译成功但引发以下运行时异常。请建议。
我仔细研究了代码,并在那里找到了一个同名的类。但仍然是错误。
java - crawler4j 与 TimerTask 一起使用时无法正常工作
我们一直在尝试使用爬虫,以便我们可以以一定的时间间隔爬取特定的网站。为此,我们一直在尝试将爬虫合并到计时器中。但是在使用计时器第一次成功抓取后,它总是在控制台中显示:
看起来没有线程在工作,等待 10 秒以确保...没有线程在工作,并且没有更多的 URL 在队列中等待另外 10 秒以确保...所有爬虫都已停止。完成过程......在最终清理之前等待 10 秒...... CrawlerScheduler 完成于:Wed Nov 19 18:41:36 IST 2014
对于使用计时器的每次后续爬网。爬虫不再工作。我们通过源代码找出原因,但失败了。
这是代码:
公共类 CrawlerScheduler 扩展 TimerTask {
}
spring-mvc - 权限外部jar创建文件tomcat
我的申请有问题。
它通过Crawler4j从网站获取数据,需要创建一些目录和文件来操作数据,但是tomcat不给权限。答案是这样的:
无法创建此文件夹:/data/crawl/root
如何配置 tomcat 以允许外部 jar 在我的应用程序中创建目录和文件?
源代码可以在:https ://github.com/MarcelorjOliveira/CrawlerSpring
完整的堆栈跟踪在这里
堆栈跟踪:org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455) org.apache.jasper.servlet.JspServlet.serviceJspFile( JspServlet.java:405) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server。 WsFilter.doFilter(WsFilter.java:52) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
根本原因
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 java.lang.Exception:无法创建此文件夹:/data/crawl/root org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:656) org.springframework.web.servlet.FrameworkServlet。 doGet(FrameworkServlet.java:549) javax.servlet.http.HttpServlet.service(HttpServlet.java:618) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server。 WsFilter.doFilter(WsFilter.java:52) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) org.apache.jasper.runtime.PageContextImpl.doForward(PageContextImpl.java:738) org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:708) org.apache.jsp.index_jsp。
根本原因
java.lang.Exception:无法创建此文件夹:/data/crawl/root edu.uci.ics.crawler4j.crawler.CrawlController.(CrawlController.java:83) br.com.crawlerspring.controller.MainController.initCrawler( MainController.java:52) br.com.crawlerspring.controller.MainController.main(MainController.java:66) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) sun .reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:606) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176 ) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) org.springframework.web。 servlet.DispatcherServlet.doService(DispatcherServlet.java:719) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) javax. servlet.http.HttpServlet.service(HttpServlet.java:618) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) org.apache.jasper.runtime.PageContextImpl。doForward(PageContextImpl.java:738) org.apache.jasper.runtime.PageContextImpl.forward(PageContextImpl.java:708) org.apache.jsp.index_jsp._jspService(index_jsp.java:65) org.apache.jasper.runtime。 HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) org.apache.jasper。 servlet.JspServlet.serviceJspFile(JspServlet.java:405) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:349) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache。 tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)forward(PageContextImpl.java:708) org.apache.jsp.index_jsp._jspService(index_jsp.java:65) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet。服务(HttpServlet.java:725)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405)org.apache.jasper。 servlet.JspServlet.service(JspServlet.java:349) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org. netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)forward(PageContextImpl.java:708) org.apache.jsp.index_jsp._jspService(index_jsp.java:65) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet。服务(HttpServlet.java:725)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405)org.apache.jasper。 servlet.JspServlet.service(JspServlet.java:349) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org. netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)http.HttpServlet.service(HttpServlet.java:725) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405) org. apache.jasper.servlet.JspServlet.service(JspServlet.java:349) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java: 52) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)http.HttpServlet.service(HttpServlet.java:725) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:405) org. apache.jasper.servlet.JspServlet.service(JspServlet.java:349) javax.servlet.http.HttpServlet.service(HttpServlet.java:725) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java: 52) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
谢谢大家。
java - 使用 crawler4j 获取 html 页面中存在的所有 iframe、base64 代码
我正在使用 crawler4j 来爬取一些网站,它工作正常。我能够下载网站中的所有文件,现在我有一个新任务摆在我面前。如果可能的话,我还需要提取 iframe、base64 和其他嵌入式代码!
到目前为止,我正在做的是,在我的访问方法中
我已经添加了上面的 if case 来获取给定 html 页面的 iframe。它的工作几乎接近完美。
我知道这是从 html 页面中提取 iframe 的不好方法。我尝试了许多其他方法从 html 页面中提取 iframe 和其他嵌入式代码,但失败了。在查看源代码后,我找到了一个可以满足我的java 类要求。从上面的 url 中可以看出,我必须使用 HtmlContentHandler 类中的必要参数调用 startElemnt 方法才能获取所需的代码。
所以在我的访问方法中,我创建了一个 HtmlContentHandler 对象并尝试调用上面提到的 startElement 方法。
现在问题出在该方法的参数上。我正在发送为 url 参数抓取的 url 值,但我不知道必须为其余参数发送什么值!
有人可以帮助我吗?还有一件事我知道许多其他工具可以使我的工作变得轻松,但我想在 crawler4j 中做到这一点!
谢谢!!