自己写的一个开源爬虫框架,取名为Slit。现在的爬虫框架确实有很多,例如Nutch,Heritrix,webMagic等等我为什么又要自己写一个呢?这几个爬虫框架确实都不错,网上也有很多关于它们的评价,但是我发现它们中有很多功能我用不到,有些地方扩展性有点限制,然后自己一想搞个适合自己的轻框架,于是准备这个练手的项目Slit。
下面我对Slit项目做一些基本的介绍,包括项目的架构,内部运行逻辑,特点,怎么使用,和传统爬从比较等等。
1, Slit 的模块介绍
2, Slit 内部运行逻辑
2.1,Fetcher模块,主要负责从url等待队列头取url,然后去下载页面,把整个页面结果放入已经下载页面队列。
2.2,Analyzer模块,主要负责从已经下载页面,提取想要的结果,放入抓取结果队列,另外再找出本页面上的其他连接,放入url等待队列。
2.3,Store模块,主要负责从抓取的结果队列中取出结果,然后根据用户自定义来怎么处理这些结果。
3,Slit的使用
3.1,定义一个类来继承AbstractNodeFilter,需要实现方法accept(),此方法用来提取页面上的节点。不同的用户可能想提取的结果都不同,这里的提取内容开放给用户自己定义。
3.2,定义一个类来继承AbstractFileStore,需要实现方法processResultNode(),此方法就是对抓取结果的处理。
3.3,启动Slit项目,
Config config = new Config();
// 需要爬取的url列表
config.setStartUrlList(Arrays.asList(“https://git.oschina.net/explore/recommend”));
config.setNodeFilterClass(MyNodeFilter.class); // 步骤一中自定义的类
config.setFileStoreClass(MyFileStore.class); // 步骤二中自定义的类
InitSlit slit = new InitSlit(config);
slit.start(); // 启动, 可以设置不同模块线程数,详见类config
4,Slit的使用(带浏览器)
4.1,定义一个类来继承AbstractNodeFilter,需要实现方法accept(),此方法用来提取页面上的节点。不同的用户可能想提取的结果都不同,这里的提取内容开放给用户自己定义。
4.2,定义一个类来继承AbstractFileStore,需要实现方法processResultNode(),此方法就是对抓取结果的处理。
4.3,定义一个类来继承AbstractBrowserAction,需要实现方法userBrowserAction(),此方法是定义浏览器爬取行为的。
4.4,使用chrome浏览器,下载chrome对应系统的webDriver驱动文件。(下载地址:http://chromedriver.storage.googleapis.com/index.html)
4.5, 启动Slit项目,
Config config = new Config();
config.setNodeFilterClass(MyBrowserNodeFilter.class); // 步骤一中定义的类
config.setFileStoreClass(MyBrowserFileStore.class); // 步骤二中定义的类
config.setInBrowser(true); // 设置浏览器为true
config.setBrowserAction(MyBrowserAction.class); // 步骤三中定义的类
config.setBrowserDriverPath(“/”); // chrome对应系统的webDriver文件的路径
InitSlit init = new InitSlit(config);
init.start();
5,Slit的特点
5.1,较好的扩展性,不同模块之间解耦合,非常适合二次开发自己的爬虫框架。
5.2,使用上配置简单,容易上手,可配置是否带浏览器模拟真实抓取,项目非常轻。
5.3, 可配置多线程,定义爬取深度,自动过滤重复url。
5.4,相比较传统爬虫,Slit能够解决动态页面(包含ajax局部页面),cookie信息,登录等问题。
6, Slit使用到的技术
6.1,Slit主要依赖两个jar包,“org.htmlparser:htmlparser:2.1“ 和”org.seleniumhq.selenium:selenium-java:2.45.0“ ,其他还包含一些log日志包等。
6.2,不同模块之间通过线程安全非阻塞队列协同工作。
7, Slit的demo演示 和 源码下载
项目分包结构图如下,其中test包中有两个demo的例子,分别是不带浏览器和带浏览器爬虫的例子。依赖的jar包在src/test/lib下面都可以找到。代码在github上地址是:https://github.com/DonFF/Slit,开源中国上的地址是:https://git.oschina.net/qifeifei/Slit,另外附件我也上传了源代码和说明文档。
更多的讨论可加入群共同学习,群号:213109134
相关推荐
目的:观察SLIT过程中变应性鼻炎患者的皮肤组织和皮刺试验红斑的变化。 方法:自2010年3月起,将103例变应性鼻炎发作的SLIT患者分为四个年龄段,分别在治疗前,治疗后6个月,1年和2年分别测量皮脂和红斑的直径。 ...
Slit3对成纤维肉瘤HT1080细胞的侵袭转移的影响,李彬,张园,轴突导向因子Slit是一组分泌型的蛋白,主要在神经系统的发育过程中参与调控轴突定向,分支及神经元的迁移等过程。近年来发现Slit也�
Slit2是一种分泌型蛋白,它属于轴突导向因子Slit家族,在细胞生物学和肿瘤学研究中占有重要地位。Slit家族蛋白最初在果蝇的神经系统发育过程中被发现,并且它们主要通过传递排斥性信号来调控神经元和轴突的迁移。在...
骨髓间充质干细胞治疗缺血性脑血管病及Slit-Robo通路促进血管 再生的研究进展 ,王晓鹤,周玉云,骨髓间充质干细胞作为神经干细胞的来源,是具有多分化潜能的干细胞,它主要存在于骨髓中,近日,关于干细胞移植治疗...
在探讨过表达Slit2基因与老年小鼠淀粉样蛋白(Aβ)产生沉积关系的研究中,科研人员利用了功能基因PCR芯片技术。该研究的目的在于了解Slit2基因过表达是否会导致与阿尔茨海默病相似的行为和认知损伤,以及该基因与...
在探讨共形几何时,狭缝映射(Slit Map)的概念显得尤为关键,它为理解多连通曲面映射到平面提供了全新的视角和方法。 狭缝映射的核心在于将一个多连通曲面通过一个特殊的映射手段转换为平面,其中每个边界分支都被...
血清浓度对骨髓间充质干细胞培养及Slit2表达的影响,周玉云,柴源,本研究旨在探讨不同血清浓度对骨髓间充质干细胞(MSCs)培养以及Slit2表达的影响,进一步研究脑梗死后MSCs可能的作用机制。方法:采用密
Dissipative particle dynamics study of multicompartment micellar solutions in a slit,崔媛媛,刘大欢,Multicompartment micelles are a new family of micelles that may find wide applications; however, ...
Numerical simulation and field synergy analysis of heat transfer performance of radial slit fin surface,周俊杰,吴志根,In this paper, the finite volume method is used to numerically simulate the ...
A double-slit ghost interference experiment performed on an entangled resource using type-II non-collinear degenerate spontaneous parametric down-conversion (SPDC) is demonstrated. The influence of ...
A position sensor based on slit imaging is proposed and its measurement principle is described. An imaging slit is illuminated by a collimated laser beam with square-wave modulation and imaged on a ...
全屏 Slit Slider Rails Gem 安装 将此行添加到应用程序的 Gemfile 中: gem 'fullscreenslider-rails' 然后执行: $ bundle install 用法 Fullscreen Slit Slider 依赖于 jQuery,所以请确保你的 Gemfile 中有...
We propose a spatial diffraction diagnostic method via inserting a millimeter-gap double slit into the collimated terahertz beam to monitor the minute variation of the terahertz beam in strong-field ...
The GASVM program contains three files
光学涡旋作为光学领域的一个前沿研究方向,一直以来备受瞩目。涡旋光束区别于传统光束的地方在于其具有独特的螺旋波前结构,这种结构决定了涡旋光束在传播过程中会携带着特殊的相位奇点。相位奇点的存在赋予了涡旋...
【标题】"Gruppe-4TheA_SLIT:H14 - 4TheA 团体项目" 提供的信息表明这是一个团队项目,很可能属于一个学习小组或工作团队的成果。项目名称中的 "SLIT" 可能是项目代号或者特定术语,而 "H14" 可能代表项目的阶段、...
We present the single-slit diffraction of the arbitrary vector fields with different parameters m, n, and f0 theoretically and experimentally. The single slit covers the polarization singularity in ...