【发布时间】:2009-09-04 22:33:24
【问题描述】:
我正在编写一个多线程 Java 网络爬虫。根据我对网络的了解,当用户加载网页时,浏览器会请求第一个文档(例如 index.html),当它接收到 HTML 时,它会找到需要包含的其他资源(图像、CSS、JS ) 并同时请求这些资源。
我的爬虫只请求原始文档。出于某种原因,我不能让它每 5 秒刮掉超过 2 到 5 页。我正在为我正在制作的每个 HttpURLConnection 创建一个新线程。看来我应该能够每秒至少抓取 20-40 页。如果我尝试启动 100 个线程,我会疯狂地获得 I/O 异常。有什么想法吗?
【问题讨论】:
-
请考虑许多服务器对同一 IP 的访问设置了限制。在请求之间至少等待半秒或一秒是爬虫的标准做法。还可以查看archive.org 的爬虫Heritrix。它是开源的,用 Java 编写。非常好。
标签: java web-crawler screen-scraping