爬虫可以做啥就不讲了,这篇主要还是觉得这个技术很有意思,所以找了一篇文档上手,记录下自己的操作历程!
顺便分享出来!给大家一条入门的路径,写的不好请指教!官网:http://webmagic.io/
先介绍下Webmagic框架
webmagic是一个开源的java爬虫框架,目标是简化爬虫的开发流程让开发者专注于逻辑功能的开发。
Webmagic的特点:
1.完全模块化的设计,强大的扩展性
2.核心简单是涵盖爬虫的全部流程,灵活而强大,也是学习爬虫入门的好东西。
3.提供丰富的抽取也去api.
4.无配置,但是可通过pojo+注解形式实现一个爬虫。
5.支持多线程。
6.支持分布式。
7.支持爬取js动态渲染的页面。
8.无框架依赖,可以灵活的嵌入到项目中。
讲讲它的架构结构:(主要还是偏于学习这个框架)
WebMagic项目代码分为核心和扩展两部分。核心部分(webmagic-core)是一个精简的模块化的爬虫实现,
而扩展部分包括一些便利的,实用性的功能,扩展部分(webmagic-extension),提供一些便捷的功能,列如注解模式
编写爬虫等,而且内置了一些常用的组件,偏于爬虫开发。
Webmagic的结构分为:Downloader(下载),PageProcessor(业务处理器),Scheduler(调度程序),Pipeline(管道)四大组件,并由Spider(蜘蛛)将它们彼此组织起来,这
四大组件对应爬虫生命周期,的下载,处理(也就是PageProcessor解析html),管理,持久化等功能。
而Spider则将这几个组件组织起来,让它们可以相互交互,流程化的执行,可以认为Spider是一个大的容器,它也是WebMagic逻辑的核心。
下面讲下四大组件的一个作用:
Downloader
Downloader负责从互联网上下载页面,以便后续处理,webMagic默认使用了ApachehttpClient作为下载工具。
PageProcessor
pageprocessor负责解析页面,抽取有用的信息,以及发现新的链接,webmagic使用Jsoup作为HTML解析工具
并基于开发了解析XPath的工具Xsoup,在这组件中,Pagprocessor对于每个站点每个页面都不一样,是需要使用者定制的部分。
Scheduler
Schelude负责管理待抓取的URL,以及一些去重工作。WebMagic默认提供了JDK的内存队列来管理URL,并yong集合来进行去重。也支持使用Redis进行分布式管理。
Pipeline
pipeline负责抽取结果的处理,包括计算,持久化到文件,数据库等。WebMagic默认提供了“输出到控制台”和保存到文件“两种处理方案
下面就是简单的操作下这个框架爬去页面!
创建一个项目,环境需要jdk8,maven,idea,
导入下面这链两个包,
<dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.7.3</version> </dependency> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-extension</artifactId> <version>0.7.3</version> </dependency>
第二步创建一个爬取类
public class Test1 implements PageProcessor { public void process(Page page) { System.out.println(page.getHtml().toString()); } public Site getSite() { //讲下下面代码的意思。me()作用是创建Site对象,setSleepTime()就是睡觉100毫秒 return Site.me().setSleepTime(100).setRetryTimes(3);//设置重复时间 } public static void main(String[] args) { //代码的意思就是创建一个爬虫,并且需要调用addurl(“你要爬取的网站”)。 Spider.create(new Test1()).addUrl("https://gitchat.csdn.net/activities?utm_source=csdn_toolbar").run(); } }
下面的几张图介绍下常用的api
设置Spider的其他组件(下载,业务处理,调度程序,管道)都是可以通set方法来进行设置。
page代表了从Downloader下载到的一个页面-----可能是html,也可以使json或者其他文本格式的内容,pag是webMagic抽取过程的核心对象,它提供一些方法可提供抽取,结果保存等,
site主要用于定制站点本身的一些配置信息,例如编码,HTTP头,超时时间,重试策略,等,代理等,多可以通过设置Site对象来进行设置。看下图
*爬取指定内容(XPath)
XPath,就是XML路径语言,(XMLPathLanguage),它是一种用来确定XML文档中
某部分位置的语言。XPath使用路径表达式来选取XML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
简单的看下它的语法:
1.选取结点。
2.谓语
主要用来查找某个结点或者包含某个指定的节点。
谓语被嵌套在方括号中
3.通配符
XPath可以用来选取位置的xml元素,通配指定的节点。
4.多路径选择
通过在路径表达式使用 ”|“ 运算符,你可以选取若干了路径。
5.XPath轴
轴可以相对于当前节点的节点集。
6.远算符!
7.常用的功能函数
功能函数能够更好的进行模糊搜索
之前讲到了爬取指定的内容
System.out.println(page.getHtml().xpath("//*[@id=\"nav\"]/div/div/ul/li[5]/a").toString();
代码的含义是id为nav的节点下的div节点下的div节点下的url下的第5个节点li节点下的a节点
demo地址后期加上!