04-爬虫的基本原理

  概述:有了前面的基础,本篇就来看看爬虫的基本原理吧!html


  虫子有不少种,为何咱们把爬虫看作蜘蛛呢?由于咱们能够把网页看作网的节点,把网页之间的连接关系看作节点之间的连线。这样是否是很像蜘蛛网?爬虫爬过一个节点后,又能够顺着节点连线爬到下一个节点(经过连接获取其余网页),周而复始,就能爬到全部节点。前端

 

1、爬虫的基本概念

  简单来讲,爬虫就是获取网页,从中提取信息保存数据自动化程序。正则表达式

1. 获取网页

  咱们说的“获取网页”,就是指获取网页的源代码。数据库

  咱们前面讲过,向网站服务器发送一个请求,返回的响应体就是网页源代码。那么这部分的关键就是,如何构建一个请求并发给服务器,而后接收并解析响应。浏览器

  咱们能够利用 Python 提供的库(如 urllib、requests 等)来实现 HTTP 请求操做,请求和响应均可以用类库提供的数据结构来表示,获得相应以后,咱们只须要解析数据结构中的 Body 部分便可(这就是源代码)。服务器

2. 提取信息

  拿到源代码后,就要分析源代码,从中提取有用数据。经常使用方法有两种:数据结构

  • 正则表达式:万能方法,但比较复杂,容易出错。
  • 使用库文件:有些库文件能够根据网页节点属性、CSS 选择器或 XPath 来提取网页信息(如 Beautiful Souppyquerylxml 等)。这些库能够高效快速地提取数据。

3. 保存数据

  提取到有用信息后,须要保存数据,以供后续使用。一般作法有如下三种:并发

  • 保存为 txt 或 JSON 文本
  • 保存到 MySQL、MongoDB 等数据库
  • 保存至远程服务器(借助 SFTP 等)

4. 自动化

  爬虫能够自动在抓取过程当中进行异常处理、错误重试等操做,自动化程度高,尤为适用于数据量大、对速度要求高的使用场景。app

 

2、爬虫能抓什么数据

  只要是基于 HTTP 或 HTTPS 协议,具备对应的 URL 的数据,都可以抓取模块化

1. HTML 代码

  最多见的常规网页对应 HTML 代码,这也是咱们最常抓取的内容。

2. JSON 字符串

  有些网页返回的不是 HTML 代码,而是 JSON 字符串。API 接口大多采用这样的形式。

3. 二进制数据

  如图片、音频、视频等。

4. 各类扩展名的文件

  如 CSS、JavaScript、配置文件等。

 

3、JavaScript 渲染页面

  有时咱们使用 urllib 或 requests 抓取到的网页源代码和实际在浏览器中看到的不同。这是由于如今的网页愈来愈多地采用 Ajax 和前端模块化工具来狗圈,网页多是由 JavaScript 渲染出来的,原始的 HTML 代码只是一个空壳。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8”>
 5 <title>This is a Oemo</title>
 6 </head>
 7 <body>
 8 <div id=”container” >
 9 </div>
10 </body>
11 <script src=”app.js ></script>
12 </html>

  以上代码的 body 中,只有一个 id 为 container 的节点,可是 body 后饮用了 app.js,它负责整个网站的渲染。浏览器打开这个页面时,首先加载 HTML 内容,接下来浏览器发现引入了 app.js 文件,因而继续请求这个文件。获取到文件后,执行其中的 JavaScript 代码,由此改变 HTML 的节点,向其中添加内容,获得完整界面。

  使用 urllib 或 requests 库请求页面时,只能获得 HTML 代码,不会继续加载 JavaScript 文件,天然也就没法看到浏览器中的内容了。

  因为使用基本 HTTP 请求库获得的源代码和浏览器中的页面源代码不一致,咱们能够分析其后台 Ajax 接口,也可使用 Selenium、Splash 等库来实现模拟 JavaScript 渲染。

相关文章
相关标签/搜索