抓取jsp网页源代码( Python3爬虫学习教程(1)_静觅(图))
优采云 发布时间: 2022-03-15 19:05抓取jsp网页源代码(
Python3爬虫学习教程(1)_静觅(图))
【2022】Python3爬虫教程-1.3爬虫基本原理
崔庆才丨京觅发表于2022/03/13 23:29:53 2022/03/13
【摘要】导航目录:【2022】Python3爬虫学习教程我们可以把互联网比作一个大网,爬虫(即网络爬虫)就是在网络上爬行的蜘蛛。将网络的节点比作网页,爬取它相当于访问该页面并获取其信息。你可以把部分...
导航目录:【2022】Python3爬虫学习教程
我们可以将互联网比作一个大型网络,而爬虫(即网络爬虫)是爬取网络的蜘蛛。将网络的节点比作网页,爬取它相当于访问该页面并获取其信息。节点之间的连接可以比作网页和网页之间的链接关系,这样蜘蛛经过一个节点后,可以继续沿着节点连接爬行到达下一个节点,即继续通过一个网页获取后续网页,从而使得整个网页的节点都可以被蜘蛛爬取,并且可以抓取到网站的数据。
1.爬虫概述
简单来说,爬虫是一个自动程序,它获取网页并提取和保存信息,如下所述。
(1)获取网页
爬虫首先要做的是获取网页,这里是网页的源代码。源代码中收录了网页的一些有用信息,所以只要得到源代码,就可以从中提取出想要的信息。
前面提到了请求和响应的概念。向网站的服务器发送请求,返回的响应体就是网页的源代码。那么,最关键的部分就是构造一个请求并发送给服务器,然后接收响应并解析出来,那么这个过程如何实现呢?不能手动截取网页的源代码吧?
不用担心,Python 提供了很多库来帮助我们做到这一点,例如 urllib、requests 等,我们可以使用这些库来实现 HTTP 请求操作。请求和响应都可以用类库提供的数据结构来表示。得到响应后,我们只需要解析数据结构的body部分,也就是得到网页的源代码,这样我们就可以使用程序来实现获取网页的过程了。
(2)提取信息
获取网页源代码后,下一步就是分析网页源代码,从中提取我们想要的数据。首先,最常用的方法是使用正则表达式提取,这是一种通用的方法,但是在构造正则表达式时比较复杂且容易出错。
另外,由于网页的结构有一定的规则,也有一些库是根据网页节点属性、CSS选择器或者XPath来提取网页信息的,比如Beautiful Soup、pyquery、lxml等。这些库,我们可以高效、快速地提取网页信息,如节点属性、文本值等。
提取信息是爬虫中非常重要的一环,它可以让杂乱的数据变得条理清晰,便于我们后期对数据进行处理和分析。
(3)保存数据
提取信息后,我们一般会将提取的数据保存在某处以备后续使用。这里的保存有多种形式,例如简单保存为TXT文本或JSON文本,或保存到数据库,如MySQL和MongoDB,或保存到远程服务器,如借助SFTP操作。
(4)自动化程序
说到自动化程序,我的意思是爬虫可以代替人类执行这些操作。首先,我们当然可以手动提取这些信息,但是如果当量特别大或者想要快速获取大量数据,还是得使用程序。爬虫是代表我们完成爬取工作的自动化程序。可以在爬取过程中进行各种异常处理、错误重试等操作,保证爬取持续高效地运行。
2.我可以抓取什么样的数据
我们可以在网页中看到各种信息,最常见的是常规网页,对应HTML代码,最常见的爬取的是HTML源代码。
另外,有些网页可能返回的不是HTML代码,而是一个JSON字符串(大部分API接口都使用这种形式)。这种格式的数据易于传输和解析,也可以被捕获和提取。更方便。
此外,我们还可以看到图片、视频、音频等各种二进制数据。使用爬虫,我们可以抓取这些二进制数据,并保存为对应的文件名。
此外,您还可以查看具有各种扩展名的文件,例如 CSS、JavaScript 和配置文件。这些实际上是最常见的文件。只要它们在浏览器中可以访问,您就可以抓取它们。
以上内容其实是对应各自的URL,是基于HTTP或HTTPS协议的。只要是这种数据,爬虫就可以爬取。
3.JavaScript 渲染页面
有时候,当我们用urllib或者requests抓取网页时,得到的源代码其实和我们在浏览器中看到的不一样。
这是一个很常见的问题。如今,越来越多的网页使用 Ajax 和前端模块化工具构建。整个网页可能会被 JavaScript 渲染,这意味着原创的 HTML 代码只是一个空壳,例如:
1
2
3
4
5
6
7
8
9
10
11
This is a Demo
容器中只有一个id为容器的节点
body节点,但需要注意的是,app.js是在body节点之后引入的,它负责整个网站的渲染。
在浏览器中打开此页面时,会先加载 HTML 内容,然后浏览器会找到一个应用程序。一旦文件被检索到,其中的 JavaScript 代码就会被执行,并且 JavaScript 会更改 HTML 中的节点,向其中添加内容,最终得到一个完整的页面。
但是当使用 urllib 或 requests 等库请求当前页面时,我们得到的只是这段 HTML 代码,它不会帮助我们继续加载这个 JavaScript 文件,所以我们在浏览器中看不到内容。
这也解释了为什么有时我们得到的源代码与我们在浏览器中看到的不同。
因此,使用基本的HTTP请求库获取的源代码可能与浏览器中的页面源代码不一样。对于这种情况,我们可以分析它的后台Ajax接口,或者使用Selenium、Splash、Pyppeteer、Playwright等库来模拟JavaScript渲染。
稍后,我们将详细介绍如何采集 JavaScript 渲染网页。
4.总结
本节介绍爬虫的一些基本原理,可以帮助我们以后编写爬虫时更加得心应手。