(爬虫学习笔记3)爬虫的基本原理(基本思路)

一、爬虫爬取网页的基本思路

1、获取网页:

​ 通过 urllib、requests等库完成 HTTP 的请求操作,得到响应之后我们只需要解析数据结构中的 Body 部分即可。

2、提取信息:

  • 正则表达式提取:

    ​ 通用方法,但是遇到正则表达式比较复杂的时候,提取的过程中容易出错。

  • 运用 CSS 选择器和 XPath 进行提取:

    ​ 运用如:Beautiful、soup、pyquery、lxml 等库,我们可以快速提取网页信息,如:节点属性、文本值等。

3、保存数据:

  • 可以将提取出来的数据保存到 TXT 文本或者 JSON 文本中;
  • 也可以保存到数据库中,例如:MySQL 和 MongoDB 等;
  • 。0或者保存到远程服务器中,如:借助 SFTP 进行操作;

4、自动化程序:

​ 将爬虫程序自动化,使其可以自动爬取我们需要的信息,并能进行对各种异常的处理、错误重试的操作等,确保爬虫能持续、高效的运行。

二、常见的爬取到数据

  • 最常见的常规网页返回的就是 HTML 源代码;
  • 有些网站返回的可能是一个JSON字符串(其中 API 接口大多采用这样的形式),这类数据更容易抓取,而且更容易进行保存;
  • 我们还有可能会看到各种二进制数据,如:图片、视频和音频等,我们可以将这类数据爬取下来,然后保存成对应的文件名;
  • 另外我们还能看到各种扩展名的文件,如:CSS、JavaScript 和配置文件等;

三、JavaScript 渲染页面

​ 在抓取信息时,时常能看到抓取到的信息可能和实际在浏览器中看到的源码不一样。这是因为现在的网页越来越多的采用 Ajax、前端模块化工具来构建,整个网页可能都是由 JavaScript 渲染出来的,即原始的 HTML 代码就是一个空壳,如:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>This is a Demo</title>
    </head>
    <body>
        <div id="container">
        </div>
    </body>
    <script src="app.js"></script>
</html>

body 节点中只有一个 id 为 container 的节点,但是 body 节点后引入了 app.js ,它负责渲染整个网站。

渲染过程:

​ 浏览器打开这个网页时:

  1. 先加载 HTML 内容,然后引入 app.js 文件并对这个文件进行请求;
  2. 获得该文件之后,执行其中的 JavaScript 代码;
  3. JavaScript 代码则会改变 HTML 中的节点,向其中添加内容,

但是爬虫用 urllib 或 requests 库请求页面是,只能得到 HTML 代码,并不会继续加载 JavaScript 文件,爬虫也就得不到真正的源代码。对于这样的情况,我们可以分析后台的 Ajax 接口,也可以使用 Selenium、Splash 这样的库来实现模拟 JavaScript 渲染。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章