**field定义一个从内容页中抽取数据的抽取项.
如果根据抽取规则没有从内容页中抽取到数据, field的值是null.**

一个抽取项包含下面这些信息:

(1) name

1). 给抽取项起个名字
2). 名字中不能包含.
**String类型
在神箭手应用的代码中均可使用**

通用栗子:

给抽取项起个名字叫question

var configs = {// configs的其他成员...fields: [{name: "question",selector: "XXX"}]
};

**注意:
1. 如果代码中设置name: “”或代码中不包含name, 那么神箭手应用将无法正常运行.**

(2)alias

1). 给抽取项起个别名(建议用汉字).
2). 在神箭手控制台的爬取结果页面预览某条数据时, 可以看到每个抽取项的别名。
3). 在发布和导出爬取结果时, 不包含别名。
**String类型
在神箭手应用的代码中均可使用**

通用栗子:

给抽取项起个别名叫问题

var configs = {// configs的其他成员...fields: [{name: "question",alias: "问题",selector: "XXX"}]
};

(3)selector

1). 定义抽取规则.
2). 默认使用XPath, 如果使用其他抽取规则, 需指定selectorType。
**String类型
在神箭手应用的代码中均可使用**

通用栗子:

使用XPath来抽取某问答网页的问题

var configs = {// configs的其他成员...fields: [{name: "question",selector: "//div[@id='content']/h1"}]
};

(4)selectorType

1). 设置抽取规则的类型.
2). 默认值是SelectorType.XPath, 还可选择SelectorType.JsonPath或SelectorType.Regex。
**枚举类型
在神箭手应用的代码中均可使用**

通用栗子1:

selector默认使用XPath

var configs = {// configs的其他成员...fields: [{name: "question",// 使用XPath抽取规则selector: "//*[@id='zh-question-title']/h2"}]
};

通用栗子2:

selector使用JSONPath, 如果内容是JSON数据格式, 则使用JSONPath抽取数据比较方便。

var configs = {// configs的其他成员...fields: [{name: "content",// 设置抽取规则的类型为JSONPathselectorType: SelectorType.JsonPath,// 使用JsonPath抽取规则selector: "$.comment.content",required: true}]
};

通用栗子3:

除了XPath和JsonPath之外, 神箭手还支持使用正则表达式来抽取数据, 如下所示:

支持JavaScript正则表达式的写法

var configs = {// configs的其他成员...fields: [{name: "title",// 设置抽取规则的类型为正则表达式selectorType: SelectorType.Regex,// 使用正则表达式抽取规则// 写法一selector: '<div\\sid=\\"page\\"><h1>[^\\/]+<\\/h1>'// 写法二selector: /<div\sid=\"page\"><h1>[^\/]+<\/h1>/}]
};

如果正则表达式中有捕获组, 则抽取第一个捕获组的数据, 否则, 抽取匹配到的整条数据, 如下所示:

var configs = {// configs的其他成员...fields: [{name: "content",// 设置抽取规则的类型为正则表达式selectorType: SelectorType.Regex,// 抽取出匹配该正则表达式中第一个捕获组的数据// 写法一selector: 'var\\s*ct\\s*=\\s*\\"(\\d+)\\";'// 写法二selector: /var\s*ct\s*=\s*\"(\d+)\";/}]
};

(5)required

1). 设置抽取项的值是否不可为空.
2). 默认值是false。
3). 值设为true, 表示如果抽取项的值为空, 则该条爬取结果会被过滤掉, 不会存入数据库中。
**布尔类型
在神箭手应用的代码中均可使用**

通用栗子:

var configs = {// configs的其他成员...fields: [{name: "article_title",selector: "XXX",// 设置抽取项的值不可为空required: true}]
};

(6)repeated

1). 设置抽取项是否同时抽取多条数据
2). 默认值是false
3). 值设为true, 表示抽取项同时抽取多条数据, 抽取项的值是数组类型
**布尔类型
如果抽取规则匹配到多条数据, 请将repeated值设为true, 否则, 只会抽取多条数据中的第一条.
在神箭手应用的代码中均可使用。**

通用栗子:

var configs = {// configs的其他成员...fields: [{name: "images",alias: "图片集"selector: "//img/@src",// 设置"images"同时抽取多张图片repeated: true}]
};

(7) children

1). 设置抽取项的子抽取项.
2). 子抽取项的定义仍然是一个fields结构, 即一个field对象的数组.
3). 没错, 这是一个树形结构.
**数组类型
在神箭手应用的代码中均可使用**

通用栗子:

爬取问答网页所有回答的内容和作者

var configs = {// configs的其他成员...fields: [{name: "title",alias: "问题",selector: "//title"},{name: "answers",alias: "回答",selector: "//div[@id='answers']",repeated: true,// 设置两个子抽取项children: [{name: "content",alias: "内容",selector: "//a[@id='detail']"},{name: "author",alias: "作者",selector: "//span[@id='name']"}]}]
};

**注意:
1. 如果代码中设置children: [“”]或children: [{}], 那么神箭手应用将无法正常运行;
2. 如果children使用XPath, 抽取规则必须以//开头.**

(8)sourceType

抽取项的数据来源并不仅限于当前内容页的网页内容, 通过设置sourceType, 不仅可以使抽取项从当前内容页的网页内容中抽取数据, 还可以从”异步请求返回的数据”或”内容页附加数据”中抽取数据.
**枚举类型
默认值是SourceType.Page, 还可选择两个值: SourceType.AttachedUrl和SourceType.UrlContext。
在神箭手应用的代码中均可使用。**

(9)SourceType.Page

当sourceType设置为SourceType.Page时, 表示从当前内容页的网页内容中抽取数据
在神箭手应用的代码中均可使用.

通用栗子:

var configs = {// configs的其他成员...fields: [{name: "date",// 设置数据源类型为"Page"sourceType: SourceType.Page,selector: "//td[contains(@class,'time')]"}]
};

(10)SourceType.AttachedUrl

选择SourceType.AttachedUrl后可以发起一个新的HTTP请求, 然后从HTTP请求返回的数据中抽取数据.

(11)attachedUrl

当sourceType设置为SourceType.AttachedUrl时, 定义新请求的url。
**String类型
在神箭手应用的代码中均可使用**

通用栗子:

使用attachedUrl爬取网页中使用异步请求返回的数据

var configs = {// configs的其他成员...fields: [{name: "id",// 设置数据源类型为"AttachedUrl"sourceType: SourceType.AttachedUrl,// "id"是从发送"attachedUrl"这个异步请求返回的数据中抽取的attachedUrl: "https://www.demo.com/",selector: "XXX"}]
};

(12)attachedMethod

1). 设置attachedUrl的HTTP请求类型
2). 默认值是”GET”请求, 也支持”POST”等请求
**String类型
与attachedUrl搭配使用
在神箭手应用的代码中均可使用**

通用栗子:

var configs = {// configs的其他成员...fields: [{name: "replys",sourceType: SourceType.AttachedUrl,attachedUrl: "http://www.demo.com/",// 设置HTTP请求类型为"GET"attachedMethod: "GET",selector: "XXX"}]
};

(13)attachedParams

设置attachedUrl发送HTTP请求时需添加的参数.
**String类型
与attachedUrl搭配使用
在神箭手应用的代码中均可使用**

通用栗子:

给attachedUrl添加参数, 并发送POST请求

var configs = {// configs的其他成员...fields: [{name: "replys",sourceType: SourceType.AttachedUrl,attachedUrl: "http://www.demo.com/",attachedMethod: "POST",// 设置HTTP请求参数attachedParams: "size=7&do=slfn",selector: "XXX"}]
};

(14)attachedHeaders

设置attachedUrl发送HTTP请求时需添加的Headers
JS对象

与attachedUrl搭配使用

在神箭手应用的代码中均可使用

通用栗子:

给attachedUrl添加Referer和Cookie

var configs = {// configs的其他成员...fields: [{name: "replys",sourceType: SourceType.AttachedUrl,attachedUrl: "http://www.demo.com/",attachedHeaders: {"Referer": "http://www.shenjianshou.cn/","Cookie": "GF=1"},selector: "XXX"}]
};

(15)SourceType.UrlContext

1). 当sourceType设置为SourceType.UrlContext时, 表示从内容页附加数据中抽取数据
2). 内容页附加数据, 可以是任意一段字符串, 例如, HTML代码. 一般用法是, 将列表页中的数据附加到内容页中, 以便在抽取内容页数据时, 可以从中抽取列表页中的数据. 点此查看”url附加数据”实例解析
在神箭手应用的代码中均可使用

采集爬虫栗子:

从列表页获取数据后附加到内容页中, 再通过抽取项来抽取数据

var configs = {// configs中的其他成员...fields: [{name: "extra_data",// 这里是从内容页附加数据中抽取数据sourceType: SourceType.UrlContext,// 可抽取到内容页附加数据的XPathselector: "//span[contains(@class,'extra-data')]",}]
};configs.onProcessHelperPage = function(page, content, site) {// 从列表页获取数据赋值给"extraData"var extraData = extract(page.raw, "//div[@id='extra-data']");var options = {method: "GET",// 定义内容页附加数据contextData: extraData};// 将带"options"的内容页添加到待爬队列中site.addUrl("http://www.demo.com", options);return true;
};

(15)transient

1). 设置抽取项是否是临时的(临时的抽取项不会保存到爬取结果中).
2). 默认值是false。
3). 值设为true, 表示该抽取项是临时变量, 且不会保存到数据库中, 通常与attachedUrl搭配使用, 抽取项的值可以作为attachedUrl的值或值的一部分。
4). 值设为true, 在afterExtractPage回调函数中仍然可以使用此抽取项的值, 回调结束之后, 该抽取项会从爬取结果中剔除。
**布尔类型
在神箭手应用的代码中均可使用**

采集爬虫栗子:

var configs = {// configs的其他成员...fields: [{name: "bid",selector: "XXX",// 设置"bid"抽取项为临时变量, 不会保存到数据库中transient: true},{name: "answer",sourceType: SourceType.AttachedUrl,// "bid"抽取项的值作为"attachedUrl"值的一部分attachedUrl: "http://www.demo.com/get?bid={bid}"selector: "XXX"}]
};

(16)primaryKey

1). 设置是否将抽取项作为去重字段
2). 默认值是false
3). 神箭手系统会将primaryKey值为true的所有抽取项的值处理成一个key
4). key相同的爬取结果神箭手会自动去重
5). children设置primaryKey无效, 但对于只爬取列表页并将其每条数据都作为一个爬取结果的神箭手应用, children设置primaryKey有效, 点此查看详情
6). primaryKey与transient的值都设为true时, primaryKey无效
**布尔类型
在采集爬虫代码中可使用**

采集爬虫栗子:

var configs = {// configs中的其他成员...fields: [{name: "title",selector: "XXX",// 设置将该抽取项作为去重字段之一primaryKey: true},{name: "content",selector: "XXX",// 设置将该抽取项作为去重字段之一primaryKey: true},{name: "date",selector: "XXX"}]
};

(17)type

1). 设置抽取项中每条抽取结果的数据类型
2). 默认值是string类型
3). 在神箭手控制台预览爬取结果时, 会优先根据设置的数据类型优化显示样式
4). 目前支持9种数据类型: int, float, image, date, url, string, html, json和bool
**枚举类型
如果数据类型转换失败, 则仍然使用string类型
在采集爬虫代码中可使用**

采集爬虫栗子:

var configs = {// configs中的其他成员...fields: [{name: "image_url",selector: "XXX",// 该抽取项的抽取结果是"image"类型type: "image"}]
};

爬虫技术(04)神箭手爬虫field的属性相关推荐

  1. 爬虫技术:携程爬虫阳光问政数据

    爬虫技术:携程爬虫阳光问政数据 携程爬取阳光问帖子:进行了简单的数据存储,数据量共145226条,爬取时间为:3.65小时,实际时间感觉要多于统计时间. 代码如下: import time impor ...

  2. 爬虫技术(05)神箭手爬虫回调函数

    回调函数是在神箭手应用爬取并处理网页的过程中设置的一些系统钩子, 通过这些钩子可以完成一些特殊的处理逻辑. 回调函数需要设置到configs对象中才起作用 下图是采集爬虫爬取并处理网页的流程图, 矩形 ...

  3. 爬虫技术(03)神箭手爬虫Configs详解

    (1)domains 定义神箭手应用爬取哪些域名下的网页, 非域名下的网页会被忽略以提高爬取速度. **数组类型 在神箭手应用的代码中均可使用** 通用栗子1: var configs = {// 单 ...

  4. 神箭手 爬虫操作(1)

    今天有一个任务,是要将微博用户的昵称从数据库导入到神箭手中. 以前一直是手动操作,现在有一个需求是要直接导入到设置中. 数据库使用的是mysql,数据库连接使用的是JDBCtemplate,使用spr ...

  5. 利用python爬虫技术本福特_Python爬虫技术(一)--模拟登陆

    好了,最后上完整代码,当当当当~ # -*- coding: utf-8 -*- import requests import sys import urllib2 import re if __na ...

  6. python爬虫技术可以干什么-利用爬虫技术能做到哪些很酷很有趣很有用的事情?...

    很久之前就看到老爬虫 @何明科 的回答,在后续的几年里面,一致在思考和践行爬虫赋能业务运营的结合点和场景.爬虫是虾米东东?真的是盗取数据的不法之徒吗? 真相却恰恰相反,而且很多场景下都能极大的赋能业务 ...

  7. 爬虫技术(01)神箭手爬虫初学案例解读

    var configs = {//要爬取的域名domains: ["leiphone.com"], //爬虫的入口URL scanUrls: ["http://www.l ...

  8. 爬虫技术(02)神箭手爬虫实时API

    var scanUrl = "http://www.leiphone.com/news/201610/9EbxjV73a9kGhN3a.html" ;//@input(scanUr ...

  9. 神箭手爬虫学习笔记(二)

    一,可以使用神剑手已经做好的爬虫市场直接跑,不需要自己定义爬取规则 二,爬虫市场里没有的网站,需要自己去定义规则来爬数据. 三,爬取的数据可以先存放在神剑手,也可以放到七牛暂存.(提醒下,网站需要数据 ...

最新文章

  1. MSDN中关于变体数据类型
  2. 步步为营(十六)搜索(二)BFS 广度优先搜索
  3. 汇编语言——《子程序应用(数制转换)程序设计》实验报告
  4. J-flash 烧写cc2538教程
  5. nagios(icinga)借助check_hp插件监控惠普服务器硬件信息
  6. D. Magic Breeding
  7. mysql中 show index from tb_name命令各列的含义
  8. 06-maven的profile和Spring boot 的profile整合
  9. 机器学习——概率模型
  10. Blender进阶Python编程3D开发-源码分析笔记系列-做出你自己的3D数据图表
  11. python3 安卓_Android QPython3 调用 其他 Android App
  12. c#机器人聊天软件_C#winForm 聊天只能机器人(完整版)
  13. Btree/B+tree原理及区别(详解)
  14. 热泵烤房监测上云方案
  15. 计算机网络延展-桥接器(网桥)
  16. Windows11配置JDK1.8
  17. HTML超详细基础知识总结
  18. jQuery之从零开始的学习(完整整理)
  19. LoRa + 蓝牙室内场馆定位技术全面解析
  20. ARM Cortex A7 架构简介

热门文章

  1. Tesla T4 在Ubuntu18.04上的安装使用
  2. 开发者涨薪指南:提升软、硬实力
  3. Python爬取并分析 201865 条《隐秘的角落》弹幕
  4. 当遇到火狐浏览器“建立安全连接失败”问题,处理方法
  5. 解析新时代人工智能机器人的工作原理
  6. Python项目文件引用问题:ImportError: attempted relative import with no known parent package
  7. 恢复rm -rf 的数据
  8. habor私有镜像仓库部署
  9. Win10版本那么多怎么区别(2)
  10. Windows API-GDI入门基础知识详解 来源: PConline.com.cn