爬虫的基本原理

基本原理

可以把网页与网页之间的链接关系比作节点中的连线,爬虫可以根据网页中的关系获取后续的网页,当整个网站涉及的页面全部被爬虫访问到后,网站的数据就被访问下来了。

1.爬虫概述

简单点讲,爬虫就是获取网页并提取和保存信息的自动化程序

总结原理就是:构造发送请求->获取网页->解析提取->存储

  • 获取网页
      获取网页这里指的就是获取网页源代码,因为源代码包含网页的部分有用信息。
      向网站的服务器发送一个请求,服务器返回的响应体便是网页源代码。所以爬虫获取网页最关键的部分就是构造一个请求并发送给服务器,然后接收到响应并对其进行解析。
      python对此提供了许多库,可以帮助我们实现,比如:urllib、requests等,我们可以用这些库帮助我们完成http请求操作。
  • 提取信息
      发送请求接收到响应体中的源代码后,接下来就是分析源代码,从中提取到我们想要的数据。最通用也是比较万能的方法就是正则表达式,但是构造正则表达式比较复杂也容易比较出错。
      另外可以根据网页结构的规则,可以根据网页节点属性、CSS选择器、xpath来提取网页信息,如Beautiful Soup、pyquery、lxml等。使用这些库,可以高效的从源代码中提取网页信息,如节点的属性、文本值等。
  • 保存数据
      提取到信息,后面考虑的就是要如何保存它来方便后续使用。保存数据形式多种多样,可以简单的保存为TXT文本、JSON文本、CSV文件、XLSX文件等,也可以保存到数据库,如MySQL、MongoDB等,还可以保存至远程服务器,如借助SFTP操作等。
  • 自动化程序
      爬虫可以替代人来完成上述操作,在爬取的过程中可以进行各种异常处理、错误重试等操作,确保爬取持续高效的运行。

2.能爬怎样的数据

网页中存在各种各样的信息,最常见的就是常规网页,这些网页对应着HTML代码,最长抓取的就是HTML源代码。

另外可能有的网页中返回的不是HTML代码,而是一个JSON字符串(API接口大多是这种形式),这种格式方便传输和解析。爬虫同样可以爬取这些数据,而且解析提取会更加方便。

网页中还包含各种二进制数据,利用爬虫我们可以保存这些二进制数据,然后保存成对应的文件名。

除了上述数据,网页中还存在各种扩展名文件,如CSS、JavaScript和配置文件等。这些文件只要在浏览器里可以访问到就可以抓取下来。

上述内容其实都有对应的URL,URL基于HTTP/HTTPS协议,只要是这种数据,爬虫都可以抓取。

3.JavaScript渲染的页面

有时候,我们利用urllib、requests抓取网页时,得到的源代码和浏览器中实际看到的并不一样。

这种问题其实十分常见,因为现在越来越多的网页时采用Ajax、前端模块化工具构建的,可能整个网页都是JavaScript渲染出来的,也就是说HTML代码实际上就是一个空壳。

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

用urllib、requests请求这种页面时,得到的只是HTML代码,它不会继续加载JavaScript文件,所以也就无法得到完整网页内容。

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

相关推荐
2601_949194261 天前
Python爬虫完整代码拿走不谢
开发语言·爬虫·python
2301_803875611 天前
C#怎么使用TopLevel顶级语句 C#顶级语句怎么写如何省略Main方法简化控制台程序【语法】
jvm·数据库·python
baidu_340998821 天前
SQL多维度数据聚合技巧_利用GROUP BY WITH ROLLUP实现
jvm·数据库·python
kronos.荒1 天前
图论——求孤岛面积、淹没孤岛(python)
python·深度优先·图论
Irene19911 天前
Python 和 JavaScript 对照学习:字符串方法、运算符及其规则
python
m0_743623921 天前
Python如何计算NumPy数组的协方差矩阵_调用cov函数进行特征分析
jvm·数据库·python
qq_380619161 天前
Layui表格怎么隐藏指定列
jvm·数据库·python
21439651 天前
mysql如何通过yum源快速安装_mysql官方yum安装教程
jvm·数据库·python
c***89201 天前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
qq_654366981 天前
mysql如何选择存储引擎_mysql MyISAM与InnoDB深度对比
jvm·数据库·python