平台提供了一系列内置函数,方便开发者开发。下面逐一介绍。
extract
function extract(html, xpath, keepTag) |
@param
String
html
网页文本,可以是整个网页,也可以是一个html片段
@param
String
xpath
xpath表达式
@param
Boolean
keepTag
是否保留最外层的tag,默认值false,即不保留
@return
String
返回html中符合xpath的第一个dom元素的字符串形式。当keepTag
为false时,默认去除外层的标签,为true时保留。
代码示例在exclude
函数之后。
extractList
function extractList(html, xpath, keepTag) |
@param
String
html
网页文本,可以是整个网页,也可以是一个html片段
@param
String
xpath
xpath表达式
@param
Boolean
keepTag
是否保留最外层的tag,默认值false,即不保留
@return
String数组
返回html中符合xpath的所有dom元素的字符串形式组成的数组。当keepTag
为false时,默认去除外层的标签,为true时保留。
代码示例在exclude
函数之后。
exclude
function exclude(html, xpath) |
@param
String
html
网页文本,可以是整个网页,也可以是一个html片段
@param
String
xpath
xpath表达式
@return
String
返回html中去除符合xpath的所有dom元素后剩余的内容。
从html中去除符合xpath的所有元素。extract
extractList
exclude
代码示例:var html = '\
<div>\
<span>abc</span>\
<span class="c1">def</span>\
<a href="http://www.wangduoyun.com">网多云</a>\
</div>';
extract(html, "//span");//返回"abc"
extract(html, "//span", true);//返回"<span>abc</span>"
extract(html, "//a");//返回"网多云"
extract(html, "//a", true);//返回"<a href="http://www.wangduoyun.com">网多云</a>"
extract(html, "//a/@href");//返回"http://www.wangduoyun.com"
extractList(html, "//span");//返回["abc","def"]
extractList(html, "//span", true);//返回["<span>abc</span>","<span class=\"c1\">def</span>"]
extractList(html, "//span[contains(@class,'c1')]");//返回["def"]
exclude(html, "//span");//返回"<div><a href="http://www.wangduoyun.com">网多云</a></div>"
hostFile
function hostFile(url, type, options) |
@param
String
url
待托管的文件链接地址
@param
枚举
type
托管文件的类型。可选值为FileType.IMAGE
、FileType.TEXT
、FileType.AUDIO
、FileType.VIDEO
、FileType.APPLICATION
,分别对应图片、文本、音频、视频、应用,爬虫设置中可以选择是否托管对应的类型。可以不设置,建议指定一个类型。
@param
JS对象
options
其他选项,可选择设置下载文件时使用的headers,以及在下载之前提供文件大小fileSize。
@return
String
托管后的标识字符串,此串需要出现在爬取结果里面,否则不会进行托管。
非常重要:此函数的返回值一定不能忽略,一定得作为某个抽取项值或者值的一部分,否则不会进行托管。
爬虫在开启托管之后,首先会自动识别文件链接进行托管,识别规则如下:
- 对于抽取的html文本,会自动识别其中的img标签,并对其链接进行托管,托管类型为图片。
- 对于单独抽取的链接地址或链接地址数组,会自动根据后缀名进行识别,如果识别成功,则托管为对应的类型。
对于不能自动识别的链接,如果还需要托管,则需要主动调用此函数来进行托管。
调用此函数时,如果未指定type
,会自动根据后缀名进行识别,对于不能识别的类型,都会归为FileType.APPLICATION
。
options对象
options对象用来指定下载时的参数,支持属性如下:
- fileSize
Integer
文件大小
指定额外的文件大小信息可以加速下载时的处理。 - headers
JS对象
下载该文件时使用的headers
可以设置User-Agent
、Cookie
等,文件链接所在的网页链接会作为默认的Referer
,一般不需要特殊指定,当然也可以在headers里面指定来覆盖默认值。
可自动识别文件类型的后缀:
文件类型 | 可自动识别文件类型的后缀 |
---|---|
图片 | .jpg, .jpeg, .png, .gif, .svg, .bmp |
文本 | .txt, .text |
音频 | .mp3, .wav, .wma, .amv, .m4a |
视频 | .mp4, .avi, .mpg, .mov, .3gp, .wmv, .3gpp |
应用 | .doc, .docx, .ppt, .pptx, .xls, .xlsx, .pdf, .csv, .zip, .rar, .gzip, .gz, .apk, .exe, .iso, .dmg |
示例代码:var configs = {
fields: [
{
name: "cover",
selector: "//div[@id='cover']/img/@src"
},
{
name: "attaches",
selector: "//div[@id='attaches']/a/@href",
repeated: true
}
]
};
configs.afterExtractField = function(fieldName, data, page, site) {
if (fieldName == "cover") {
return hostFile(data, FileType.IMAGE);//使用hostFile的返回值作为抽取项cover的值
}
else if (fieldName == "attaches") {
var attaches = [];
//对于抽取项attaches的每个链接进行hostFile调用
//并将返回值组成新的数据,作为抽取项attaches的值
for(var i = 0; i < data.length; i++) {
var hostedUrl = hostFile(data[i], FileType.AUDIO);
attaches.push(hostedUrl);
}
return attaches;
}
}
msleep
function msleep(millisecond) |
@param
整数
millisecond
sleep的毫秒数
使当前节点/线程sleep指定时间。一般在使用site.requestUrl
发请求的时候,为了避免两次请求太快给目标网站造成太大压力,需要在两次请求之间sleep一定时间。
parseDateTime
function parseDateTime(str) |
@param
String
str
时间字符串,例如”5分钟前”、”刚刚”、”2017-11-11”等。
@return
整数
返回毫秒时间戳
此函数将时间字符串转换成毫秒时间戳,转换成秒时需要除以1000。
encodeURI
function encodeURI(str, charset) |
@param
String
str
需要进行url编码的字符串
@param
String
charset
编码时使用的字符编码,常用的有UTF-8
GBK
@return
String
返回编码后的字符串
因为JavaScript
的这个内置函数在处理中文时有一些问题,所以平台直接覆盖了此函数。
encodeURIComponent
function encodeURIComponent(str, charset) |
此函数完全等同于encodeURI
。
decodeURI
function decodeURI(str, charset) |
@param
String
str
需要进行url解码的字符串
@param
String
charset
解码时使用的字符编码,常用的有UTF-8
GBK
@return
String
返回url解码后的字符串
平台覆盖了原生JavaScript
的对应函数。
decodeURIComponent
function decodeURIComponent(str, charset) |
此函数完全等同于decodeURI
。
htmlEntityDecode
function htmlEntityDecode(str) |
@param
String
str
需要进行html解码的字符串
@return
String
返回html解码后的字符串
此函数进行html entity解码,如&
解码为&
,<
解码为<
,"
解码为"
。
md5
function md5(str) |
@param
String
str
需要进行md5加密的字符串
@return
String
加密后的md5的hex字符串形式,32位小写。
此函数进行md5加密,返回加密后的结果,hex的字符串形式,32位小写。
base64Encode
function base64Encode(str) |
@param
String
str
需要进行base64编码的字符串
@return
String
编码后的base64字符串
此函数进行base64编码,是标准的base64编码实现。
base64Decode
function base64Decode(str, charset) |
@param
String
str
待解码的base64字符串
@param
String
charset
解码时使用的字符编码,常用的有UTF-8
GBK
@return
String
解码后的内容
此函数进行base64解码。
atob
function atob(str, charset) |
此函数完全等同于base64Decode
btoa
function btoa(str) |
此函数完全等同于base64Encode
RSAEncode
function RSAEncode(str, publicKey, charset) |
@param
String
str
待加密的字符串
@param
String
publicKey
公钥
@param
String
charset
字符串编码,常用的有UTF-8
GBK
@return
String
返回加密后的字符串
此函数进行RSA加密。
RSADecode
function RSADecode(str, privateKey, charset) |
@param
String
str
待解密的字符串
@param
String
privateKey
私钥
@param
String
charset
字符串编码,常用的有UTF-8
GBK
@return
String
返回解密后的字符串
此函数进行RSA解密。
deflate
function deflate(content, type) |
@param
String
content
待解压的内容
@param
String
type
返回数据的类型,可选值为"string"
和"base64"
@return
String
解压后的内容,当type
为”string”时,直接返回字符串形式,当type
为”base64”时,返回base64编码后的结果。
此函数使用deflate算法对压缩的内容进行解压。
inflate
function inflate(content, type) |
@param
String
content
待压缩的内容
@param
String
type
待压缩内容的格式,可选值为"string"
和"base64"
,值为"string"
时,直接进行压缩,值为"base64"
时,会先进行base64解码,再进行压缩。
@return
String
返回压缩后的内容
此函数使用deflate算法对内容进行压缩。