04-爬虫的基本原理

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


  虫子有很多种,为什么我们把爬虫看做蜘蛛呢?因为我们可以把网页看做网的节点,把网页之间的链接关系看做节点之间的连线。这样是不是很像蜘蛛网?爬虫爬过一个节点后,又可以顺着节点连线爬到下一个节点(通过链接获取其他网页),周而复始,就能爬到所有节点。

 

一、爬虫的基本概念

  简单来说,爬虫就是获取网页,从中提取信息保存数据自动化程序。

1. 获取网页

  我们说的“获取网页”,就是指获取网页的源代码。

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

  我们可以利用 Python 提供的库(如 urllib、requests 等)来实现 HTTP 请求操作,请求和响应都可以用类库提供的数据结构来表示,得到相应之后,我们只需要解析数据结构中的 Body 部分即可(这就是源代码)。

2. 提取信息

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

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

3. 保存数据

  提取到有用信息后,需要保存数据,以供后续使用。通常做法有以下三种:

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

4. 自动化

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

 

二、爬虫能抓什么数据

  只要是基于 HTTP 或 HTTPS 协议,具有对应的 URL 的数据,都能够抓取

1. HTML 代码

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

2. JSON 字符串

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

3. 二进制数据

  如图片、音频、视频等。

4. 各种扩展名的文件

  如 CSS、JavaScript、配置文件等。

 

三、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 渲染。

posted @ 2019-10-27 19:31  Albert-陌尘  阅读(200)  评论(0编辑  收藏  举报