`
king_c
  • 浏览: 223664 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

crawler4j代码解析

    博客分类:
  • java
 
阅读更多

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源码+实例

    在`crawler4j-master`压缩包中,你应该能找到示例代码。这些例子展示了如何创建和运行一个基本的爬虫。首先,你需要创建一个继承自`WebCrawler`的类,然后重写`visit(Page)`方法。在这个方法里,你可以对页面内容...

    crawler4j-4.0

    这个压缩包包含了`crawler4j`的源代码,这对于学习和理解爬虫的工作原理以及进行定制化开发非常有帮助。以下是对`crawler4j`框架的详细介绍及其主要知识点: 1. **网页爬虫基础**: 网页爬虫是一种自动遍历和抓取...

    crawler4j源码

    【压缩包子文件的文件名称列表】"src"通常代表源代码目录,其中可能包含`crawler4j`的所有Java源文件、配置文件和其他相关资源。在实际开发中,`src`目录下一般会按照包结构划分,如`com.example.crawler4j`,包含`...

    Crawler4j-3.5 源码 类包 依赖包

    Crawler4j-3.5 版本包含了该框架在2014年4月6日从Google Code迁移时的最新源代码、编译后的类包以及依赖的类包。 **1. Crawler4j的核心概念与功能:** - **WebCrawler接口**:这是Crawler4j的核心接口,定义了爬虫...

    crawler4j-4.1-jar-with-dependencies

    【描述】中提到的 "crawler4j示例代码" 暗示了这个压缩包可能包含了使用crawler4j进行网络爬虫开发的示例程序,可以帮助初学者快速理解和应用这个库。同时,"slf4j-simple-1.7.22.jar" 和 "slf4j-1.7.22全文件" 是...

    crawler4j.sample

    1. **源代码**:如Java文件,展示了使用crawler4j库实现爬虫的逻辑,包括种子URL的设置、网页抓取的回调函数、解析HTML的代码等。 2. **配置文件**:可能包含`config.properties`,用于设置爬虫的参数,如爬取深度、...

    最新 Crawler4j是一个开源的Java类库

    5. **可扩展性**:Crawler4j提供了丰富的回调接口,用户可以通过实现这些接口来定制爬取过程中的各种行为,如网页解析、链接提取、数据存储等。 6. **灵活配置**:通过配置文件(如`log4j.properties`),用户可以...

    crawler4j 使用java编写的简单的轻量级网络爬虫

    6. **网页解析**: `crawler4j` 集成了HTML解析库如Jsoup,可以方便地提取和解析网页中的数据。开发者可以通过CSS选择器或者XPath表达式来定位和提取感兴趣的信息。 7. **多线程爬取**: 为了提高效率,`crawler4j` ...

    crawler4j爬虫框架爬取网易公开课

    crawler4j提供了一些内置的解析器,如Jsoup,可以方便地定位并提取出指定元素。 多线程是crawler4j的一大特点,也是爬虫性能优化的重要手段。通过创建多个并发线程,爬虫可以同时处理多个网页请求,大大提高了爬取...

    crawler4j是Java实现的开源网络爬虫

    `crawler4j` 是一个基于 Java 实现的开源网络爬虫框架,它以其易用性、高效性和灵活性而受到开发者的欢迎。这款工具主要用于抓取网页内容,为数据分析、信息提取或搜索引擎构建等任务提供数据源。在本文中,我们将...

    crawler4j抓取页面使用jsoup解析html时的解决方法

    问题的核心在于,`crawler4j`在抓取网页内容时,可能无法自动识别或适配网页的实际编码,导致在解析时出现错误。默认情况下,如果HTTP响应中没有指定编码,`crawler4j`可能会将内容视为UTF-8,而实际上,页面可能是...

    crwaler4j.zip

    【描述】"crwaler4j的学习代码,相关的示例代码在test中"表明这个压缩包里有学习`crawler4j`所需的示例代码,这些代码通常位于`test`目录下,这符合Java项目的标准结构,`test`目录用于存放单元测试和集成测试代码。...

    java爬虫crawl4J代码

    4. **友好的API**:Crawl4J提供了一套简洁明了的API,使得开发人员可以方便地进行页面抓取、解析和存储等操作。 Crawl4J的核心组件包括: - **Scheduler**:调度器负责管理爬取队列,决定下一个要访问的URL。 - **...

    WebCrawler Java爬虫

    此外,还可以使用XML解析库如JDOM或DOM4J来处理结构化的HTML内容。 3. **数据存储**:抓取到的数据通常需要保存以便后续分析。Java爬虫可以选择多种方式存储数据,如文件系统、数据库(如MySQL、MongoDB)、NoSQL...

    百合网data crawler

    9. **日志记录**:项目可能使用Log4j或SLF4J等日志框架,记录爬虫运行过程中的错误信息和其他关键事件,方便后期排查问题。 10. **异常处理**:在开发过程中,良好的异常处理机制能确保程序在遇到错误时能够优雅地...

    appengine-crawl-mapreduce-test:一个简单的多模块appengine项目,学习多模块、crawler4j和map reduce

    Crawler4J的使用使得项目能够高效地抓取互联网上的数据,这对于数据驱动的应用或者需要大量网页分析的项目来说非常有用。 **MapReduce**: MapReduce是一种编程模型,主要用于大规模数据集的并行计算。在Google App...

    解析网易新闻的代码

    至于“crawler4j”,这是一个Java的爬虫框架,虽然在描述中提到,但在本项目中并未直接使用。Python的爬虫库如`Scrapy`或`BeautifulSoup + requests`已经足够完成网页抓取任务。如果要用到Java,可以使用crawler4j...

    zhihu-crawler是一个基于Java的高性能、支持免费http代理池、支持横向扩展、分布式爬虫项目.zip

    7. **日志和监控**:如使用Log4j记录运行日志,通过Prometheus或Grafana进行性能监控。 8. **版本控制**:项目可能使用Git进行版本管理,了解基本的Git操作是必要的。 9. **持续集成/持续部署(CI/CD)**:如Jenkins...

    81个Python爬虫源代码+九款开源爬虫工具.doc

    - crawler4j是简单的Java网络爬虫,提供快速启动多线程爬虫的接口,适用于快速原型开发。 8. **Nutch**: - Nutch是Apache的开源搜索引擎项目,包括Web爬虫功能。它衍生出了Hadoop、Tika、Gora和Crawler Commons...

    非常强大的Java爬虫源代码.zip

    - **Jsoup+Crawler4j**:Jsoup用于解析HTML,Crawler4j则负责爬虫的管理,两者结合可以构建强大的爬虫系统。 3. **反反爬策略**: - **User-Agent伪装**:设置不同的User-Agent,模拟多种浏览器或设备,避免被...

Global site tag (gtag.js) - Google Analytics