本节我将向大家介绍一下YayCrawler的核心-页面的抽取规则定义,这也是YayCrawler能够做到通用的主要原因之一。如果我要爬去不同的网站的数据,尽管他们的网站采用的开发技术不同、页面的结构不同,但是我只要针对不同的网站定义不同的抽取规则即可,不用再对每个网站专门开发一个爬虫。

首先让我来解释几个概念:

一、页面(Page)

这里说的页面不是指在浏览器上能直接看到的页面,而是指一个http请求发送后服务端返回的response中的内容。它大多数情况是一个html文档,也可能是一个Json字符串,甚至是自定义的字符串和二进制等。

二、区域(Region)

页面上的一个或多个感兴趣的代码片段,比如某些div,某个表格,包含某个class的dom元素,Json数据中的某个节点,甚至某一段字符串。区域是规则解析的单元,一个Page可以有多个Region,每个Region在执行规则解析后会产生两类数据:字段数据和子链接。字段数据会被持久化到数据库,子链接会发送给Master加入待执行队列。

上图中,我如果用css选择器选取class为list-con的元素会选择到多个div,我们认为这就是一个类型的区域,叫做区域1;如果我用css选择器选择id为page的元素会选择到分页控件所在的div,我们认为这是区域2。

对于区域1,我可以通过xpath或者正则表达式来抽取楼盘地址、申报公示价格区间等字段数据,我也可以抽取“户栋详情”这个链接加入到任务队列中。

对于区域2,我并不关心它的字段数据,我只关心下一页的链接是什么,因此我只要配置一个子链接规则把下一页的链接抽取出来即可。

三、解析规则

我们的解析是以区域(Region)为单位的(您可以把整个Page当成一个Region),前面说过一个Region解析完成后会产生两类数据:字段数据和子链接。因此我们框架中存在两种规则:字段规则和链接规则。字段规则描述的是如何从Region片段中抽取所需的字段数据;链接规则则描述的是如何从Region片段中抽取子链接。举例说明:

上图中我们针对基本信息这个区域设定了几个字段抽取规则,我们来看看测试结果:

规则的解析依赖于WebMagic的语法与实现,可以参考:http://webmagic.io/docs/zh/posts/ch4-basic-page-processor/selectable.html。关于上图中的自定义表达式的解析我们会在后续详细讲解,在页面上也有部分介绍:
我们来看看框架中与规则相关的实体模型图:
框架中我们使用Spring JPA来实现规则数据库的读写逻辑。

开源通用爬虫框架YayCrawler-页面的抽取规则定义的更多相关文章

  1. 开源通用爬虫框架YayCrawler-开篇

    各位好!从今天起,我将用几个篇幅的文字向大家介绍一下我的一个开源作品--YayCrawler,其在GitHub上的网址是:https://github.com/liushuishang/YayCraw ...

  2. 开源通用爬虫框架YayCrawler-运行与调试

    本节我将向大家介绍如何运行与调试YayCrawler.该框架是采用SpringBoot开发的,所以可以通过java –jar  xxxx.jar的方式运行,也可以部署在tomcat等容器中运行. 首先 ...

  3. 开源通用爬虫框架YayCrawler-框架的运行机制

    这一节我将向大家介绍一下YayCrawler的运行机制,首先允许我上一张图: 首先各个组件的启动顺序建议是Master.Worker.Admin,其实不按这个顺序也没关系,我们为了讲解方便假定是这个启 ...

  4. 爬虫框架YayCrawler

    爬虫框架YayCrawler 各位好!从今天起,我将用几个篇幅的文字向大家介绍一下我的一个开源作品——YayCrawler,其在GitHub上的网址是:https://github.com/liush ...

  5. 一个简单的开源PHP爬虫框架『Phpfetcher』

    这篇文章首发在吹水小镇:http://blog.reetsee.com/archives/366 要在手机或者电脑看到更好的图片或代码欢迎到博文原地址.也欢迎到博文原地址批评指正. 转载请注明: 吹水 ...

  6. 基于 Java 的开源网络爬虫框架 WebCollector

    原文:https://www.oschina.net/p/webcollector

  7. [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 为什么要造轮子 同学们可以去各大招聘网站查看一下爬虫工程师的要求,大多是招JA ...

  8. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [一] 初衷与架构设计

    [DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 五.如何做全站采集 为什么要造轮子 同学们可以去各大招聘网站查看一下爬虫工程师 ...

  9. Scrapy爬虫框架第一讲(Linux环境)

    1.What is Scrapy? 答:Scrapy是一个使用python语言(基于Twistec框架)编写的开源网络爬虫框架,其结构清晰.模块之间的耦合程度低,具有较强的扩张性,能满足各种需求.(前 ...

随机推荐

  1. Python高级网络编程系列之第二篇

    在上一篇中,我们深入探讨了TCP/IP协议的11种状态,理解这些状态对我们编写服务器的时候有很大的帮助,但一般写服务器都是使用C/Java语言,因为这些语言对高并发的支持特别好.我们写的这些简单的服务 ...

  2. 通过JSP网页连接MySQL数据库,从MySQL数据库中读出一张表并显示在JSP网页中

    1.安装所需软件 ①安装java和tomcat,建立JSP网页最基础的软件②安装MySQL数据库(下载地址:https://www.mysql.com/)③安装Navicat Premium来查看数据 ...

  3. [转]Qt 之 QFileSystemWatcher

    简述 QFileSystemWatcher类用于提供监视文件和目录修改的接口. QFileSystemWatcher通过监控指定路径的列表,监视文件系统中文件和目录的变更. 调用addPath()函数 ...

  4. PAT A1144 The Missing Number (20 分)——set

    Given N integers, you are supposed to find the smallest positive integer that is NOT in the given li ...

  5. cisco ospf

    ospf配置:(Open Shortest Path First)PC0 and PC1 via Ospf to communicate. Network map as below.Environme ...

  6. C# 语法四 修饰符

    1.sealed 不能派生 2.internal 仅仅在本项目中被访问 3.public 整个系统 4.private 本类访问 5.protected 本类.派生类访问 using System; ...

  7. java JDK安装教程

    JAVA_HOME G:\JDK\java7\jdk1.7.0_80    根据自己的哈     ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 然后找到CLASSPATH ...

  8. 4-(基础入门篇)学会刷Wi-Fi模块固件(刷AT指令固件)

    http://www.cnblogs.com/yangfengwu/p/8965054.html 基础教程源码链接如果失效,请在淘宝介绍中下载,由于链接很容易失效,如果失效请联系卖家,谢谢 https ...

  9. 一次学生时代的经历,利用Python在机房杀红蜘蛛,脱离老师控制!

    这个为什么说是一次学生时代的经历呢,我的出发点并没有是为了吊胃口.确实,这个Python小应用,只能在学生时代用得着吧,尤其是高中和大学,如果你没有想到也没关系,看完我下面说的就会明白了.   在这里 ...

  10. 有哪些操作会使用到TempDB;如果TempDB异常变大,可能的原因是什么,该如何处理(转载)

    有哪些操作会使用到TempDB:如果TempDB异常变大,可能的原因是什么,该如何处理:tempdb的用途: 存储专用和全局临时变量,不考虑数据库上下文: 与Order by 子句,游标,Group ...