WebSplider是什么?

  • WebSplider在线爬虫是一个结合Web技术与爬虫技术的项目。
  • WebSplider支持Web页面进行爬虫配置,提交配置到服务器后,服务器端爬虫程序进行数据抓取,最后将结果返回给用户。
  • WebSplider支持多种代理模式,有效保证了IP不被ban掉
  • WebSplider支持生成数据接口API,方便用户调用爬虫爬到的数据
  • WebSplider基于Node.js,使用superagent与cheerio进行数据请求分析
  • 爬虫不能解决Ajax动态加载内容

WebSplider长得什么样?

WebSplider原理是什么?

动态网站中相似网页的网页结构都是有规律的。以京东为例,京东网站的每个产品详情页中,分析页面结构,可以看到产品名称的类名为sku-name。那么,如果想获得该产品的相关数据,用户只需给出目标网址,目标网页中数据所在的标签,使用标签选择器与属性选择器就可以得到该类名标签中的数据。根据这个特点,可以设计让用户自行观察网页结构,提供标签选择器与属性选择器,指定目标网页URL即可让爬虫抓取数据。

Web在线爬虫主要分为Web应用与爬虫程序两大模块。Web应用是用户与爬虫程序之间“联络人”,负责中转用户调用爬虫的请求与返回爬虫处理后的数据结果。

爬虫基于Node.js平台,使用Superagent请求初始页面URL,获得整个网页,使用Cheerio根据用户配置中的标签选择器与属性选择器分析页面,得到目标数据。

为了满足用户调用爬虫爬到的数据的需求,Web在线爬虫支持生成数据接口,这是一个返回爬虫爬取数据的URL。Web应用负责与数据库交互,数据库保存用户的爬虫配置。生成数据接口时,将爬虫配置写入数据库,请求数据接口时,从数据库获得配置,将配置设置到爬虫中进行爬取数据。为了提高响应速度,可以将爬虫爬取结果保存到数据库中,设置定时任务,定时调用爬虫程序爬取数据,更新数据库。当用户请求数据接口,直接从数据库取出数据进行响应。

WebSplider技术细节

WebSplider使用koa.js作为Web框架,使用superagent进行请求,Cheerio分析网页,mongodb存储数据。前端使用Vue.js

核心代码

WebSplider项目中使用koa.js,这里是express。东西差不多

var express = require('express');
var cheerio = require('cheerio');
var superagent = require('superagent'); var app = express();
var items = [];
app.get('/', function (req, res, next) {
superagent.get('https://cnodejs.org/')
.end(function (err, sres) {
if (err) {
return next(err);
}
var $ = cheerio.load(sres.text); $('.topic_title').each(function (idx, element) {
var $element = $(element);
items.push({
title: $element.attr('title'),
url : $element.attr('href')
});
})
res.send(items);
})
}) app.listen(3000, function () {
console.log('app is listening at port 3000');
});

爬取深度

首先看爬虫获得数据的过程。它是由用户给出的初始URL与a标签选择器来找到目标数据的。

所以,在填写配置的页面,要指出初始页面到目标数据页的a标签选择器,在最后目标数据页,使用标签选择器与属性选择器就可以获得目标数据。

以澎湃新闻为例:

获取首页每个链接的文章详情。需要进入下一层链接才能获得文章数据。

所以“1级选择器”配置到下一层网页的a标签选择器。爬虫程序根据a标签选择器才能找到下一层链接。

“2级选择器”则配置数据所在的标签选择器。用于配合“输出结果定制”,获得数据。

同样的道理,如果目标数据在下一层的下一层,则需要设置爬取深度为3.此时1级选择器与2级选择器都需要设置为a标签选择器。3级选择器是目标数据所在的标签选择器。

HTTP代理

对爬虫稍有研究的人会知道代理的重要性,它保证了我们的IP地址不被目标服务器ban掉。

superagent使用代理发出HTTP请求其实很容易实现,但如何获得大量的代理地址呢?网上有很多代理网站提供免费代理服务。比如:西刺代理,IP海等。但是代理质量参差不齐,可用的代理少之又少。

于是,我做了个小项目HttpProxy,用于检测代理是否可用。WebSplider爬虫爬取了西刺代理的大量代理地址,HttpProxy请求WebSplider提供的API获得这些地址数据,批量分析请求代理是否可用,分析之后,WebSplider请求HttpProxy提供的API,使用分析之后的代理地址进行请求代理。

WebSplider支持选择代理模式。无代理,西刺代理与自定义代理

输出结果格式

怎样让用户自定义自己想要的数据输出?我选择让用户自己根据标签选择器与属性选择器进行配置。

如下所示:

2级选择器指出目标数据在类名为newscontent的元素中。

输出结果定制中则指出了输出那些数据结果。是标准的JSON格式。

这里根据键名称,可以直观的看到我要得到的数据是文章标题与内容。

{
"title":"$element.children('.news_title').text()",
"content":"$element.children('.news_txt').text()"
}
以这个为例说一下写法
 $element.children('.news_title').text() 
$element是指上面2级选择器选择出的标签。这句话是说要得到类名为newscontent的元素中子元素类名为news_title的文本值。

更多标签选择器与属性选择器写法,参考Cheerio

其他

实例地址:

http://splider.docmobile.cn

项目地址:

https://github.com/LuckyHH/WebSplider

配置参考:

https://www.docmobile.cn/artical_detiail/luckyhh/1528369921460

基于WebSplider的新闻模块开发

https://www.docmobile.cn/artical_detiail/luckyhh/1528989508215

WebSplider在线爬虫的更多相关文章

  1. 七月在线爬虫班学习笔记(五)——scrapy spider的几种爬取方式

    第五课主要内容有: Scrapy框架结构,组件及工作方式 单页爬取-julyedu.com 拼URL爬取-博客园 循环下页方式爬取-toscrape.com Scrapy项目相关命令-QQ新闻 1.S ...

  2. 七月在线爬虫班学习笔记(六)——scrapy爬虫整体示例

    第六课主要内容: 爬豆瓣文本例程 douban 图片例程 douban_imgs 1.爬豆瓣文本例程 douban 目录结构 douban --douban --spiders --__init__. ...

  3. 七月在线爬虫班学习笔记(二)——Python基本语法及面向对象

    第二课主要内容如下: 代码格式 基本语法 关键字 循环判断 函数 容器 面向对象 文件读写 多线程 错误处理 代码格式 syntax基本语法 a = 1234 print(a) a = 'abcd' ...

  4. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  5. 爬虫实战——Scrapy爬取伯乐在线所有文章

    Scrapy简单介绍及爬取伯乐在线所有文章 一.简说安装相关环境及依赖包 1.安装Python(2或3都行,我这里用的是3) 2.虚拟环境搭建: 依赖包:virtualenv,virtualenvwr ...

  6. shell爬虫--抓取某在线文档所有页面

    在线教程一般像流水线一样,页面有上一页下一页的按钮,因此,可以利用shell写一个爬虫读取下一页链接地址,配合wget将教程所有内容抓取. 以postgresql中文网为例.下面是实例代码 #!/bi ...

  7. Python爬虫教程-16-破解js加密实例(有道在线翻译)

    python爬虫教程-16-破解js加密实例(有道在线翻译) 在爬虫爬取网站的时候,经常遇到一些反爬虫技术,比如: 加cookie,身份验证UserAgent 图形验证,还有很难破解的滑动验证 js签 ...

  8. python爬虫scrapy框架——爬取伯乐在线网站文章

    一.前言  1. scrapy依赖包: 二.创建工程 1. 创建scrapy工程: scrapy staratproject ArticleSpider 2. 开始(创建)新的爬虫: cd Artic ...

  9. python爬虫之有道在线翻译

    今天初学了python这门课 老师简单的讲解了一下 python的安装环境,配置环境变量,当前主流Python使用的是3.x版本, 下午简单的讲解了python的起源,发展以及在各个方面的应用 然后晚 ...

随机推荐

  1. 转:35个让人惊讶的 CSS3 动画效果演示

    本文收集了35个惊人的 CSS3 动画演示,它们将证明 CSS3 Transform 和 Transition 属性的强大能力.CSS 是网页设计非常重要的一部分,随着越来越多的浏览器对 CSS3 支 ...

  2. jQuery表格排序(tablesorter)

    1.在html页面的head中引用 <script src="/static/Bootstrap/js/jquery/jquery.tablesorter.min.js"&g ...

  3. linux常见问题解决

    1.登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$ cp /etc/skel/.bash* .

  4. 读高性能JavaScript编程 第四章 Conditionals

    if else 和 switch    &&    递归 if else 和 switch 一般来说,if-else 适用于判断两个离散的值或者判断几个不同的值域.如果判断多于两个离散 ...

  5. C# 颜色对照表

    参考资料 :https://www.cnblogs.com/msgarden/p/4949272.html Color.AliceBlue 240,248,255 Color.LightSalmon ...

  6. struct与class区别联系(转)

    传送门:struct与class区别联系 注意C中的struct和C++中的struct是不一样的,c中的struct比较原生,仅仅是将一些属性封装起来构成一个整体,没有OO的相关特性.而c++中的s ...

  7. 团队作业——Alpha冲刺 1/12

    团队作业--Alpha冲刺 Alpha 阶段认领的任务 杨光海天:加入随心摘首页和编辑界面的开发中,并完成冲刺博文的撰写 郭剑南.周琪文:图像识别核心算法的实现 赖志平:随心摘首页和编辑界面开发主力, ...

  8. 浅析Java虚拟机结构与机制[转]

    本文旨在给所有希望了解JVM(Java Virtual Machine)的同学一个概念性的入门,主要介绍了JVM的组成部分以及它们内部工作的机制和原理.当然本文只是一个简单的入门,不会涉及过多繁杂的参 ...

  9. python第三十六课——2.迭代器对象

    满足前提: 1).必须是一个可迭代对象 2).可以被next()所作用的 举例: generator... 高效的检测一个对象是否是迭代器对象 需要使用collections模块中的Iterator类 ...

  10. BZOJ3578:GTY的人类基因组计划2(集合hash,STL)

    Description GTY召唤了n个人来做实验,GTY家的房子很大,有m个房间一开始所有人都在1号房间里,GTY会命令某人去某个房间等待做实验,或者命令一段区间的房间开始实验,实验会获得一些实验信 ...