ins @ngadc

前言

我相信很多人都听说过(网络)爬虫,但不清楚这到底是个什么概念。本文借助网上相关资料,进行简单地汇总整理。爬虫还是比较敏感,在简书发文章,竟然发不了。。。

目录

  • 什么是网络爬虫

  • 网络爬虫的基本原理

    • 1、获取网页

    • 2、提取信息

    • 3、保存数据

    • 4、自动化程序

  • 能抓怎样的数据

    • JavaScript 渲染页面

  • 网络爬虫种类

    • 1、通用网络爬虫

    • 2、聚焦网络爬虫

    • 3、增量式网络爬虫

    • 4、深层网络爬虫

  • 小结

什么是网络爬虫

网络爬虫也叫网络机器人,可以代替人们自动化浏览网络中的信息,进行数据的「采集」与「整理」。

它是一种程序,基本原理是向网站/网络发起请求,获取资源后分析并提取有用数据。

从技术层面来说,就是通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频)爬到本地,进而提取自己需要的数据,并存放起来使用。

我之前做的「极简新闻」就是用了网络爬虫,它每天定时帮我去各大新闻网站获取新闻标题。它很好地帮我省去了人为复制粘贴的流程。

网络爬虫离我们很近,比如说,你每天使用的百度,其实就是利用了这种爬虫技术:每天放出无数爬虫到各个网站,把他们的信息抓回来,然后化好淡妆排着小队等你来检索。简要流程如图1所示。

图1. 百度简要流程

网络爬虫的基本原理

下面介绍网络爬虫的基本原理,来自参考资料[2]。

我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛。把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息。可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛通过一个节点后,可以顺着节点连线继续爬行到达下一个节点,即通过一个网页继续获取后续的网页,这样整个网的节点便可以被蜘蛛全部爬行到,网站的数据就可以被抓取下来了。

下面简要介绍一下网络爬虫的基本流程:

1、获取网页

爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码。源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了。

前面讲了请求和响应的概念,向网站的服务器发送一个请求,返回的响应体便是网页源代码。所以,最关键的部分就是构造一个请求并发送给服务器,然后接收到响应并将其解析出来,那么这个流程怎样实现呢?总不能手工去截取网页源码吧?

不用担心,Python提供了许多库来帮助我们实现这个操作,如urllibrequests等。我们可以用这些库来帮助我们实现 HTTP 请求操作,请求和响应都可以用类库提供的数据结构来表示,得到响应之后只需要解析数据结构中的Body部分即可,即得到网页的源代码,这样我们可以用程序来实现获取网页的过程了。

2、提取信息

获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据。首先,最通用的方法便是采用正则表达式提取,这是一个万能的方法,但是在构造正则表达式时比较复杂且容易出错。

另外,由于网页的结构有一定的规则,所以还有一些根据网页节点属性、CSS选择器或XPath来提取网页信息的库,如 Beautiful Souppyquerylxml 等。使用这些库,我们可以高效快速地从中提取网页信息,如节点的属性、文本值等。

提取信息是爬虫非常重要的部分,它可以使杂乱的数据变得条理清晰,以便我们后续处理和分析数据。

3、保存数据

提取信息后,我们一般会将提取到的数据保存到某处以便后续使用。这里保存形式有多种多样,如可以简单保存为 TXT 文本或 JSON 文本,也可以保存到数据库,如 MySQLMongoDB 等,也可保存至远程服务器,如借助 SFTP 进行操作等。

4、自动化程序

说到自动化程序,意思是说爬虫可以代替人来完成这些操作。首先,我们手工当然可以提取这些信息,但是当量特别大或者想快速获取大量数据的话,肯定还是要借助程序。爬虫就是代替我们来完成这份爬取工作的自动化程序,它可以在抓取过程中进行各种异常处理错误重试等操作,确保爬取持续高效地运行。

能抓怎样的数据

在网页中我们能看到各种各样的信息,最常见的便是常规网页,它们对应着 HTML 代码,而最常抓取的便是 HTML 源代码。

另外,可能有些网页返回的不是 HTML 代码,而是一个 JSON 字符串(其中 API 接口大多采用这样的形式),这种格式的数据方便传输和解析,它们同样可以抓取,而且数据提取更加方便。

此外,我们还可以看到各种二进制数据,如图片、视频和音频等。利用爬虫,我们可以将这些二进制数据抓取下来,然后保存成对应的文件名。

另外,还可以看到各种扩展名的文件,如 CSS、JavaScript 和配置文件等,这些其实也是最普通的文件,只要在浏览器里面可以访问到,就可以将其抓取下来。

上述内容其实都对应各自的 URL,是基于 HTTP 或 HTTPS 协议的,只要是这种数据,爬虫都可以抓取

JavaScript 渲染页面

有时候,我们在用 urllibrequests 抓取网页时,得到的源代码实际和浏览器中看到的不一样。

这是一个非常常见的问题。现在网页越来越多地采用 Ajax前端模块化工具来构建,整个网页可能都是由 JavaScript 渲染出来的,也就是说原始的 HTML 代码就是一个空壳,例如:

This is a Demo

body 节点里面只有一个 idcontainer 的节点,但是需要注意在 body 节点后引入了 app.js,它便负责整个网站的渲染。

在浏览器中打开这个页面时,首先会加载这个 HTML 内容,接着浏览器会发现其中引入了一个 app.js 文件,然后便会接着去请求这个文件,获取到该文件后,便会执行其中的 JavaScript 代码,而 JavaScript 则会改变 HTML 中的节点,向其添加内容,最后得到完整的页面。

但是在用 urllibrequests 等库请求当前页面时,我们得到的只是这个 HTML 代码,它不会帮助我们去继续加载这个 JavaScript 文件,这样也就看不到浏览器中的内容了。

这也解释了为什么有时我们得到的源代码和浏览器中看到的不一样。

因此,使用基本 HTTP 请求库得到的源代码可能跟浏览器中的页面源代码不太一样。对于这样的情况,我们可以分析其后台 Ajax 接口,也可使用 SeleniumSplash 这样的库来实现模拟 JavaScript 渲染。

网络爬虫种类

下面介绍网络爬虫的四大种类,来自参考资料[1]。

1、通用网络爬虫

通用网络爬虫又叫作全网爬虫,顾名思义,爬取的目标资源在全互联网中。这种爬虫所爬取的目标数据是巨大的,并且爬行的范围也是非常大的。

正是由于其爬取的数据是海量数据,所以对于这类爬虫来说,其爬取的性能要求是非常高的。这种网络爬虫主要应用于大型搜索引擎中,有非常高的应用价值。

通用网络爬虫的策略主要有深度优先爬行策略广度优先爬行策略

2、聚焦网络爬虫

聚焦网络爬虫也叫主题网络爬虫,是按照预先定义好的主题有选择地进行网页爬取的一种爬虫。聚焦网络爬虫主要应用在对特定信息的爬取中,主要为某一类特定的人群提供服务。

聚焦网络爬虫由于可以按对应的主题有目的地进行爬取,所以在实际的运用过程中可以节省大量的服务器资源和宽带资源,因而具有很强的实用性。这里我们以聚焦网络爬虫为例来了解爬虫运行的工作原理和流程。

图2. 聚焦网络爬虫流程

3、增量式网络爬虫

这里的「增量式」对应着增量式更新,增量式更新指的是在更新的时候只更新改变的地方,而未改变的地方则不更新。

增量式网络爬虫,在爬取网页的时候,只爬取内容发生变化的网页或者新产生的网页,对于未发生内容变化的网页,则不会爬取。增量式网络爬虫在一定程度上能够保证所爬取的页面,尽可能是新页面

4、深层网络爬虫

在互联网中,网页按存在方式分类可分为「表层页面」和「深层页面」。

  • 表层页面指的是不需要提交表单,使用静态的链接就能够到达的静态页面;
  • 深层页面是需要提交一定的关键词之后才能够获取得到的页面。而在互联网中,深层页面的数量往往比表层页面的数量要多很多;

深层网络爬虫可以爬取互联网中的深层页面,爬取深层页面,需要想办法自动填写好对应表单。深层网络爬虫主要由URL列表、LVS列表(LVS指的是标签/数值集合,即填充表单的数据源)、爬行控制器、解析器、LVS控制器、表单分析器、表单处理器、响应分析器等部分构成。

小结

俗话说,爬虫玩得好,牢饭吃到饱。当你比较熟练掌握网络爬虫时,限制你的不再是反爬虫技术,而是商业法律。

参考资料

[1] 通俗的讲,网络爬虫到底是什么?DataHunter回答

[2] Python3网络爬虫开发实战

百度爬虫爬到虚拟链接 网站被黑_什么是网络爬虫?原理是什么?种类有多少?...相关推荐

  1. 百度爬虫爬到虚拟链接 网站被黑_网站地图sitemap对SEO优化有什么作用?

    网站地图:是指明网站基本信息的页面,如网站结构.栏目.内容描述等,用户可以借助网站地图快速了解网站信息,反过来说,一个设计良好的网站地图应该起到让用户快速了解网站结构和内容的作用. 网站地图实际上并非 ...

  2. 基于Jsoup的Java爬虫-爬取必应壁纸网站的壁纸(Java静态壁纸爬虫实例)

    准备阶段 1.必应壁纸网站:https://bing.ioliu.cn(爬取对象网站) 2.Jsoup包下载地址:https://jsoup.org/download(以下代码需要用到该包,记得导入包 ...

  3. python3爬取网易云歌单数据清洗_利用Python网络爬虫抓取网易云歌词

    今天小编给大家分享网易云音乐歌词爬取方法. 本文的总体思路如下:找到正确的URL,获取源码: 利用bs4解析源码,获取歌曲名和歌曲ID: 调用网易云歌曲API,获取歌词: 将歌词写入文件,并存入本地. ...

  4. Java爬虫 爬取某招聘网站招聘信息

    Java爬虫 爬取某招聘网站招聘信息 一.系统介绍 二.功能展示 1.需求爬取的网站内容 2.实现流程 2.1数据采集 2.2页面解析 2.3数据存储 三.获取源码 一.系统介绍 系统主要功能:本项目 ...

  5. 详细实例:用python爬虫爬取幽默笑话网站!(建议收藏)

    前言: 今天为大家带来的内容是详细实例:用python爬虫爬取幽默笑话网站!(建议收藏),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下! 爬取网站为 ...

  6. 爬虫爬取快代理网站动态IP

    爬虫爬取快代理网站动态IP import requests, time from lxml import etree import time import randomcookie = "& ...

  7. 爬虫推特数据分析的外文文献_什么是网络爬虫?有什么用?怎么爬?看完这篇文章你就明白了...

    源:Python架构师 https://dwz.cn/LI7NNc4g 一.什么是网络爬虫 随着大数据时代的来临,网络爬虫在互联网中的地位将越来越重要.互联网中的数据是海量的,如何自动高效地获取互联网 ...

  8. python网络爬虫用到哪些技术_做Python网络爬虫需要掌握哪些核心技术?

    在当下这个社会,如何有效地提取并利用信息成为一个巨大的挑战.基于这种巨大的市场需求,爬虫技术应运而生,这也是为什么现在爬虫工程师的岗位需求量日益剧增的原因.那么做Python网络爬虫需要掌握哪些核心技 ...

  9. 精通Python网络爬虫:核心技术、框架与项目实战.1.4 网络爬虫的类型

    1.4 网络爬虫的类型 现在我们已经基本了解了网络爬虫的组成,那么网络爬虫具体有哪些类型呢? 网络爬虫按照实现的技术和结构可以分为通用网络爬虫.聚焦网络爬虫.增量式网络爬虫.深层网络爬虫等类型.在实际 ...

最新文章

  1. 2021年大数据Spark(四十二):SparkStreaming的Kafka快速回顾与整合说明
  2. eclipse发布web项目到生产环境的方式汇总(tomcat)
  3. Ubuntu系统(一)-安装篇
  4. php操作session
  5. 【产品干货】衡量移动APP“价值”的9个重要的KPI指标
  6. [译]震惊!RxJava 5 个不为人知的小秘密
  7. Dynamics 365 CRM 开发架构简介
  8. 两台无线路由桥接(WDS)的简单方法(TP-LINK841N,当AP用)
  9. Extended Twin Composite Number 思维题
  10. Router Configuration5
  11. python可视化编程实战代码_Python数据可视化编程实战——导入数据
  12. libkyototycoon.so.2: cannot open shared object file: No such file
  13. python使用正则验证电子邮件_在Python中使用正则表达式提取电子邮件地址
  14. Multisim软件实验
  15. 银行业智能运维的探索与实践
  16. 施工现场资料员15个常见问题处理流程!
  17. thinkphp图片拖动验证码
  18. H.266/VVC代码学习32:VTM5.0解码端最上层函数
  19. linux开机报ata错误,Linux 系統出現 ATA SError DevExch 的錯誤解法
  20. fb50 sap 报记账码未定义_【FICO系列】SAP 关于SAP中的记账码的解释

热门文章

  1. 【信息系统项目管理师】第2章-信息系统项目管理基础 知识点详细整理
  2. ios pan手势滑动消失动画_IOS UIPanGestureRecognizer手势使用及识别状态UIGestureRecognizerState...
  3. windows搭建yolo环境
  4. Gstreamer 搭建RTSP服务器(九)
  5. 启动另一个Activity、Service、应用程序
  6. SpringBoot之json转java实体类
  7. 云服务器常用端口及其含义
  8. c++堆内存默认大小_Java 自动内存管理
  9. python列表字典元祖_python列表,字典,元组常用方法和集合
  10. threadpooltaskexecutor线程池使用_线程池的理解及使用