网页qq抓取什么原理(总不能手工去网页源码吧?担心,Python提供了许多库来帮助)

优采云 发布时间: 2021-11-16 04:10

  网页qq抓取什么原理(总不能手工去网页源码吧?担心,Python提供了许多库来帮助)

  大家好,我是月创。

  我们可以把互联网比作一个大网,爬虫(即网络爬虫)就是在网络上爬行的蜘蛛。如果把网络的节点比作网页,爬到这个就相当于访问了这个页面,获取了它的信息。节点之间的连接可以比作网页和网页之间的链接关系,这样蜘蛛经过一个节点后,可以继续沿着节点连接爬行到达下一个节点,即继续获取后续网页通过一个网页,让整个网页的所有节点都可以被蜘蛛抓取,可以抓取网站的数据。

  1. 爬虫概述

  简单的说,爬虫就是获取网页,提取和保存信息的自动化程序。这里是一个简单的介绍。

  1.1 获取网页

  爬虫首先要做的就是获取网页,这里是获取网页的源代码。

  源码中收录了网页的一些有用信息,所以只要拿到源码,就可以从中提取出你想要的信息。

  之前讲过请求和响应的概念。向网站的服务器发送请求,返回的响应体为网页源代码。所以,最关键的部分是构造一个请求并发送给服务器,然后接收响应并解析出来。那么这个过程是如何实现的呢?不能手动截取网页源代码吗?

  不用担心,Python 提供了很多库来帮助我们实现这个操作,比如 urllib、requests 等,我们可以使用这些库来帮助我们实现 HTTP 请求操作。请求和响应都可以用类库提供的数据结构来表示。得到响应后,我们只需要解析数据结构的Body部分就可以得到网页的源码。这样我们就可以通过程序来实现获取网页的过程。

  1.2 提取信息

  获取到网页的源代码后,下一步就是分析网页的源代码,从中提取出我们想要的数据。首先,最常用的方法是使用正则表达式提取,这是一种通用的方法,但是在构造正则表达式时比较复杂且容易出错。

  另外,由于网页的结构有一定的规律,所以有一些库是根据网页节点属性、CSS选择器或XPath提取网页信息的,比如Beautiful Soup、pyquery、lxml等。使用这些库,我们可以高效快速地提取网页信息,如节点属性、文本值等。

  提取信息是爬虫非常重要的一个环节,它可以将杂乱的数据整理得井井有条,便于我们以后对数据进行处理和分析。

  1.3 保存数据

  提取信息后,我们一般会将提取的数据保存在某处以备后续使用。这里有很多保存方法。例如,您可以简单地将其保存为TXT文本或JSON文本,或者将其保存到数据库,例如MySQL和MongoDB,或者将其保存到远程服务器,例如使用SFTP进行操作。

  1.4 自动化程序

  说到自动化程序,就意味着爬虫可以代替人来完成这些操作。首先,我们当然可以手动提取这些信息,但是如果当量特别大或者我们想快速获取大量数据,就必须使用程序。爬虫是一个自动化的程序,代替我们完成这个爬虫工作。可以在爬取过程中进行各种异常处理、错误重试等操作,保证爬取持续高效运行。

  2. 可以抓取什么样的数据

  我们可以在网页中看到各种信息,最常见的是普通网页,对应的是HTML代码,最常爬取的是HTML源代码。

  另外,有些网页可能返回的不是HTML代码,而是JSON字符串(大多数API接口使用这种形式)。这种格式的数据便于传输和分析,也可以捕获,数据提取更方便。

  此外,我们还可以看到各种二进制数据,如图片、视频和音频。使用爬虫,我们可以抓取这些二进制数据并保存为对应的文件名。

  此外,您还可以查看具有各种扩展名的文件,例如 CSS、JavaScript 和配置文件。这些实际上是最常见的文件。只要你能在浏览器中访问它们,你就可以抓取它们。

  上面的内容其实对应的是它们各自的URL,是基于HTTP或HTTPS协议的。只要是这种数据,爬虫就可以抓取。

  3. JavaScript 渲染页面

  有时候,当我们使用 urllib 或 requests 来获取网页时,我们得到的源代码实际上与我们在浏览器中看到的不同。

  这是一个很常见的问题。如今,越来越多的网页使用 Ajax 和前端模块化工具构建。整个网页可能会被 JavaScript 渲染,这意味着原来的 HTML 代码是一个空壳,例如:

  body节点中只有一个带有container这个id的节点,但是需要注意的是body节点后面引入了app.js,负责整个网站的渲染。

  在浏览器中打开这个页面时,会先加载HTML内容,然后浏览器会发现已经引入了一个app.js文件,然后就会请求这个文件,获取到这个文件后就会执行文件 JavaScript 代码,JavaScript 会改变 HTML 中的节点,向其添加内容,最终得到一个完整的页面。

  但是当使用urllib或requests等库来请求当前页面时,我们得到的只是这个HTML代码,不会帮助我们继续加载这个JavaScript文件,所以我们在浏览器中是看不到内容的。

  这也解释了为什么有时我们得到的源代码与我们在浏览器中看到的不同。

  因此,使用基本HTTP请求库获取的源代码可能与浏览器中页面的源代码不同。对于这种情况,我们可以分析其后端的Ajax接口,或者使用Selenium、Splash等库来实现模拟JavaScript渲染。

  后面会详细介绍如何采集 JavaScript 渲染网页。本节介绍爬虫的一些基本原理,可以帮助我们以后在编写爬虫时更加自如。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线