爬虫的基本原理
若是把互联网比作一张大网,爬虫便是在网上爬行的蜘蛛。网中的节点就是一个一个网页,蜘蛛爬到一个节点就相当于爬虫得到了一个网页的信息。网页之间的链接关系就是网上各个节点之间的连线。蜘蛛访问一个节点后,通过连线到达下一个节点,以此类推。当整个网站涉及到的页面都被爬虫访问到之后,网站的数据就被爬取下来了。
爬虫概述
爬虫简单讲,就是获取网页并提取和保存信息的自动化程序
获取网页
- 在前文讲了请求和响应,响应体中的信息就是我们要获取到的网页源代码。
- python提供了很多的库,可以构造一个请求并发送给服务器,然后接收响应并进行解析。如
urllinb
、requests
等 - 而且请求和响应都可以使用类库提供的数据结构来进行表示,因此在接收到数据之后,只需要对数据结构中的
body
部分进行解析就可以了。
提取信息
获取到网页的源代码之后,就需要对源代码进行分析,从而提取到我们想要的数据。
- 可以使用
正则表达式
,这种方法是万能的,但是构造正则表达式的过程比较困难而且容易出错 - 可以利用网页结构自身的规则(层级嵌套),使用一些库根据节点信息或选择器或XPath来进行提取,如
beautiful soup
、pyquery
、lxml
等等
保存数据
- 提取信息之后,一般会将提取到的信息保存起来,以便后续使用。
- 可以保存为TXT,JSON,也可以保存到数据库中,还可以保存在远程服务器上。
自动化程序
爬虫可以代替人类完成上述操作。爬虫就是代替我们完成爬取工作的自动化程序,可以在爬去过程中进行各种异常处理,错误重试等操作,确保爬取持续高效地运行。
爬虫能够爬取什么样的数据?
一句话概括:网络上有的,浏览器中可以访问到的,都可以爬取下来
JS渲染的页面
现在越来越多的网页时动态生成的。或者说原始的HTML代码只是一个空壳,具体的HTML中的节点,都是通过js动态添加的。那么我们用urllib
或requests
请求链接得到的,只是HTML空壳代码。这时候我们就需要分析源代码后台ajax
结构,也可以使用 Selenium
、Splash
、Pyppeteer
、Playwright
库来模拟JS渲染。
写在最后
本系列博客是根据崔庆才老师的《python3网络爬虫开发实战 第二版》整理而成。每篇博客对应于每一节。主要是为了记录书中的重点,便于自己温习。如有错误或不足,请提出,大家一起学习,一起进步。
另:若转载,请附上本文链接。