最近用heritrix 爬取网站, 发现很慢,
heritrix 的QUEUE的分配策略 会影响速度,
比如用HostnameQueueAssignmentPolicy, 一个网站只分配一个Queue,
如果这个网站有很多页面要爬取, 这些页面全部放到一个queue里面,
很多页面就会阻塞在这个Queue里, 要经过很长时间才能处理。
相比之下, 对一个网站的爬取用SurtAuthorityQueueAssignmentPolicy 策略会好很多,
会根据网站的URL结构放入不同的queue中,
比如
http://www.ebookl.com/magazine/men
http://www.ebookl.com/937100-restorative-therapies-parkinsons-disease-repost
这倆个页面会放在不同的Queue当中, 一个是category页面(共二级), 一个是内容页。
有兴趣可以看一下源代码的实现。
但是有些网站并不能考URL 来区分, 这时候可以考虑自定一个queueAssignmentPolicy, 修改SRPING XML配置,
<!-- QUEUE ASSIGNMENT POLICY --> <bean id="queueAssignmentPolicy" class="com.spider.util.CustomQueueAssignmentPolicy"> <property name="forceQueueAssignment" value="" /> <property name="deferToPrevious" value="true" /> <property name="parallelQueues" value="10" /> </bean>
这里我是继承SurtAuthorityQueueAssignmentPolicy,由于category页面URL包含all-ebo, 我就用第六个Queue, 其他内容页以html结尾, 我就用hashcode 取余数来分配到哪一个Queue.
public class CustomQueueAssignmentPolicy extends SurtAuthorityQueueAssignmentPolicy { private static final long serialVersionUID = -282094213180482046L; private static final Logger logger = Logger .getLogger(CustomQueueAssignmentPolicy.class.getName()); @Override protected int getSubqueue(UURI basisUuri, int parallelQueues) { if (basisUuri.toString().contains("all-ebo")) { return 6; } else if (basisUuri.toString().endsWith(".html")) { int hashCode = basisUuri.toString().hashCode(); return Math.abs(hashCode) % 3; } return super.getSubqueue(basisUuri, parallelQueues); } }
虽然我写的很简单, 但是经过测试category和内容页都是很公平的处理, 内容页不会阻塞category页面的处理, 速度自然块了一些。
来自:http://laravel.iteye.com/blog/2052920
相关推荐
2. **Heritrix架构**:Heritrix采用模块化设计,包括种子管理器、URI调度器、爬取策略、处理器链、存储模块等。每个模块都有其特定功能,如种子管理器负责管理起始抓取URL,调度器负责控制爬取速率和优先级。 3. **...
Heritrix的工作原理是通过模拟浏览器行为,逐个访问网页并按照预设的策略下载页面。它支持HTTP、HTTPS、FTP等协议,并可以处理重定向、Cookies和登录认证。用户可以通过配置文件定义爬取规则,例如深度限制、URL过滤...
- **爬行策略**:Heritrix支持多种爬行策略,如广度优先、深度优先等,可以根据需求选择合适的策略。 - **爬行范围**:通过种子URL和排除规则来控制爬行范围,防止爬虫超出预定的网站或页面。 - **抓取模块**:...
- **模块化架构**:Heritrix的组件可以通过配置文件进行添加、删除或修改,如爬行策略、解析器、存儲策略等,提供了极大的灵活性。 - **爬行策略**:Heritrix支持多种爬行策略,如深度优先、广度优先,甚至可以...
在Heritrix 1.14.2中,用户可以通过XML配置文件来定制爬行策略。这些配置文件可以设置爬虫的行为,如设定爬行速度、定义种子URL、选择要抓取的文件类型、排除特定的URL模式等。此外,Heritrix还提供了丰富的插件系统...
### Heritrix爬虫安装部署知识点详解 #### 一、Heritrix爬虫简介 Heritrix是一款由互联网档案馆(Internet Archive)开发的开源网络爬虫框架,它使用Java语言编写,支持高度定制化的需求。Heritrix的设计初衷是为了...
Heritrix提供了三种策略来识别已抓取过的页面。策略一是基于URI和摘要值的哈希表对比;策略二是利用content-length变化进行判断;策略三是通过比较链接到的页面摘要值来避免抓取重复页面。TrapSuppressExtractor是...
总的来说,Heritrix工程在Eclipse中的运行使得开发者可以专注于爬虫的逻辑和策略,而无需关心底层的技术细节。这大大简化了开发流程,提高了工作效率。通过深入理解和熟练运用Heritrix,你可以构建自己的网络爬虫,...
Heritrix的灵活性允许用户通过配置不同的模块和策略来实现定制化爬取。这可能包括设置起始URL、定义抓取规则(如遵循或忽略某些链接)、设置下载速率限制以及选择如何处理不同类型的网络内容(如HTML、图片、PDF等)...
对于高级开发者来说,Heritrix的可扩展性允许自定义处理器、策略和过滤器,以实现定制化的网络抓取需求。例如,你可以创建自己的URI选择策略,以决定哪些网页应该被爬取,或者编写自定义的抓取模块,处理特定的网页...
Heritrix支持通过XML配置文件来定义爬取规则,包括深度限制、URL过滤、重试策略等。此外,它还提供了一个命令行界面和Web管理界面,方便监控和控制爬虫的运行状态。 在运行Heritrix时,需要注意的常见问题包括: - ...
6. **存储与归档**: Heritrix可以配置不同的存储策略,如本地磁盘存储、数据库存储或云存储。你需要设置存储路径、文件格式和备份策略。 7. **日志与监控**: 设置合适的日志级别和位置,以便于跟踪和分析爬虫运行...
Heritrix 支持各种复杂的抓取策略和规则,如深度优先、广度优先,以及各种过滤器和钩子,能够有效地抓取互联网上的资源。它能够处理大规模的网页抓取任务,并支持对抓取内容的归档管理。 综合Lucene和Heritrix,...
Heritrix支持多种策略和模块,如深度优先和广度优先的爬行策略,以及基于正则表达式或DOM结构的URL过滤器。此外,它还提供了丰富的接口,允许开发者编写自定义的模块,如新的爬行策略、内容处理器或存储适配器。这...
3. **配置与策略**:Heritrix通过XML配置文件定义爬取行为,如设置种子URL、选择爬取策略、过滤规则等。策略可以定制,比如深度优先、广度优先、基于链接关系的爬取等。 4. **链接管理**:Heritrix使用Crawler-...
启动命令通常会包含Java内存分配和Heritrix的安装路径。例如,下面是一个示例的批处理文件内容: ```batch java -Xmx512m -Dheritrix.home=e:\\heritrix -cp "E:\\heritrix\\lib\\*" ``` 这里,`-Xmx512m`设置了...