【由浅入深】爬虫技术,值得收藏,来了解一下~

2023-11-19

                                  爬虫技术,来了解一下~~

一、为什么需要爬虫技术?

         现在的互联网来说,包含着各种海量的信息,无孔不入,包罗万象。出于数据分析或产品需求,我们需要从某些网站,提取出我们感兴趣、有价值的内容,我们需要一种能自动获取网页内容并可以按照指定规则提取相应内容的程序,这就是爬虫。

        让我们说的稍微好听一点,网络爬虫就是按照一定的规则,自动地抓取万维网信息的程序或者脚本,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索方式。       

二、想要了解爬虫,你对URL了解多少?

URI(Universal Resource Identifier):Web当中的每个可用资源,如Html文档,图像视频,程序等,都有一个唯一的统一标识符进行定位。

URI组成:

  • 访问资源的命名机制
  • 存放资源的主机名
  • 资源自身名称,通常由路由表示

URL(Uniform Resource Locator):URL是URI的子集,URL是Internet上描述信息资源的字符串。主要在www客户程序和服务器上。采用URL可以用统一的格式来描述各种信息资源、包括文件,服务器地址和目录等。

URL组成:

  • 协议(服务方式)
  • 存有该资源的主机IP地址(有时也包括端口号)
  • 主机资源的具体地址,如目录和文件名

三、何为从网页URL抓取?

所谓网页抓取,就是指URL地址制定网络资源从网络流中读取出来,保存到本地。类似于使用程序,模拟IE浏览器的功能。将URL当做HTTP请求的内容发送到服务器端,然后读取服务端响应的资源。

四、网络爬虫系统的工作原理是什么?

在网络爬虫的系统框架中,主过程由控制器、解析器、资源库三部分组成。控制器的主要工作负责给多线程中的各个爬虫线程分配工作任务。解析器的主要工作是下载网页,进行网页处理,主要将一些Js脚本标签、css代码内容、空格字符,HTML标签等内容处理掉,爬虫的基本工作是由解析器完成。资源库,是用来存放下载到的文件资源,一般都用大型的数据库存储。如:ORACLE数据库,对其建立索引。

Web网络爬虫系统一般会选择一些比较重要的、出度较大的网站的URL作为种子URL集合。网络爬虫系统以这种 种子集合作为初始URL,开始数据的抓取。因为网页中含有链接信息,通过已有的网页URL会得到一些新的URL,可以把网页之间的指向结构试做为一个森林,每个种子URL对应的网页是森林中的一棵树的根节点。这样Web网络爬虫系统就可以根据广度优先算法或者深度优先算法遍历所有的网页。由于深度优先算法可能会使爬虫系统陷入一个网站内部,不利于搜索比较靠近网站首页的网页信息,因此,一般采用广度优先搜索算法采集网页。

Web网络爬虫系统首先将种子URL放入下载队列,然后简单地从队首取出一个URL下载其对应的网页。得到网页的内容将其存储后,再经过解析网页中的链接信息可以得到一些新的URL,将这些URL加入下载队列。然后再取出一个URL,对其对应的网页进行下载,然后再解析,如此反复进行,直到遍历了整个网络或者满足某种条件后才会停止下来。

五、如何简单概括一下网络爬虫工作流程?

5.1 选取一部分精心挑选的种子。

5.2 将这些URL放入待抓取URL队列。

5.3 从待抓取URL中选出待抓取URL,解析DNS,并得到主机的IP,并将URL对应的网页下载下来,存取进已下载的网页库中,此外,将这些URL放进已抓取URL队列。

5.4 分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环。

六、如何理解上面说的-深度和宽度优先遍历策略?

6.1 深度优先遍历策略

网络爬虫会从起始叶开始,一个链接一个链接跟踪下去,处理完这条路线之后,再转入下一个起始页。继续~

遍历顺序 A-F-G   E-H-I    B   C   D

6.2 宽度优先遍历

将新下载网页中发现的链接直接插入待抓取的URL队列的末尾。也就是指网络爬虫会先抓取起始网页中链接的所有网页,然后再选择其中的一个链接网页,继续抓取此网页中链接的所有网页。

遍历顺序 A-B-C-D-E-F G H I

当然在这里除了这两种还有一些其他的遍历方式,比如反向链接数策略、Partial PageRank策略、OPIC策略策略、大站优先策略等等。

七、我们使用什么技术进行爬虫呢?

7.1 Apache Nutch分布式爬虫

7.2 Java爬虫:Crawler4j、WebMagic、WebController

7.3 python爬虫:scrapy

简介一下这三种方式:

Apache Nutch分布式爬虫

(1)大多数用户是需要一个做精准数据爬取(精抽取)的爬虫,Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。说实在的,利用Nutch进行爬虫会浪费许多时间在不必要的计算上。

(2)Nutch 以来Hadoop运行,Hadoop本身需要很多时间。

(3)Nutch 有一套插件机制,提供精抽取功能。但是利用反射机制来加载和调用插件,使得程序的编写和调试都变的异常困难。

(4)Nutch2的版本目前并不适合开发。

总结:1,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫,

           2,如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。

Java爬虫

Java单独拿出来是因为在Java中网络爬虫的生态圈是非常完善的。相关的资料也是比较完备。

开源网络爬虫(框架)难问题和复杂的问题已经得到了解决,比如DOM树解析和定位、字符集检测、海量URL去重。

爬js生成的信息:使用这些爬虫来遍历网站,遇到需要解析的页面,就将网页的相关信息提交给模拟浏览器,来完成JS生成信息的抽取。

爬取ajax信息:将生成的ajax请求作为种子,放入爬虫。用爬虫对这些种子,进行深度为1的广度遍历(默认就是广度遍历)。

爬取要登陆的网站:开源爬虫都支持在爬取时指定cookies,模拟登陆主要是靠cookies

抽取网页的信息:CSS SELECTOR和XPATH

保存网页的信息:有一些爬虫,自带一个模块负责持久化。比如webmagic,有一个模块叫pipeline。通过简单地配置,可以将爬虫抽取到的信息,持久化到文件、数据库等。还有一些爬虫,并没有直接给用户提供数据持久化的模块。比如crawler4j和webcollector。让用户自己在网页处理模块中添加提交数据库的操作。至于使用pipeline这种模块好不好,就和操作数据库使用ORM好不好这个问题类似,取决于你的业务。

python爬虫

python爬虫,python可以用30行代码,完成JAVA 50行代码干的任务。让我们来看看它的框架流程图。

 

Scrapy的架构图,绿线是数据流向。

(1)从初始的URL,Scheduler 会将其交给 Downloader 进行下载

(2)下载之后会交给 Spider 进行分析。

(3)需要保存的数据则会被送到Item Pipeline,对数据进行后期处理

数据流动通道内需要安装各种中间件,进行必要处理。在进行爬虫的时候,首先先处理好模块,就比如:下载模块,爬行模块,调度模块,数据存储模块等等。

八、对方反爬虫操作有哪些,如何解决反爬虫?

一般网站从三个方面进行反爬虫。用户请求的Headers,用户行为,网站目录和数据加载方式。第三种一些应用ajax的网站会采用,这样增大了爬取的难度。

8.1 用户请求的Headers

很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测。

解决反爬虫

其解决反爬虫的解决方式,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。

8.2 ,用户行为

(1)检测 同一IP短时间内多次访问同一页面。

(2)检测 同一账户短时间内多次进行相同操作。

解决反爬虫

(1)前一种情况,对于这种情况,使用IP代理就可以解决。可以专门写一个爬虫,爬取网上公开的代理ip,检测后全部保存起来。这样的代理ip爬虫经常会用到,最好自己准备一个。有了大量代理ip后可以每请求几次更换一个ip,这在requests或者urllib2中很容易做到,这样就能很容易的绕过第一种反爬虫。

(2)可以在每次请求后随机间隔几秒再进行下一次请求。有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制

8.3 动态页面的反爬虫

用这套框架几乎能绕过大多数的反爬虫,因为它不是在伪装成浏览器来获取数据。除了加密ajax参数,它还把一些基本的功能都封装了,全部都是在调用自己的接口,而接口参数都是加密的。

解决反爬虫

对于未加密的网站,接利用requests或者urllib2模拟ajax请求,对响应的json进行分析得到需要的数据,直接模拟ajax请求获取数据。

对于加密网站 可以用selenium+phantomJS框架,调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本。从填写表单到点击按钮再到滚动页面,全部都可以模拟,不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数据的过程模拟一遍。


--------------------- 
作者:小马哥
来源:博客园
原文:https://www.cnblogs.com/mafeng/p/5651323.html
 

欢迎订阅关注公众号(JAVA和人工智能)

                                                           获取更多免费书籍、资源、视频资料

               

文章超级链接:

 1,分布式系统详解--基础知识(概论)

 2,分布式系统详解--基础知识(线程)

 3,IDEA和Eclipse的比较

 4,IntelliJ IDEA(最新)安装-破解详解--亲测可用

 5,scala-构造器-辅助构造器-伴生对象-单例对象

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

【由浅入深】爬虫技术,值得收藏,来了解一下~ 的相关文章

  • PHP base64转图片

    转图片 public function tupian base64 image content data image png base64 9j 4AAQSkZJRgABAQEASABIAAD 4QAiRXhpZgAATU0AKgAAAAg
  • [网络安全]sqli-labs Less-5 解题详析

    网络安全 Less 5 GET Double Injection Single quotes String 双注入GET单引号字符型注入 判断注入类型 判断注入点个数 查库名 爆破 left函数 抓包 查库名 双查询注入 原理 实例 查库名
  • Qt VS Tools插件没有Qt Option选项(VS 2022)

    Qt VS Tools插件没有Qt Option选项 VS 2022 在尝试用Vs2022搭建Qt开发环境时 跟着网上教程 发现自己安装完Qt Vs Tools后 没有Qt Option选项 如图 推测可能是版本太新的问题 于是点开Opti
  • SpringCloud-服务注册与发现

    服务注册与发现 前面我们没有服务注册中心 也可以服务间调用 为什么还要服务注册 当服务很多时 单靠代码手动管理是很麻烦的 需要一个公共组件 统一管理多服务 包括服务是否正常运行 等 Eureka用于 服务注册 目前官网已经停止更新 1 Eu
  • Vue项目中 vue-waterfall-easy 瀑布流框架使用

    1 Installation 安装 进入到项目当前文件夹 执行命令 npm install vue waterfall easy save 2 引入vue waterfall easy 2 1 main js中引入 import vueWa
  • MVC MVP MVVM

    参考MVC MVP MVVM的区别 前端面试标准答案 知乎 zhihu com 总结 MVC将应用抽象为数据层 Model 视图层 View 逻辑层 controller 降低了项目耦合 但MVC并未限制数据流 Model和View之间可以
  • Android 获取系统中软件的信息

    得到手机中所有的应用程序信息 return public List
  • 【100%通过率 】华为OD真题c++/python 【羊、狼、农夫过河】【 2022 Q4

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 羊 狼 农夫都在岸边 农夫有一艘容量固定的船 要求求出不损失羊情况下将全部羊和狼运到对岸需要的次数 农夫在或农夫离开后羊的数量大于狼的数量时狼不
  • css3动画属性解析:【transition-过渡】

    一 css3动画之 transition 语法 简写方式 transition property duration timing function delay div transition all 1s ease in out 2s 上面这
  • PWM模块:边沿对齐PWM和中心对齐PWM

    PWM模块 边沿对齐PWM和中心对齐PWM 当PWM 时基工作在自由运行模式时 模块产生边沿对齐的PWM 信号 给定PWM 通道的输出1 边沿对齐模式 信号的周期由装入PTPER 的值指定 其占空比由相应的PDCx 寄存器指定 参见图15
  • ChatGPT热度“狂飙”,OceanBase也去找它唠了唠

    最近互联网的关键字 非 ChatGPT 莫属 就是这个小东西 集唠嗑 提问 答疑 科普 写作于一体 让我看看哪个孤独的打工人 还没和 ChatGPT 聊上一聊 有人说 ChatGPT 这么智能 或将取代人类的工作 OceanBase 的小编

随机推荐

  • c/c++资源汇总

    Visual C 视频技术方案宝典 pdf http www t00y com file 17628500 Windows 图形编程 pdf http www t00y com file 17628502 Windows程序设计 第2版 p
  • 100天精通Python(数据分析篇)——第52天:numpy模块完结篇

    文章目录 一 拷贝 1 赋值 2 视图 3 副本 4 注意点copy和view 二 numpy常用方法 1 小技巧 2 生成随机数 三 numpy中的nan和inf 一 拷贝 1 赋值 简单的赋值不会创建数组对象的副本 相反 它使用原始数组
  • Unity 使用Photon Server 联网开发(二)游戏同步+房间列表

    photon联机的配置 直接去官网下载Pun的资源包导入项目 设置PhotonServerSettings配置文件 配置appid 通讯协议 服务器地址 端口号 服务器地址可以配置成自己本地服务器 云服务器 直接使用photon服务器 也可
  • 吕聪贤SwiSHmax中文视频教程打包下载(连接已失效)

    教程介绍 SwiSHmax是Flash编辑工具 SwiSHzone家族的新成员 假如您想要不使用Flash来制作强大或令人惊叹的动画 SwiSHmax是您最佳的选择 SwiSHmax操作方便 您将可轻易的在短时间内制作出复杂的文本 图像 图
  • HashTable HashMap ConcurrentHashMap 的介绍以及区别

    目录 今日良言 投资自己才是最好的投资 一 HashMap 二 HashTable 三 ConcurrentHashMap 四 三者的区别 今日良言 投资自己才是最好的投资 这篇博客主要介绍的是 HashTable HashMap Conc
  • 计算机图形学 3D渲染 笔记(一)

    1 坐标系 大多数计算机屏幕采用的坐标系是以左上角为原点 水平 右 为x轴 纵向 下 为y轴 3D图形学习中通常使用另一种坐标系 即 正中心为原点 水平 右 为x轴 纵向 上 为y轴 当前者坐标系转化到后者 需要进行简单的转化 Sx Sy为
  • IDEA2021.2安装与配置(持续更新)

    IDEA2021 2安装与配置 持续更新 一 下载 二 安装 三 配置 3 1 配置全局生效 3 2 首次启动 3 3 激活 3 4 字体 字体大小 3 5 配色方案 3 6 注解生效 3 7 自动导包移包 3 8 自动补全快捷键 3 9
  • vue-nginx刷新404问题

    文章目录 1 背景介绍 2 问题描述 2 1 问题一 2 2 问题二 3 原因分析 3 1 问题一 3 2 问题二 4 排查问题一原因 5 反思 6 nginx root与alias的使用 7 更优雅地解决vue网页浏览器刷新404 7 1
  • Mongodb——使用Mongodb对字段中字符串内容进行截取,并进行分组统计

    最近忙的厉害 除了发一发之前写的存货只能写一些简单的东西了 这里就简单分享下最近遇见针对数据进行指标统计遇见的问题 针对字段中某部分内容的指标统计 在使用mongodb进行指标统计的时候可能遇见下面的数据结构 1 id ObjectId 5
  • 短信备份到另一个手机android,旧手机的短信怎么转移到新手机上?三种方法总有一种适合你...

    手机短信一直以来都是我们和其他对象传输信息的工具 更是存储了大量重要的信息 如果我们更换手机需要保留下来这些短信该怎么办呢 有没有什么方法可以将这些短信转移到新手机中去 或者导出到电脑上进行保管呢 这里有三种方法 第一种方法用内存卡 可以打
  • C++仿函数

    1 仿函数的定义 仿函数简单说就是在类中定义的特殊函数 没有函数名 或者说函数名统一为 operation 或者可以认为是重载运算符 格式为 返回类型 operator 参数列表 定义了仿函数的对象 可以直接通过下面格式调用仿函数 对象名
  • 异步加载vue组件

    什么时候使用 组件较大 或者不是必用的 通常组件在script标签对中导入 而异步组件在component中使用 例如 components ForData gt import view Fordata
  • J2EE集合框架

    1 UML 二 集合的基本特点 list集合的特点 增删改查 有序 可重复 三 List集合的三种遍历方式 for foreath iterator 四 ArrayList LinkedList 的比较与分析 比较 1 ArrayList
  • 基于Matlab的灰狼算法优化LSTM风电功率预测

    基于Matlab的灰狼算法优化LSTM风电功率预测 随着可再生能源的快速发展 风能作为一种重要的清洁能源形式变得越来越受关注 风电功率预测在风电场的运营和调度中起着关键作用 然而 由于风速的不稳定性和不确定性 精确地预测风电功率仍然具有一定
  • SpringCloud Gateway:status: 503 error: Service Unavailable

    使用SpringCloud Gateway路由请求时 出现如下错误 yml配置如下 可能的一种原因是 yml配置了gateway discovery locator enabled true 此时gateway会使用负载均衡模式路由请求 但
  • Lim接口测试平台-接口测试功能详解

    一 接口测试 项目地址 Gitee Github 接口测试模块是整个Lim平台的核心 左侧是接口的模块树 右侧顶部是用例操作功能区 列表展示接口用例信息 文章目录 一 接口测试 二 维护接口用例 各步骤类型详解 1 执行步骤 1 接口步骤
  • Unity --- 触摸方法,以及灯光与烘培的使用

    触摸方法 1 首先触摸分为两大类 多点触摸和单点触摸 这两种方式的触摸通过下面这个触摸数来进行判断 当其等于1的时候 为单点触摸 当其大于1的时候为多点触摸 2 当我们在调用触摸方法的时候我们首先需要打开对应的多点 单点触摸 上面这个是开启
  • QObject的d_ptr成员——箭头符号的重载

    QObject中的d ptr是这样定义的 QScopedPointer
  • vscode cmake 编译32位程序

    vscode cmake 编译32位程序 为什么要用cmake vscode中的C C 插件直接支持的只是最简单的单文件编译 运行和调试 要管理大的项目 或者生成库 C C 插件不能直接支持 需要开发者利用vscode的task功能 结合脚
  • 【由浅入深】爬虫技术,值得收藏,来了解一下~

    爬虫技术 来了解一下 一 为什么需要爬虫技术 现在的互联网来说 包含着各种海量的信息 无孔不入 包罗万象 出于数据分析或产品需求 我们需要从某些网站 提取出我们感兴趣 有价值的内容 我们需要一种能自动获取网页内容并可以按照指定规则提取相应内