可以把网页与网页之间的链接关系比作节点中的连线,爬虫可以根据网页中的关系获取后续的网页,当整个网站涉及的页面全部被爬虫访问到后,网站的数据就被访问下来了。
简单点讲,爬虫就是获取网页并提取和保存信息的自动化程序。
总结原理就是:构造发送请求->获取网页->解析提取->存储
网页中存在各种各样的信息,最常见的就是常规网页,这些网页对应着HTML代码,最长抓取的就是HTML源代码。
另外可能有的网页中返回的不是HTML代码,而是一个JSON字符串(API接口大多是这种形式),这种格式方便传输和解析。爬虫同样可以爬取这些数据,而且解析提取会更加方便。
网页中还包含各种二进制数据,利用爬虫我们可以保存这些二进制数据,然后保存成对应的文件名。
除了上述数据,网页中还存在各种扩展名文件,如CSS、JavaScript和配置文件等。这些文件只要在浏览器里可以访问到就可以抓取下来。
上述内容其实都有对应的URL,URL基于HTTP/HTTPS协议,只要是这种数据,爬虫都可以抓取。
有时候,我们利用urllib、requests抓取网页时,得到的源代码和浏览器中实际看到的并不一样。
这种问题其实十分常见,因为现在越来越多的网页时采用Ajax、前端模块化工具构建的,可能整个网页都是JavaScript渲染出来的,也就是说HTML代码实际上就是一个空壳。
浏览器打开这种页面时,首先会加载HTML内容,接着浏览器会发现其中引入了js文件,然后就会请求获取该文件,执行其中的JavaScript代码,JavaScript会改变HTML中的节点,向其中添加内容,最后得到完整页面。
用urllib、requests请求这种页面时,得到的只是HTML代码,它不会继续加载JavaScript文件,所以也就无法得到完整网页内容。
对于这种情况,我们可以分析源代码后台Ajax接口,也可以使用Selenium、Splash、Pytteteer、Playwright这样的库来模拟JavaScript渲染。