zoukankan      html  css  js  c++  java
  • 平庸技术流,用 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代理抓取大自己的代理库,第二步和第三步需要用到这些代理。使用时,要记录代理的可用情况,设定策略,失败次数过多时,剔除掉。

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

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

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

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

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

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

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

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

    上图:

     

    2.3、读取文章(多线程)

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

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

    上图:

    点击『开始读取』后

     点击『停止读取』后:

    三、后记

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

    以上。

  • 相关阅读:
    JavaWeb学习之什么是Servlet、如何使用servlet、为什么这样使用、servlet的虚拟路径、关于缺省Servlet(2)
    Android Drawable
    Android 热补丁和热修复
    Android Immersive Mode (沉浸模式) 还是 Translucent Bars (透明状态栏)
    Android & iOS 第三方 Crash ANR 捕捉上传
    Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()
    Android Volley
    Android HttpURLConnection And HttpClient
    Android Fragment 生命周期及其正确使用(建议使用自定义View替换Fragment)
    Android Intent (可通过URL启动 Activity)
  • 原文地址:https://www.cnblogs.com/dusdong/p/4733594.html
Copyright © 2011-2022 走看看