突发奇想,写了个在线爬虫
发布于 1 个月前 作者 LuckyHH 1081 次浏览 最后一次编辑是 23 天前 来自 分享

WebSplider

基于NodeJS的在线爬虫系统。

1、当你想在自己的网站添加一个小的新闻模块时,你可以利用WebSplider爬虫爬取指定网站的数据,然后在后端或者前端请求数据接口,再将获得的数据构造到你的网页上。

2、当你想知道自己追的剧,小说等更新没有,你可以抓取指定网站的数据(比如说视频级数),然后在后台请求数据接口,将数据保存到你的数据库中,设置一个定时器,定时请求数据接口,将获得的数据与数据库数据对比即可。然后弄个邮件发送,监控到数据变化时,给你发送邮件。

…更多的场景还需要各位挖掘哦

特性

  • 简单、方便。只要掌握简单的网页知识,即可利用WebSplider在线爬虫系统,进行简单的配置之后,可进行数据抓取预览。
  • 登录注册后,支持生成数据接口,开发者在后台请求数据接口,将返回数据构造到模板上即可。
  • 支持接口权限管理,可选择将接口开放到WebSplider首页,供他人使用。

界面

WebSplider

本地测试

1,克隆项目到本地

git clone https://github.com/LuckyHH/WebSplider.git

2,安装Nodejs,安装MongoDB数据库,搭建环境

3,安装依赖

npm install

4,启动项目

npm start

5,打开浏览器

http://localhost:3000

使用

  • 爬取深度

爬取深度指的是经过几次抓取才能得到最终数据。最大支持的爬取深度为3,推荐使用的最大爬取深度为2(因为时间问题,深度越大,时间越长)

  • 网页编码

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

  • 抓取模式

普通模式与分页模式

分页模式下:

网址填写时,将页码改为*即可

例如:

CNode的分页网址

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

改为

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

  • 页码范围

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

  • 目标网址

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

  • 选择器。

选择器用来筛选数据。填写需要用户具有一定的前端知识。选择器填写规则,参考cheerio

  • 输出结果定制。

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

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

{ "name":"$element.attr('title')" }

键随意指定,值中写法需要参考cheerio的属性部分。$element代表的是选择器选择出的元素。

选择器参考写法如下

$(".topic_title")

指的是选择目标页面中所有类名为topic_title的元素。

$(".topic_title a")

指的是选择目标页面中所有类名为topic_title的元素中的a标签元素

$(".topic_title").children('h3').children('a')

指的是类名为topic_title的元素的子元素h3的子元素a元素

$(".topic_title").find('.content')

指的是类名为topic_title的元素下的类名为content的子孙元素

值参考写法如下

$element.children('.c-9').children('.ml-20').children('a').text()

筛选出的元素下的类名为c-9的元素下的类名ml-20下的a元素中的文本

$element.children('.c-9').next().text()

筛选出的元素下的类名为c-9的元素下一个元素的文本内容

更多使用示例配置参考

TODO

  • [x] 对GBK网页格式的抓取支持
  • [x] 支持模式选择,可抓取分页列表
  • [x] 定义请求头

协议

MIT

地址

https://websplider.herokuapp.com/#/

http://splider.docmobile.cn/#/

其他

我做了个Http代理检测的小项目HttpProxy,可以检测西刺代理中可用的免费代理。。本意是帮助我们新疆这边的同学上GitHub,百度云等一些疆内访问不了的国内网站,和提供API给WebSplider爬虫用来做代理。结果发现数百个代理中,没几个有能用的。。所以项目中没有使用代理。

5 回复

并发是多少?有没有代理?

webspider?scrapy了解一下

来自✨ Node.js开源项目精选

@Lukang689 并发我设置的是5,没有代理。。上课的时候想到写这么个小玩意。。然后就做了,这个适合爬一些需要数据量小的小网站。

@vendar 嗯嗯😄,好的

回到顶部