• 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 渲染。

  • 相关阅读:
    CloudStack tomcat集成方式分析
    cloudstack-setup-databases cs数据安装
    CloudStack 安装时需要的第三方包
    制作initramfs/initrd镜像
    GRUB使用说明
    Linux的kickstart安装详解
    cs4.1 编译与安装
    CS4.1 RPM打包函数分析
    Markdown 打出上下标
    matlab命令行双箭头消失
  • 原文地址:https://www.cnblogs.com/murongmochen/p/11734532.html
Copyright © 2020-2023  润新知