我对编程相当陌生,并且正在为我的网络爬虫论文工作。我是由一个网络爬虫提供的,但我发现它太慢了,因为它是单线程的。爬取 1000 个网页花了 30 分钟。我尝试创建多个线程来执行,20 个线程同时运行 1000 个网页只用了 2 分钟。但是现在我遇到了“Heap Out of Memory”错误。我确定我所做的是错误的,即为 20 个线程创建了一个for循环。在不给出错误的情况下多线程 java 爬虫的正确方法是什么?说到哪,多线程是否可以解决我的问题?
问问题
1824 次
3 回答
3
我的第一个建议是增加 JVM 的堆大小:
于 2009-07-18T00:17:06.287 回答
3
简单的答案(见上文)是增加 JVM 内存大小。这会有所帮助,但真正的问题很可能是您的网络爬虫算法正在创建一个内存数据结构,该结构与您访问的页面数量成正比。如果是这种情况,解决方案可能是将该数据结构中的数据移动到磁盘;例如数据库。
最适合您的问题的解决方案取决于您的网络爬虫的工作方式、它收集的内容以及您需要爬取的页面数量。
于 2009-07-18T05:04:26.503 回答
0
关于程序的速度:
如果您的网络爬虫遵循服务器上的 robots.txt 文件(它应该避免被网站管理员禁止),那么可能无能为力。
您应该分析您的程序,但我预计大部分时间是您的爬虫下载 html 页面,如果您下载速度如此之快耗尽了他们的带宽,站点管理员通常不会高兴。
总之,在不损害该站点的情况下下载整个站点需要一段时间。
于 2009-07-18T00:29:04.557 回答