怎样抓取网页数据( 目录能抓怎样的数据网络爬虫种类小结(组图))
优采云 发布时间: 2022-03-30 10:02怎样抓取网页数据(
目录能抓怎样的数据网络爬虫种类小结(组图))
ins @ngadc 前言
我相信你们中的许多人都听说过(网络)爬虫,但不知道这个概念到底是什么。本文利用网上的相关资料进行简单的总结和整理。爬虫还是比较敏感的,所以我在简书发了文章,但是他们不能。. .
内容
可以捕获什么样的数据
网络爬虫的类型
概括
什么是网络爬虫
网络爬虫,又称网络机器人,可以代替人自动浏览网络信息,对数据进行“采集”和“组织”。
它是一个程序,其基本原理是向网站/网络发起请求,获取资源后分析提取有用数据。
从技术上讲,就是通过程序模拟浏览器请求站点的行为,将站点返回的HTML代码/JSON数据/二进制数据(图片、视频)爬取到本地,然后提取您需要的数据并将其存储以供使用。
我之前做的“极简新闻”使用了一个网络爬虫,它帮助我每天定期从主要新闻网站获取新闻头条。它为我节省了手动复制粘贴的过程。
网络爬虫离我们很近。比如你天天用的百度,其实就是用了这个爬虫技术:每天都有无数爬虫发布到每个网站,抓取他们的信息,然后化淡妆,排队等候你去找回它。简要过程如图 1 所示。
图1.百度网页爬虫基本原理简述流程
网络爬虫的基本原理描述如下,来自参考文献[2]。
我们可以把互联网比作一个大的网络,爬虫(即网络爬虫)是在网络上爬行的蜘蛛。将网络的节点比作网页,爬取它相当于访问该页面并获取其信息。节点之间的连接可以比作网页与网页之间的链接关系,这样蜘蛛经过一个节点后,可以继续沿着该节点连接爬行到下一个节点,即继续获取后续的网页通过一个网页,这样整个网页的节点都可以被蜘蛛爬取,并且可以抓取到网站的数据。
下面简单介绍一下网络爬虫的基本流程:
1、获取网页
爬虫要做的第一个工作就是获取网页,这里是网页的源代码。源代码中收录了网页的一些有用信息,所以只要得到源代码,就可以从中提取出想要的信息。
前面讨论了请求和响应的概念。向网站的服务器发送请求,返回的响应体就是网页的源代码。那么,最关键的部分就是构造一个请求并发送给服务器,然后接收响应并解析出来,那么这个过程如何实现呢?你不能手动截取网页的源代码,对吧?
不用担心,Python提供了很多库来帮助我们实现这个操作,比如urllib、requests等,我们可以利用这些库来帮助我们实现HTTP请求操作。请求和响应都可以用类库提供的数据结构来表示。得到响应后,我们只需要解析数据结构的Body部分,即获取网页的源代码。这样,我们就可以使用程序来实现获取网页的过程了。
2、提取信息
得到网页的源代码后,接下来就是分析网页的源代码,从中提取出我们想要的数据。首先,最常用的方法是使用正则表达式提取,这是一种通用的方法,但是在构造正则表达式时比较复杂且容易出错。
另外,因为网页的结构有一定的规则,所以也有一些库是根据网页节点属性、CSS选择器或者XPath来提取网页信息的,比如Beautiful Soup、pyquery、lxml等。使用这些库,我们可以高效、快速地提取网页信息,如节点属性、文本值等。
提取信息是爬虫非常重要的一个环节,它可以把杂乱的数据整理好,方便我们后期对数据进行处理和分析。
3、保存数据
提取信息后,我们一般将提取的数据保存在某处以备后用。这里的保存有多种形式,比如简单的保存为TXT文本或者JSON文本,或者保存到数据库,比如MySQL和MongoDB,或者保存到远程服务器,比如使用SFTP操作。
4、自动化程序
说到自动化程序,我的意思是爬虫可以代替人类执行这些操作。首先,我们当然可以手动提取这些信息,但是如果当量特别大或者想要快速获取大量数据,还是得使用程序。爬虫是代表我们完成爬取工作的自动化程序。可以在爬取过程中进行各种异常处理、错误重试等操作,保证爬取持续高效运行。
可以捕获什么样的数据
我们可以在网页中看到各种各样的信息,最常见的是常规网页,它们对应的是HTML代码,而最常见的爬取就是HTML源代码。
另外,有些网页可能返回的不是 HTML 代码,而是一个 JSON 字符串(大部分 API 接口都使用这种形式)。这种格式的数据易于传输和解析。它们也可以被捕获,并且数据提取更方便。
此外,我们还可以看到图片、视频、音频等各种二进制数据。使用爬虫,我们可以抓取这些二进制数据,并保存为对应的文件名。
此外,您还可以看到具有各种扩展名的文件,例如 CSS、JavaScript 和配置文件。这些实际上是最常见的文件。只要它们可以在浏览器中访问,您就可以抓取它们。
上面的内容其实是对应了它们各自的URL,是基于HTTP或者HTTPS协议的。只要是这种数据,爬虫就可以爬取。
JavaScript 呈现页面
有时候,当我们用 urllib 或 requests 爬取网页时,得到的源代码实际上与我们在浏览器中看到的不同。
这是一个非常普遍的问题。如今,越来越多的网页使用 Ajax 前端模块化工具构建。整个网页可能会被 JavaScript 渲染,这意味着原创的 HTML 代码只是一个空壳,例如:
This is a Demo
body节点中只有一个id为container的节点,但是需要注意的是在body节点之后引入了app.js,负责渲染整个网站。
在浏览器中打开页面时,会先加载HTML内容,然后浏览器会发现其中引入了一个app.js文件,然后再去请求该文件。获取文件后,它将执行 JavaScript 代码,JavaScript 更改 HTML 中的节点,向其中添加内容,最终得到一个完整的页面。
但是当用 urllib 或 requests 等库请求当前页面时,我们得到的只是这段 HTML 代码,它不会帮助我们继续加载这个 JavaScript 文件,所以我们在浏览器中看不到内容。
这也解释了为什么有时我们得到的源代码与我们在浏览器中看到的不同。
因此,使用基本的HTTP请求库得到的源代码可能与浏览器中的页面源代码不一样。对于这样的情况,我们可以分析它的后台Ajax接口,或者使用Selenium、Splash等库来模拟JavaScript渲染。
网络爬虫的类型
下面介绍四种主要类型的网络爬虫,来自参考文献[1]。
1、万能网络爬虫
通用网络爬虫也称为全网爬虫。顾名思义,要爬取的目标资源是在整个互联网上。这种爬虫爬取的目标数据是巨大的,爬取的范围也很大。
正是因为爬取的数据是海量数据,所以对于这种爬虫来说,对爬取的性能要求是非常高的。这种网络爬虫主要用于大型搜索引擎,具有很高的应用价值。
一般网络爬虫的策略主要有深度优先爬取策略和广度优先爬取策略。
2、专注于网络爬虫
聚焦网络爬虫,也称为主题网络爬虫,是根据预先定义的主题有选择地爬取网页的爬虫。聚焦网络爬虫主要用于爬取特定信息,主要为特定类型的人提供服务。
由于专注的网络爬虫可以有目的地根据相应的主题进行爬取,在实际应用过程中可以节省大量的服务器资源和宽带资源,因此具有很强的实用性。这里我们以网络爬虫为例来了解爬虫运行的工作原理和过程。
图2.聚焦网络爬虫流程3、增量网络爬虫
这里的“增量”对应于增量更新。增量更新是指更新时只更新变化的地方,不更新不变的地方。
增量网络爬虫,在爬取网页时,只爬取内容发生变化的网页或新生成的网页,不会爬取内容未发生变化的网页。增量网络爬虫可以在一定程度上保证爬取的页面尽可能的新。
4、深网爬虫
在互联网中,网页根据存在的不同可以分为“表面页面”和“深层页面”。
深网爬虫可以爬取互联网中的深层页面,而要爬取深层页面,就需要想办法自动填写相应的表格。深网爬虫主要由 URL 列表、LVS 列表(LVS 指标签/值集合,即填充表单的数据源)、爬取控制器、解析器、LVS 控制器、表单分析器、表单处理器、响应分析器和其他部分。
概括
俗话说,爬虫玩得好,吃什么就吃什么。当你对网络爬虫更加精通时,限制你的不再是反爬虫技术,而是商业规律。
参考
[1] 通俗的讲,什么是网络爬虫?数据猎人答案
[2] Python3网络爬虫开发实战