网络爬虫详细设计方案

2023-05-16

目录

网络爬虫设计方案

1、网络爬虫简介

2、Java爬虫的开发和使用流程

2.1 下载

2.2 分析

3、单点登陆与Jsoup解析

3.1 单点登陆简介

3.1.1 登陆

3.1.2 注销

3.2 Jsoup网页解析

4、网络爬虫详细设计

4.1 业务流程图

4.2 业务流程

4.2.1 模拟登陆服务

4.2.2 数据服务

4.2.3 解析服务

4.3 tomcat监控

5、视图层详细设计

5.1 开发工具与框架

5.2 开发流程

6、总结


 

 

网络爬虫设计方案

1、网络爬虫简介

网页爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本;其使用场景极其广泛,各大搜索引擎(如百度,谷歌,Bing)中都有他们的身影。网络爬虫按照系统结构和实现技术,大致分为以下几种类型:通用网络爬虫,聚焦网络爬虫,增量式网络爬虫,深层网络爬虫。

2、Java爬虫的开发和使用流程

2.1 下载

(1)选择并使用网络工具包(例如HttpClient)下载指定url的网页源代码

(2)使用get/post的方式提交请求

(3)设置请求的headers参数

(4)置请求的cookies参数

(5)设置请求的query/formData参数

(6)使用代理IP

(7)分析目的请求的各种必要参数的来源

(8)对于分析和解决成本过大的请求,可以使用模拟浏览器进行下载(推荐无界面浏览器phantomjs+selenium)

2.2 分析

(1)对于Html形式的文本,使用Jsoup等工具包解析;

(2)对于json格式的文本,使用Gson等工具包解析;

(3)对于没有固定格式,无法用特定工具解析的文本,使用正则表达式工具获取目标数据。

3、单点登陆与Jsoup解析

河南的应用场景与吉林的应用场景基本相似,都是访问第三方门户系统,根据相应需求抓取相关网页数据。依据吉林的开发情况,河南开发也需要有单点登陆与使用Jsoup进行页面解析重要的两个部分。目前单点登陆有两套方案,吉林前期使用的单点登陆方案使用过程需要进行相关参数的修改,后期使用的单点登陆方案操作起来比较方便,但业务逻辑相对复杂一点,这个在河南部署的时候综合考虑。

3.1 单点登陆简介

单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分。

3.1.1 登陆

相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。如图示:

  1. 用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
  2. sso认证中心发现用户未登录,将用户引导至登录页面
  3. 用户输入用户名密码提交登录申请
  4. sso认证中心校验用户信息,创建用户与sso认证中心之间的会话,称为全局会话,同时创建授权令牌
  5. sso认证中心带着令牌跳转会最初的请求地址(系统1)
  6. 系统1拿到令牌,去sso认证中心校验令牌是否有效
  7. sso认证中心校验令牌,返回有效,注册系统1
  8. 系统1使用该令牌创建与用户的会话,称为局部会话,返回受保护资源
  9. 用户访问系统2的受保护资源
  10. 系统2发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
  11. sso认证中心发现用户已登录,跳转回系统2的地址,并附上令牌
  12. 系统2拿到令牌,去sso认证中心校验令牌是否有效
  13. sso认证中心校验令牌,返回有效,注册系统2
  14. 系统2使用该令牌创建与用户的局部会话,返回受保护资源

用户登录成功后,会与sso认证中心及各个子系统建立会话,用户与sso认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过sso认证中心,全局会话与局部会话有如下约束关系:

  1. 局部会话存在,全局会话一定存在
  2. 全局会话存在,局部会话不一定存在
  3. 全局会话销毁,局部会话必须销毁

3.1.2 注销

单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁,用下面的图来说明:

sso认证中心一直监听全局会话的状态,一旦全局会话销毁,监听器将通知所有注册系统执行注销操作。

简要说明上图:

  1. 用户向系统1发起注销请求
  2. 系统1根据用户与系统1建立的会话id拿到令牌,向sso认证中心发起注销请求
  3. sso认证中心校验令牌有效,销毁全局会话,同时取出所有用此令牌注册的系统地址
  4. sso认证中心向所有注册系统发起注销请求
  5. 各注册系统接收sso认证中心的注销请求,销毁局部会话
  6. sso认证中心引导用户至登录页面

注:单点登陆目前有两套系统,其源码都将以附件的形式呈送。

3.2 Jsoup网页解析

Jsoup使用起来比较简单,有过Jquery使用经历的会很快上手。使用Jsoup进行页面解析,其实就是使用选择器针对大数据量的网页进行筛选,获得所需要的数据。

常用选择器语法如下:

Elements links = doc.select("a[href]"); //带有href属性的a元素

Elements pngs = doc.select("img[src$=.png]");//扩展名为.png的图片

Element masthead = doc.select("div.masthead").first();//class等于masthead的div标签

Elements resultLinks = doc.select("h3.r > a"); //在h3元素之后的a元素

Selector选择器概述:

tagname: 通过标签查找元素,比如:a

ns|tag: 通过标签在命名空间查找元素,比如:可以用 fb|name 语法来查找 <fb:name> 元素

#id: 通过ID查找元素,比如:#logo

.class: 通过class名称查找元素,比如:.masthead

[attribute]: 利用属性查找元素,比如:[href]

[^attr]: 利用属性名前缀来查找元素,比如:可以用[^data-] 来查找带有HTML5 Dataset属性的元素

[attr=value]: 利用属性值来查找元素,比如:[width=500]

[attr^=value], [attr$=value], [attr*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,比如:[href*=/path/]

[attr~=regex]: 利用属性值匹配正则表达式来查找元素,比如: img[src~=(?i)\.(png|jpe?g)]

*: 这个符号将匹配所有元素

4、网络爬虫详细设计

4.1 业务流程图

4.2 业务流程

爬虫服务可拆分为3个服务:

4.2.1 模拟登陆服务

提供对外接口,用户传入用户名、密码、URL、待访问系统、返回类型,系统根据返回类型返回HTML代码或者Cookie信息

4.2.2 数据服务

新闻、公告信息爬取步骤:

  1. tomcat启动
  2. 爬取新闻信息和公告信息
  3. 获取绑定用户数,根据绑定用户数计算使用的线程数
  4. 为线程分配用户
  5. 开始爬取,并删除临时表信息
  6. 数据入临时表
  7. 数据验证,用于处理爬取失败的用户,正式表的数据不删除
  8. 删除正式表数据
  9. 临时表数据同步至正式
  10. 判断所有线程结束后,返回3
  • 需要记录日志,直接写入文件,记录内容:启动时间、线程数、用户数、成功用户数、成功数据量、失败用户数 

4.2.3 解析服务

步骤:

  1. 用户session信息判断,用户session存在的直接使用session访问,不存在的登录
  2. 登录至云门户
  3. 登录至业务系统
  4. 爬取页面信息
  5. 解析页面
  6. 形成json数据
  • 实时获得工单列表条目数和工单详细信息大致流程与解析服务一致,其实就是多爬取了一次工单列表页面,不进行入库处理,实时返回工单列表数量。上述解析服务流程基本可以满足常见的页面数据爬取工作,对于涉及交互方面的则需根据具体情况来分析。

4.3 tomcat监控

需要使用shell脚本对其进行管理,主要有以下两点:

  1. 每天定时重启,初步定为凌晨0点
  2. 10分钟扫描一次tomcat进程,发现挂掉了立即重启

 

5、视图层详细设计

5.1 开发工具与框架

Hbuilder开发平台, mui框架,jQuery框架

5.2 开发流程

  1. 页面设计
  2. 静态页面 -- 根据画好的页面效果图,写出静态页面,以及部分按钮的实现。注意 css的编写 及 后期 页面 之间参数的传递。
  3. 数据解析 -- 从后台人员处获取接口,然后js中通过jQuery.ajax({})调用接口,通过固定参数测试是否能获取到数据,注意遮罩及回调函数。
  4. 数据渲染 -- 根据获取的数据类型,往页面填充数据。通过js便利填充 或者用 mui内部插件引入angular.min.js,通过 $scope赋值。

 

6、总结

使用爬虫在获取数据过程中确实提供了方便,在第三方不提供接口的情况下,使用网络爬虫是一种很好的数据获取机制。网络网虫的好处大致有以下几点:

  • 准确定位,数据获取方便
  • 数据筛选,精炼海量信息
  • 数据库角色扮演者

但是网络爬虫也存在不少缺点,我们在开发过程中发现使用网络爬虫其实还是存在很多短板的,不足之处如下:

  1. 不规则网页处理,页面结构混乱导致爬虫代码冗余
  2. 反爬策略,网站反爬策略导致爬取数据失败
  3. 动态加载网站,抓取动态加载的数据,需要分析大量的源文件
  4. 大规模,海量数据计算能力与内存容量无法形成正比

吉林项目最初使用爬虫的方式获取数据,在测试过程中发现数据加载较慢,对于实时抓取的数据显示的尤为突出。目前该项目已调整开发,计划使用接口的形式从第三方来进行数据的获得。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络爬虫详细设计方案 的相关文章

随机推荐

  • MBP合上盖子后仍反复自动唤醒

    现象 每天早上起来电脑都有点温度 xff0c 明明一直合着盖子但总是隔了几天就没电了 在办公室的时候开着steam就看到提示家里的笔记本可以远程流传输 通过休眠命令查看 xff0c 几乎每10分钟就有一条唤醒记录 大部分唤醒理由是 xff0
  • MAC 关闭office软件自动更新提示 (Microsoft AutoUpdate)

    参考 xff1a https blog csdn net weixin 42873928 article details 115936349 sudo chmod 000 Microsoft AutoUpdate app 执行的功能是设置文
  • git 出现 “fatal: The remote end hung up unexpectedly“

    情况 xff1a 有台两年没开的电脑长期没有更新git等工具版本 xff0c clone跟checkout的时候都有报这个问题 实际上没注意到git lfs filter process git lfs command not found这
  • VSCode智能补全代码片段技巧

    小技巧 foreach的代码片段中没有快速建议智能建议不优先推荐代码片段 xff08 试过也不大行 xff09 foreach的代码片段中没有快速建议 通过快速建议输入一个foreach之类的代码片段 xff0c 保持tab键可以切换输入位
  • Windows下搭建局域网内简易git服务器

    这里写自定义目录标题 概述配置步骤1 任意位置创建git 仓库2 启动Git Daemon3 其他电脑克隆工程4 开机自动启动5 其他配置注意事项 概述 由于和朋友小规模制作项目 xff0c 又使用了UE5这样的庞然大物 xff0c 准备整
  • 如果OpenStack给虚机自动分配的ip和其他静态配置的ip重复了怎么办

    1 查找你要修改ip地址的网卡id root 64 node 1 neutron port list 2 允许ip地址为10 10 1 56通过 root 64 node 1 neutron port update 4e79200f ac5
  • Lisp笔记

    变量 动态变量 defvar defparameter span class token punctuation span span class token car dafvar span paraname default value sp
  • MSDK接入 中的各种问题

    检查顺序 包名注意一下 Unity报 Found plugins with same names Found plugins with same names Assets Msdk BuglyPlugins Android libs bug
  • C++ Windows 窗体程序入门 - 1.你的第亿个窗体程序

    前言 43 学Windows窗体已经有一段时日了 xff0c 奈何没有什么浅显易懂 amp 便宜 xff01 xff01 的书籍 就想来 算是记笔记吧 顺便还能给你们总结一些经验 注 有许多内容源于我看过的一些视频 比如Chili和Cher
  • CSS替换元素和非替换元素

    根据是否可以通过修改某个属性值更改元素呈现的内容 xff0c 可以分为替换元素和非替换元素 替换元素 以下元素都是可替换元素 xff0c 以及在各种浏览器下的默认display值 xff08 图片来源 CSS世界 张鑫旭 xff09 针对
  • SD-WAN加速保障跨国公司数据传输质量

    很多企业开启国际化业务 xff0c 跨国文件传输越来越频繁 xff0c 而且随着业务的开展 xff0c 公司规模的扩张 xff0c 很多企业都在海外设置了分支机构 不得不说 xff0c 随着经济一体化的进程不断加快 xff0c 企业跨国经营
  • 零基础视觉SLAM(一)

    文章目录 SLAM简介什么是SLAM xff1f 传感器VSLAM架构视觉里程计后端优化 SLAM应用自学参考书预备知识 SLAM简介 什么是SLAM xff1f SLAM从本质上来说它要实现的就是通过传感器去实时地估计自身位置及经过的轨迹
  • 关于Proxmox 5.x的国内有效镜像源

    官网的 http download proxmox com 有多慢我就不提了 xff0c 否则大家也不会看到这篇小文 首先需要分清楚Proxmox VE的镜像构成 1 xff09 Debian自身 这个用国内哪个镜像都可以 xff0c al
  • 多线程是否真的有必要?

    一点疑问 相比大家在投简历 面试等等过程中 xff0c 或多或少会遇到这么一个问题 xff1a 熟悉掌握多线程开发 xff1b 谈谈你对多线程的认识 其实 xff0c 我有这么一个疑问 xff0c 那就是多线程真的有必要么 xff1f 根据
  • stm32无法烧录问题分析

    1 开始能烧录 xff0c 烧录程序后就不能烧录了 原因 xff1a 升级接口IO被代码修改应用 xff0c 导致无法烧录 xff0c 解决办法 xff1a 可以让MCU进入升级模式 xff08 拉高boot0 xff0c 然后复位MCU
  • 【Git】msysgit + TortoiseGit:在 windows 上安装配置版本控制工具 Git 图形化使用

    msysgit 43 TortoiseGit xff1a 在 windows 上安装配置版本控制工具 Git 图形化使用 一 安装说明 Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控
  • Slickedit使用记录

    Slickedit使用记录 一 快捷键二 问题和解决方法 一 快捷键 已经习惯了android studio 中的快捷键 xff0c 在slickedit上也做下修改Tools gt options gt Keyboard and mous
  • 查看.Net源代码vs版本号

    方法 xff1a 用记事本打开vs项目的 sln文件 第2行就是这个源代码包的开发软件vs版本号了 Microsoft Visual Studio Solution File Format Version 9 00 Visual Studi
  • Docker: GUI 应用,Ubuntu 上如何运行呢?

    操作系统 Ubuntu 18 04运行镜像 continuumio anaconda3 based on debian Step 1 安装 Docker span class token comment update the apt pac
  • 网络爬虫详细设计方案

    目录 网络爬虫设计方案 1 网络爬虫简介 2 Java爬虫的开发和使用流程 2 1 下载 2 2 分析 3 单点登陆与Jsoup解析 3 1 单点登陆简介 3 1 1 登陆 3 1 2 注销 3 2 Jsoup网页解析 4 网络爬虫详细设计