文享日志

WebSplider使用说明

爬虫 Nodejs

发表于2018年06月02日16:28:46

更新于2018年07月30日03:07:29

0条评论 538次阅读

一、使用说明:

1.爬取深度

爬取深度指的是从初始网址经过几层到达数据所在网址。最大支持的爬取深度为3,推荐使用的最大爬取深度为2


2.网页编码

目标网页的编码格式,默认为UTF-8


3.抓取模式

普通模式与分页模式


4.页码范围

在分页模式下,抓取的起止页码


5.目标网址

目标网址即要爬取的目标网站的网址。

普通模式下只需填写要抓取的网址即可。

分页模式下网址填写时,将网址中的页码改为*即可


例如:

CNode的分页网址

https://cnodejs.org/?tab=good&page=10


改为

https://cnodejs.org/?tab=good&page=*


6.选择器

选择器用来指出数据所在的位置,配合'输出结果定制'即可获得目标数据。填写需要用户具有基本的前端知识。


     这里为了描述方便,将标签选择器分为两种,一种是a标签选择器与数据标签选择器。(当然,如果你想要的数据在a标签中,那么a标签选择器就是数据标签选择器)


原理图:

原理图.png原理.png

当抓取深度为1,则一级选择器中填写数据选择器即可。

当抓取深度为2,则一级选择器中填写到达第二层页面的a标签选择器,二级选择器填写数据标签选择器。

当抓取深度为3,则一级选择器中填写到达第二层页面的a标签选择器,二级选择器中填写到达第三层页面的a标签选择器,三级选择器填写数据选择器即可。


填写示例:

深度为2

一级选择器:

$(".topic_title a")

二级选择器:

$(".topic .content")


$(".topic_title a")是指目标页面中所有类名为topic_title的元素中的a元素

$(".topic .content")指的是目标页面中类名为topic的元素下的类名为content的子孙元素


填写了两级选择器,说明目标数据在当前页面(目标网址)的下一层,则一级选择器需要指出到达下一层页面的a标签选择器。二级选择器填写的是下一层页面中的数据标签选择器


填写同样支持调用一些内置函数来辅助进行数据定位

如:

$(".topic").find('.content')
$(".topic").children('.content')
$(".topic").next().children('.content')
$(".topic").children('.content').next().find('.artical')


更多标签选择器填写规则,请参考cheerio


7.输出结果定制

输出结果定制指的是输出哪些结果。

由标签选择器指出数据所在的位置后,还需要进一步使用标签选择器和属性选择器来获得数据。


这里需要写成JSON格式,参考写法如下:

{
    "name":"$element.find('.c-9 .ml-20 a').text()",
    "age":"$element.children('.c-9').next().text()"
}


键为name的值指 '选择器'筛选出的元素下的类名为c-9的元素下的类名ml-20下的a元素中的文本

键为age的值指 '选择器'筛选出的元素下的类名为c-9的元素下一个元素的文本内容


(1)键部分可以随意指定,值部分填写需要一定的规则。

(2)$element是指'选择器'中填写的数据标签选择器。(结合'选择器'给出的示例,$element指的是$(".topic .content"))



      值得注意的是,当你需要的数据种类只有1种,你完全可以在'选择器'中填写标签选择器时,直接将标签定位到目标元素,在'输出结果定制'中,填写属性选择器即可。

      但往往我们需要的数据种类不止一种,所以在填写'选择器'部分时,需要填写的数据标签选择器要将所有需要的数据包裹在内,所以甚至可以填写$("body")这样的数据选择器。在填写"输出结果定制"的值部分,需要填写一些选择器指明数据详细位置,最后使用属性选择器即可获得数据。


同样结合上文给出的示例,

如果我要想获得'name'值这一类数据,

那么'选择器'可以这样写

一级选择器:

$(".topic_title a")

二级选择器:

$(".topic .content .c-9 .ml-20 a")

'输出结果定制'可以这样写

{
    "name":"$element.text()"
}


或者

'选择器':

一级选择器:

$(".topic_title a")

二级选择器:

$(".topic").find('.content .c-9 .ml-20 a')


'输出结果定制':

{
    "name":"$element.text()"
}


或者

'选择器':

一级选择器:

$(".topic_title a")

二级选择器:

$(".topic")


'输出结果定制':

{
    "name":"$element.find('.content .c-9 .ml-20 a').text()",
}


或者

'选择器':

一级选择器:

$(".topic_title a")

二级选择器:

$("body")


'输出结果定制':

{
    "name":"$element.find('.topic .content .c-9 .ml-20 a').text()"
}


常用的属性选择器有text(),html(),attr('')这三种

text()选择的是目标元素中的文本内容

html()选择的是目标元素的HTML代码

attr('')选择的是目标元素标签中的某个属性值。需要填写参数,比如$element.attr('url')指的是获取目标元素标签中的url属性值


更多属性选择器填写规则,请参考cheerio


8.代理模式

即抓取数据是否需要使用HTTP代理。有3中模式,无代理,西刺代理与自定义代理模式。

无代理模式使用自己的IP向目标服务器发出请求。

西刺代理模式使用西刺代理可用的代理地址发出请求。HttpProxy提供API支持

自定义代理模式需要用户自己填写可用代理。 输入格式如下: ['http://111.111.111.111:1111','http://111.111.111.111:1111']


注:

(1)自定义代理地址填写不符合正常IP地址的话,系统默认使用无代理模式。

(2)西刺代理响应速度略慢,因为首先HttpProxy要检测可用的代理地址,其次代理质量不能保证。当使用西刺代理之后响应失败,请重新提交。


9.结果预览

返回结果中,state表示抓取结果状态,time值为数据最后一次的更新时间,data值为抓取结果。


注:

(1)程序每天自动更新一次数据,time值保存更新数据的时间

(2)当程序意外崩溃重启,自动更新失效。当请求该API时,发现请求时间比数据库保存的数据更新时间大24小时,会调用爬虫程序并响应结果,同时将启动定时任务,自动更新数据库数据。


10.生成API

数据接口API只在用户登录情况下生成。


11.查看分享

WebSplider左边栏有近期用户分享的API,贴左边屏幕有个icon,点击会滑动出所以用户分享的API。

界面为了美观,隐藏了进度条,在页面中,所有被遮挡的部分均可以滚动。


二、数据API使用说明

1.前端调用示例

WebSplider的数据API支持JSONP的调用方式

参考如下:

前端调用

调用时,只需要在数据接口后添加参数  &cb = 函数名  即可。


2.Node.js后端调用示例

const express = require('express');
const axios = require("axios");
const router = express.Router();
router.get('/douban/movie', function(req, res, next) {
    axios.get("http://splider.docmobile.cn/interface?name=luckyhh&cid=1529046160624").then(ires => {
        if(ires.data.state){
            //ires.data.data数据处理;
        }else{
            res.send("请求错误");
        }
    }).catch(err => {
        console.error(err);
    });
});


三、WebSplider镜像

https://websplider.herokuapp.com/

      该镜像采用在线的mlab数据库,数据库数据与我服务器中的数据保持单向同步。(即该镜像中数据不会被更新到我的服务器)

优点是:该镜像的数据更加安全,并且生成的数据API支持https协议。

缺点是:响应速度略慢


推荐使用该镜像的数据接口API。


四、更多配置实例

WebSplider参考配置

基于WebSplider的在线新闻模块开发


五、项目地址:

https://github.com/LuckyHH/WebSplider



👍 0  👎 0
共有0条评论

发表新评论

提交

广告展示

腾讯云推广 阿里云推广