一、nutch和crawler4
nutch的人比较多,适合大规模海量数据的爬取。
crawler4j是一个短小精悍的爬虫。
二、下载crawler4j源码
项目主页:https://code.google.com/p/crawler4j/。
用Git把源码下下来导入eclipse
爬虫业务逻辑在src/main/java下,可直接运行src/test/java下edu.uci.ics.crawler4j.examples.basic.BasicCrawlController
架构很清晰:
edu.uci.ics.crawler4j.crawler 基本逻辑和配置
edu.uci.ics.crawler4j.fetcher 爬取
edu.uci.ics.crawler4j.frontier URL队列相关
edu.uci.ics.crawler4j.parser 对爬取结果进行解析
edu.uci.ics.crawler4j.robotstxt 检查robots.txt是否存在
edu.uci.ics.crawler4j.url URL相关,主要是WebURL
edu.uci.ics.crawler4j.util 是工具类
三、源码分析
Crawler包
Crawler.CrawController 控制爬虫,先addseed,再开启多个爬虫,并不断监听各个爬虫存活状态。
Crawler.WebCrawler 爬虫
1. Run():不断循环,每次从Frontier拿50条url,对每条url,processPage(curUrl)。
2. processPage(curURL):用PageFetcher.fetch爬取网页,如果curURL有redirect,则将redirect url的url加入Frontier,以后再调度;如果爬取正常,则先进行parse,生成Page,将新urls降入Frontier(新加入url的深度此时确定),调用visit(Page){用户自定义操作}。
Crawler.Configurations 读取crawler4j.properties中的信息
Crawler.PageFetcher 启动IdleConnectionMonitorThread,用fetch(Page, ignoreIfBinary),爬取单个Page页面。是一个static类。
Crawler.Page 一个页面
Crawler.PageFetchStatus 单个页面爬取的配置,如返回爬取状态数字所代表的含义等等。
Crawler.HTMLParser 对HTML源码进行parse,存入Page中。
Crawler.LinkExtractor 抽取出一个HTML页面中包含的所有link。
Crawler.IdleConnectionMonitorThread 用来监听连接器(用来发送get请求,获取页面),其connMgr则负责HTML请求的发送。
url包
url.WebURL 代表一条url,内含docid, depth, url值
url.URLCanonicalizer 将url进行normalize
Frontier包
Frontier.Frontier
Init() 如果resumable,则从env所指home中读取已处理过得urls,scheduleAll加入调度workQueue中。
Frontier.workQueues 要处理的页面集,如果resumable,在构造时会打开对应env中的database(PendingURLsDB),获取上一次遗留的未处理的urls。
Frontier.inprocessPages 当前正在处理的页面集,继承workQueues,存入InProcessPagesDB数据库。
Frontier.DocIDServer 对应数据库DocIDs,记录已经见过的页面url。
处理流程:newurl--->workQueues--->inprovessPages--->delete
Robotstxt包,用来判断url是否被允许。
Util包,用来提供一些小工具。
注意点:
1. seed页面深度为0。
2. url去重利用的是DocIDServer.newdocid(url),如果该值大于0,则表示该url以前见过。通过这个机制,所有以前见过的页面都可以被记录识别。
3. 当设定resumable后,程序跑完后就会把PendingURLsDB和DocIDs保存下来。
4. 如果不设定resumable,在运行程序前,会把env对应的home目录清空。
分享到:
相关推荐
`crawler4j` 支持多种配置选项,包括深度限制、并发级别、URL过滤规则等,这使得它能够适应各种规模和需求的爬虫项目。 ### 2. `crawler4j` 主要组件 - **WebCrawler**: 这是用户需要自定义的关键类,用于定义爬取...
在实际抓取过程中,可能会遇到各种网络问题或服务器错误,`crawler4j`提供了相应的异常处理机制,帮助开发者妥善处理这些问题。 9. **自定义扩展**: 通过继承`WebCrawler`类,你可以根据需求定制爬虫的行为,...
在实际应用中,`crawler4j` 可用于各种场景,如学术研究中的网络文本挖掘、商品价格监控、社交媒体分析等。通过理解并熟练使用`crawler4j`,开发者可以有效地从互联网上获取和处理大量信息,为数据分析和决策提供...
通过分析和运行这些代码,可以更好地理解如何利用crawler4j来完成实际的网络爬虫项目。 总之,利用crawler4j爬虫框架爬取网易公开课,不仅涉及到网页抓取的基本原理和技术,还涵盖了多线程编程、网页解析、数据存储...
通过深入研究源码,开发者可以了解爬虫的内部工作机制,自定义爬取逻辑,并将其应用于实际项目中,例如数据分析、搜索引擎构建等。同时,Crawler4j的易用性和灵活性使其成为Java爬虫开发的首选工具之一。
本文介绍了如何基于Crawler4j和Quartz框架构建一个分布式爬虫系统。分布式爬虫系统是为了解决大规模数据采集的效率和稳定性问题。在大数据时代,网络爬虫技术是数据分析的重要基础,通过自动化方式抓取网络数据,...
在实际应用中,Crawler4j常被用于数据挖掘、搜索引擎索引更新、竞争对手分析、网站监控等多种场景。其开源性质意味着开发者可以自由地查看和修改源代码,以满足特定需求,同时也可以借鉴社区中的最佳实践和优化方案...
Java爬虫技术是互联网数据挖掘的重要工具,Crawl4J作为一种轻量级、多线程的网络爬虫框架,为开发者提供了便捷的方式来构建自己的爬虫应用程序。本文将深入探讨Crawl4J的基本概念、核心功能以及如何使用它来实现网络...
8. 网络爬虫框架:在实际应用中,可以利用现有的网络爬虫框架如WebMagic、Crawler4j等快速构建自己的网络爬虫,这些框架提供了爬取、解析、存储、管理等功能的封装。 最后,文档中包含免责申明,强调所提供的资料仅...
通过学习这个基础的新闻爬虫,你可以了解到如何构建一个简单的网络爬虫,以及如何使用`crawler4j`来提升爬虫的效率和可维护性。同时,对于Java开发者来说,这也是一个实践网络编程和数据解析的好机会。在实际应用中...
在这个项目中,我们将探讨一个专门用于获取社交网络文件的网络爬虫应用程序,它基于Java编程语言实现。 首先,让我们深入理解网络爬虫的工作原理。网络爬虫通常由以下几个核心组件构成: 1. **种子URL**:爬虫的...
4. **Crawler4j**:一个简单易用的Java网络爬虫框架,适用于教育和研究领域。 #### 五、总结 通过上述内容,我们了解了Java网络爬虫的基础概念、关键技术以及实战技巧。Java网络爬虫不仅可以帮助我们高效地获取...
Jsoup在网络爬虫领域中扮演着重要角色,因为它的API设计简洁,易于理解和...在实际项目中,结合其他库如HttpClient或OkHttp进行网络请求,以及使用如Jackson或Gson进行数据序列化,可以使网络爬虫功能更加强大和完善。
在实际应用中,网络爬虫还需要处理一些高级问题,例如: - **反爬机制**:很多网站有反爬策略,如验证码、IP限制、User-Agent检测等,需要编写代码来应对这些挑战。 - **多线程/异步**:为了提高爬虫效率,可以采用...
该设计要求学生以特定领域的主题的信息检索为研究对象,在分析研究网络爬虫原理和核心技术的基础上,设计一套面向特定主题的网络爬虫系统,有效解决使用通用搜索引擎所产生的信息收录不完全及索引更新不及时而导致的...
每个环节都需要针对性的策略和技术,如选择Crawler4j、libcurl或cpp-httplib进行框架和库的决策,设置超时和重试机制来增强网络请求的稳定性,以及使用Gumbo和htmlcxx进行HTML解析并处理编码问题。通过不断学习和...
Java 网络爬虫是数据挖掘和信息分析领域中不可或缺的一部分,尤其在大数据时代,爬虫技术的应用越来越广泛。本文将对Java中常见的爬虫工具和库进行深入的介绍和探讨。 首先,Jsoup(Java Soup)是一个非常实用的...
5. **爬虫框架**:对于更复杂的爬虫项目,可以使用成熟的Java爬虫框架,如WebMagic、Colly和Crawler4j。这些框架集成了HTTP请求、解析、数据存储等功能,并提供了一套完善的配置和扩展机制。 6. **反爬与IP代理**:...
这个"非常强大的Java爬虫源代码.zip"应该包含了以上部分或全部的实现,通过学习这些源代码,开发者不仅可以理解Java爬虫的基本原理,还能学习到实际项目中的最佳实践。不过,实际使用时,应根据具体需求进行调整和...