【Python网络蜘蛛】:基础 - 爬虫的基本原理

文章目录

  • 爬虫概述
  • 能爬的数据
  • JavaScript渲染的页面

爬虫概述


  • 获取网页
    在HTTP基本原理中讲了请求和响应的概念,向网站的服务器发送一个请求,服务器返回的响应体便是网页源码。关键部分即构造请求并发送给服务器,然后接收响应对其进行解析。这个过程可使用Python提供的库:urllib、requests等来完成HTTP请求操作。
  • 提起信息
    获取网页源码后,接下来就是分析源码,提取我们想要的数据。通用的提取方法是采用正则表达式,另外由于网页结构具有一定的规则,所以还有一些库是根据网页节点属性、CSS选择器或XPath来提取网页信息,如Beautiful、Soup、pyquery、lxml等。
  • 保存数据
    提取信息后,我们需要保存数据到某处以遍后续使用。保存数据的形式多种多样,可保存为TXT文本或JSON文本,也可以保存到数据库,如MySQL和MongoDB等,还可以保存至远程服务器,如借助SFTP进行操作等。

能爬的数据


  • HTML源代码
  • JSON字符串
  • 各种扩展名文件,如CSS、JavaScript和配置文件等

上述内容都有各自对应的URL,URL基于HTTP或HTTPS协议,只要是这种数据,都可以抓取。

JavaScript渲染的页面


当我们在用urllib或requests抓取网页时,得到的源码和在浏览器中看到的不一样。

这是一个非常常见的问题。现在越来越多的网页是采用Ajax、前端模块化工具构建的,可能整个网页都是由JavaScript渲染出来的,也就是说原始的HTML代码就是一个空壳,例如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>例子</title>
</head>
<body>
    <div id="content"></div>
</body>
<script src="app.js"></script>
</html>

body节点里面只有一个id为content的节点,需要注意在body节点后引入了app.js,它负责整个网站的渲染。

当浏览器打开这个网页时首先加载这个HTML内容,接着引入app.js文件,JavaScript会改变HTML中的节点,想其中添加内容,最后获得完整的页面。

在用urllib和requests等库请求当前页面时,只能获得HTML代码,不会加载JavaScript文件,我们也就无法看到完整的页面内容。

对于这种情况,我们可以分析源代码后台Ajax接口,也可以使用Selenium、Splash、Pyppeteer、Playwright这样的库来模拟JavaScript渲染。

后续会详细介绍如何采集JavaScript渲染出来的网页。

你可能感兴趣的:(Python网络爬虫开发实战,python,爬虫,javascript)