转载

平庸技术流,用 WebApi +AngularJS 实现网络爬虫

最近园子里网络爬虫很火爆,从 PHP 到 Python,从 windows服务 到 winform 程序,各路大神各显神通。小弟也献下丑,从平庸流出发,简述下 WebApi +AngularJS 方式实现网络爬虫。

一、技术框架

1.1 前端:

AngularJS,创建SPA(单页面应用)。爬虫需要长时间的等待服务器返回结果,必须使用ajax实现,使用JQuery一样可以做到。

1.2 后端:

WebApi。AngularJS 配合 WebApi 使用十分融洽。

1.3 后端用到的框架/库:

a. Abp,最近园子里很火的基础框架,最大的优点是分模块的实现,包括 AppService(WebApi) 层的分模块,使用后,代码结构非常清晰。详细内容可以见 基于DDD的现代ASP.NET开发框架--ABP系列文章总目录

b. 苏飞论坛的 C#HttpHelper万能框架 ,用于Html页面的采集,可以直接使用『HTTP代理』读取,这点很重要!

需要注意的一点是,这个框架不是免费的,需要成为年费会员才可以下载。

c. Ivony的Jumony库 ,项目介绍:“Jumony Core首先提供了一个近乎完美的HTML解析引擎,其解析结果无限逼近浏览器的解析结果。支持CSS3选择器。”

二、技术实现

2.1、抓取免费的 Http 代理地址。

这个百度就行,可以搜索到一大堆的提供 Http 代理网址的网站,首先将这些免费的Http代理抓取大自己的代理库,第二步和第三步需要用到这些代理。使用时,要记录代理的可用情况,设定策略,失败次数过多时,剔除掉。

当然,土豪直接购买收费的代理即可,稳定性高。

下面是我抓取的代理列表:

平庸技术流,用 WebApi +AngularJS 实现网络爬虫

被禁的代理(我设定策略是失败次数大于成功次数3次,即抛弃):

平庸技术流,用 WebApi +AngularJS 实现网络爬虫

2.2、读取文章列表(单线程)

有了足够的Http代理列表后,就可以抓取网页了。

后端实现功能:使用 HttpHelper 挂代理抓取网页,然后使用  Jumony 分析页面内容。同时要记录每个 Http 代理的成功/失败情况。

前端控制流程:根据 代理抓取的结果,判断是否抓取成功。如果成功,继续下一个页面的抓取;如果失败,换个代理继续抓取当前页。

由于文章列表不会太多,用单线程抓取足够了。

上图:

平庸技术流,用 WebApi +AngularJS 实现网络爬虫

2.3、读取文章(多线程)

通过第二步抓取到了大量未读取内容的文章后,这时候就需要抓取文章内容了。由于量比较大,通过多线程实现。

所谓的多线程,就是通过 Ajax 同时调用多个 WebApi 进程,通过监控返回结果。

上图:

点击『开始读取』后

平庸技术流,用 WebApi +AngularJS 实现网络爬虫

点击『停止读取』后:

平庸技术流,用 WebApi +AngularJS 实现网络爬虫

三、后记

没有用到什么高深的知识,高深的部分都被 AngularJS、Abp、HttpHelper、Jomony实现,因此是平庸技术流的实现。

以上。

正文到此结束
Loading...