日志

我的第一个开源项目

 来源    2019-10-09    1  

地址

gitee地址

项目介绍

  1. 一个简单的多线程爬虫,具有断点爬取功能,以及自动推测网页编码功能

  2. 使用jdk11+,maven构建,我使用jdk11.0.2时会报错,见https://bugs.openjdk.java.net/browse/JDK-8213202,jdk8却没有,jdk本身的bug,所以我换了最新版的jdk11.0.4

  3. 解析网页主要使用了Jsoup和正则表达式,所以这两个需要会用

使用说明

  1. 使用见example包中的示例,我就只说一下思路:先有一个或多个具体的初始链接,假如说把这些初始链接的页面记为seed,然后定义一个规则,规则主要由Jsoup选择器(类似于css选择器)、正则、type组成。seed页面应用规则,自动获取所有符合规则的链接,记为page1(假设type设置成了page1),然后所有的page1页面再应用下一个规则,依此类推,想要多少层都可以,注意,每层的type都不应该与其他层的type相同

  2. 定义规则自动获取下层链接,有时候可能得不到想要的结果,这时候可以试试手动获取,然后通过调用Page中的addNext...方法将手动获取的链接添加到下一层

  3. Page中还有3个参数是函数式接口的方法,作用是筛选链接,携带信息到下一层,链接映射,具体见方法说明和示例

  4. 如果以上没有说明白,就自行查看源代码,源代码比较简单

示例

ZongHeng zh = new ZongHeng();
zh.setCacheDirectory("f:/spider");
zh.config().setInterval(50).setBreakPoint(false);
//添加一个初始链接
zh.addSeed("http://www.zongheng.com/");
//添加一个规则,按照这个规则在初始链接页面取链接,并将取到的链接代表的页面记为category
zh.addRule("ul#data-groupdom li a", "http://www.zongheng.com/category/\\d+.html", "category");
//添加规则,在category页面取链接
zh.addRegex("http://book.zongheng.com/book/\\d+.html", "book");
zh.start();

局限

由于自动缓存的原因,编写好规则并爬取后,如果再次修改规则,如加入筛选条件等,由于从缓存中取数据,此时筛选条件对已经爬取的网页不起作用,要使它起作用,请删除缓存

感谢

相关文章
我的第一个开源项目-logger4Net
日志  学会学习,学会分享,学会创造. 这我的第一个开源项目.以前总觉得开源离自己很远,但通过不断学习发现,其实自己已经走在这条路上.思想就在那,只要懂得学习,懂得分享,就会懂享受创造的快乐感与殷实感. ...
第一次玩github,第一个开源小项目——xxoo
日志引言 由于最近的工作写代码比较少,这让LZ产生了一丝危机感.于是便想找一个办法可以没事自己写写代码,自然而然就想到了github.接下来便是一阵捣鼓的过程,其实整个过程很快,主要过程就是注册一个账号, ...
安装开源项目 MultiType (基于 RecyclerView)出现的各种问题 -- 自己的第一篇博客
日志一.引入开源项目的方式 使用开源项目 MultiType 的两种方式: 1.maven引入:在主Module 的 build.gradle 中加入 dependencies { ...... com ...
c++ 您能否推荐任何使用单元测试对源进行广泛测试的开源项目?
问答通过编写程序来学习编程.但是代码阅读被认为是另一种好的学习方式.我想通过阅读,检查现实世界的代码来提高我的单元测试技能.你能推荐一些开源项目,在这些项目中,使用单元测试对源进行了广泛的测试吗? 我对用 ...
c# – 寻找并行化的开源项目
问答对于作业,我需要将项目并行化,并记录我的工作和成果.所以,我正在寻找一个理想的开源C#或Java项目,需要大约60个小时的工作,(相当小 – 对于概括而言,不知道如何将其纳入考虑,考虑到我还在学习)和 ...
持续集成 – Sourceforge上的开源项目的持续集成
问答我使用Mercurial在Sourceforge.net上托管了一个项目. 是否有任何免费的持续集成服务可以与开源项目连接,并在每次推送到上游时启动构建? 我对travic-ci.org(github ...
ADB,Android Debug Bridge,Android开源项目中的组件源代码在哪里
问答从this article开始,我知道Android Debug Bridge由三个组件组成: >亚行客户 > ADB服务器 >设备或模拟器上的守护进程 我想从各自的源代码中深入了解 ...
elasticsearch – 什么是最好的Kibana多租户免费开源项目?
问答我正在尝试为Kibana添加基于角色的访问控制,以便为不同类型的用户提供不同的权限和仪表板,我找到了这些项目: > Elastic Shield插件 >搜索Guard Kibana多租户模 ...
在Python开源项目中合并第三方库的首选常规方法是什么?
问答我正在为WSGI框架开发一个新的Python身份验证库,并且想要使用python-openid以及其他一些第三方库.我看到两个选项: >在我的库中分发第三方库的副本(通过GIT子模块) > ...
开放源码 – 开源项目的安装和管理的最佳实践
问答今年晚些时候,我想发布一个我一直在开发的PHP框架作为开源.我使用源代码控制(SVN),但是它是非常有限的.我自学,我自己开发,没有与大型团队合作的经验.我有一些想法可以帮助项目取得成功,但我对某些细 ...
哪些C开源项目具有非常高的代码质量?
问答我想在开源C世界列出一些最优质的项目.我知道这个问题是非常广泛的,但它可以作为从高质量例子中学习的好资源.::Boost,FastFormat,Loki,Pantheios,POCO,Qt,STLSo ...
测试 – 您支持哪些开源项目,或者是什么阻止您支持项目?
问答我经常觉得我应该为某些项目做出更多贡献,因为我每天都依赖它们,但我常常觉得自己会受到影响. 您是否有任何项目,您不是主要的开发人员,但确实提交补丁? 任何阻碍你伸出援手的绊脚石?::贡献并不仅仅意味着 ...
单元测试 – 指出一些开源项目*与*(单位)测试
问答作为参考,我正在通过单元测试寻找一些开源项目. 编辑 – 当然必须有更多!::SQLite has a very comprehensive test suite.它本身可能不是单元测试,但是相当全面 ...
.net – 任何人都可以推荐一个使用Entity Framework设计的开源项目?
问答任何人都可以通过实体框架推荐一个设计良好的开源项目?我对实体框架4有一些口味,但我很想知道人们在一些大型项目中如何使用这个框架. 非常感谢. 道明::虽然不大,您可以查看All-In-One Code ...
jenkinsvs Travis-CI 你将使用哪一个开源项目?
问答对于我的项目,我需要选择Jenkins和Travis-CI.我已经使用Jenkins多年,但我还读了关于Travis-CI的好评论. 你将使用哪一个开源项目?两者的主要优点或优点是什么?::Travi ...
谷歌笔记本 – 哪个开源项目最像谷歌笔记本?
问答众所周知,谷歌stopped开发了谷歌笔记本.虽然存在很多替代方案,但没有人满足我(见下面的原因).许多人建议谷歌开源,但谷歌到目前为止没有回应.所以我想转向开源世界来开发一个.简而言之,Google ...
untagged – 有趣的开源项目作为系统管理员做出贡献?
问答我知道作为系统管理员,您可以为开源项目(如Debian和Fedora)做出贡献.加入他们的基础设施小组并帮助管理.我只是想知道是否还有其他有趣的开源项目/社区.具有空闲时间的系统管理员可以贡献并提高他 ...
svn – 有没有办法将我的代码“修补”到开源代码上,所以当开源项目改进我的更改时会在本地添加?
问答不知道怎么问这个.我希望在一个成熟且积极更新的开源项目的基础上,使用它作为调整和学习的基础.我希望能够将代码添加到我的本地源代码,但能够在保留我的附加功能的同时更新核心源代码. 目标是保持基础始终是最 ...
c – Google是否有任何理由在其开源项目中使用cc扩展而不是cpp?
问答Google是否有任何理由在其开源项目中使用cc扩展而非标准cpp?我也应该这样做吗?::这完全取决于个人偏好,至少对于启动项目的人来说是这样.无论你选择什么,都要保持一致.
许可 – 关于开源项目版权问题的问题
问答我是一个开源项目的作者,该项目是根据GPL2发布的.我开始独自工作2年. 在我的每个源代码文件中,我在其顶部附加了以下信息. /* * This program is free software; y ...