• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

WebFetch: 无依赖极简网页爬取组件,能在移动设备上运行的微型爬虫。 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

WebFetch

开源软件地址:

https://gitee.com/hexleowang/WebFetch

开源软件介绍:

WebFetch

无依赖极简网络爬虫组件,能在移动设备上运行的微型爬虫。

WebFetch要达到的目标:

  • 没有第三方依赖jar包
  • 减少内存使用
  • 提高CPU利用率
  • 加快网络爬取速度
  • 简洁明了的api接口
  • 能在Android设备上稳定运行
  • 小巧灵活可以方便集成的网页抓取组件

使用文档

WebFetch的使用非常简单,让小白用户快速上手,WebFetch为用户配置默认页面处理方法,默认将抓取到的页面信息使用System.out.print输出到控制台(通过配置PageHandler修改默认操作)。

启动代码:

WebFetch webFetch = new WebFetch();webFetch.addBeginTask("https://github.com").start();

停止代码:

webFetch.close();

WebFetch执行start()方法后不会阻塞程序执行,可以加入多个网页地址,目前支持http与https,至少需要一个起始地址。
ps 当前版本(webfetch_v0.0.1)稳定运行环境为Java桌面环境

WebFetch高级配置

WebFetch提供了许多实用的设置接口,支持使用链式调用方法进行设置。以下给出最常使用方法的说明与示例。

  • addBeginTask(String url)
    网页抓取任务的输入方法,可以多次调用加入起始地址,通过传入不同的参数,比如Cookie的设置,网页编码方式设置等,也可以直接传入Request对象(Request包含请求的所有信息,可以通过set的方式设置)。
//最简单的调用方式是直接传入urlwebFetch.addBeginTask("https://github.com");
  • addRule(String pattern)
    添加URL抓取规则,可以加入多个规则,多个规则之间是“与”的关系,采用正则表达式进行验证,解析得到的URL必须通过验证才能加入到新的任务队列。例如:
//只抓取github.com下,带有p关键字的URL,其他解析出来的URL直接丢弃webFetch.addRule(".*?github\.com.*?p.*?");
  • setMaxPageLayer(int max)
    设置抓取网页的层次,从0开始为起始地址一直到n,当为负数时则无限层数。这项设置是WebFetch特别设计的,不完全统计其它爬虫基本没有此项功能。网页抓取任务使用队列进行调度,狭义的广度优先(其实就是为了能抓取盗版小说准备的特殊接口)。
//使用层的设置可以很方便的抓取目录内容,//例如,设置抓取两层内容,以新闻目录页面为入口,//则其只抓取第一层的新闻目录以及第二层页面的新闻内容,避免写复杂的规则webFetch.setMaxPageLayer(1);

例如:网站结构如下(A,B,C...均代表网页)

layer 0   1   2   3      A---B          |-C---E---F          |-D---G

A是使用addBeginTask传入的起始地址网页,A为第0层,B,C,D为第1层,E,G为第2层,F为第3层。

	//设置A为起始页面,搜索层次为两层(第一层为0)	webFetch.addBeginTask("http://A").setMaxPageLayer(1).start();

抓取得到的页面集合为{A, B , C , D}。WebFetch会在内存中记录已经访问过的url,避免出现重复循环访问的情况。

  • setPageHandler(PageHandler pageHandler)通过传入实现PageHandler接口对象自定义抓取到页面后的处理方法。WebFetch实现了默认的DefaultPageHandler,直接通过System.out.print打印到控制台,为小白用户准备的懒人接口,通过传入自定义的PageHandler可以取消默认操作。
public interface PageHandler {	//finish接口返回抓取到的页面(只返回StatusCode=200的请求页面)	public void finish(Page page);	//此借口是为需要使用到数据库进行存储进行设计的,在调用WebFetch.close()后会调用此接口	public void close();}

PageHandler用户可以使用此接口处理被抓取到的页面,例如数据库存储等操作。WebFetch默认开启多个线程进行页面处理(与http请求线程不同),所以用户可以放心的实现此方法,不必担心是否要实现非阻塞的方法(考虑到资源受限,才用线程池进行管理,如果所有线程都阻塞则任务进入等待队列,直到有线程空闲)。

  • setURLParser(URLParser parser)
    通过传入页面自定义页面URL解析实例改变默认的页面URL抽取规则。
public interface URLParser {	public Vector<Request> parse(Request parentPage); }

WebFetch使用正则表达式抽取<a>href="..."指定的URL方法,目的是为减少对第三方的依赖,用户可以自行实现此接口,比如加入jsoup进行分析。
Request提供public static Request createSub(String mUrl , Request parentRequest)方法,实现处理那些相对地址情况。

比如:http://abc.def/web/index.html 中存在一个连接<a href="./page.html">,抓取到的URL为./page.html而用此URL发起的http请求是错误的,使用Request.createSub方法可以修正此URL为http://abc.def/web/page.html

  • 其它设置项目说明:
public class WebFetch {	...	//设置网络爬虫的线程数量,与页面处理分离,实现专一的网络爬取工作,默认线程数为5	public WebFetch setThreadSize(int max);	//设置一个页面的重试次数,默认为不重试	public WebFetch setRetryTimes(int times);	//代理设置	public WebFetch setProxy(String host , int port , Proxy.Type type);	//设置发起http请求的次数(无论正确与错误),默认为不限制	public WebFetch setMaxTaskSize(int max);	//设置连接超时时间,默认为8秒	public WebFetch setConnectionTimeout(int timeout);	//设置页面读取超时时间,默认为10秒	public WebFetch setReadTimeout(int timeout);}

关于

第一个版本还需要不断改进与完善,希望大家提出宝贵的改进意见,感谢大家的支持。

联系方式:[email protected]


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap