一个框架,一个领域 一个好的框架必然凝聚了领域知识。WebMagic的设计参考了业界最优秀的爬虫Scrapy,而实现则应用了HttpClient、Jsoup等Java世界最成熟的工具,目标就是做一个Java语言Web爬虫的教科书般的实现。
如果你是爬虫开发老手,那么WebMagic会非常容易上手,它几乎使用Java原生的开发方式,只不过提供了一些模块化的约束,封装一些繁琐的操作,并且提供了一些便捷的功能。
如果你是爬虫开发新手,那么使用并了解WebMagic会让你了解爬虫开发的常用模式、工具链、以及一些问题的处理方式。熟练使用之后,相信自己从头开发一个爬虫也不是什么难事。
因为这个目标,WebMagic的核心非常简单——在这里,功能性是要给简单性让步的。
微内核和高可扩展性 WebMagic由四个组件(Downloader、PageProcessor、Scheduler、Pipeline)构成,核心代码非常简单,主要是将这些组件结合并完成多线程的任务。这意味着,在WebMagic中,你基本上可以对爬虫的功能做任何定制。
WebMagic的核心在webmagic-core包中,其他的包你可以理解为对WebMagic的一个扩展——这和作为用户编写一个扩展是没有什么区别的。
注重实用性 虽然核心需要足够简单,但是WebMagic也以扩展的方式,实现了很多可以帮助开发的便捷功能。例如基于注解模式的爬虫开发,以及扩展了XPath语法的Xsoup等。这些功能在WebMagic中是可选的,它们的开发目标,就是让使用者开发爬虫尽可能的简单,尽可能的易维护。
官网:http://webmagic.io/
中文文档:http://webmagic.io/docs/zh/posts/ch1-overview/thinking.html
实战:https://www.cnblogs.com/loaderman/p/11847467.html
PageProcessor里的getSite()可以返回site,site可以设置sleepTime、acceptStatCode等参数。acceptStatCode决定网页抓取时什么状态码是被认可的,不会打断Pipeline的process(ResultItems resultItems, Task task),可以看Spider的onDownloadSuccess(Request request, Page page)。Site和Feign框架一样默认使用GZIP,可以看Site的private boolean useGzip = true;。
为了防止对象转JSON时URL中的特殊字符被转义,可以用gson包的new
GsonBuilder().disableHtmlEscaping().create().toJson(object);。
—等字符会被双重转义,可以用StringEscapeUtils.unescapeHtml(StringEscapeUtils.unescapeHtml(content))双重反转义。page.getHtml()里还没有被转义,但page.getHtml().select(new Xpath2Selector(xpath))执行后会被转义。