2.3.1 爬虫概述
爬虫实际上就是采集网络上数据的一段程序。把这句话拆分一下,去掉其中的修饰词,就可以看到其实爬虫指的就是一段程序。这段程序的功能就是从网络上采集需要的数据。
一个爬虫的工作流程如下:
(1)发起请求。
(2)获取响应内容。
(3)解析内容。
(4)保存数据。
所以,爬虫就是从请求内容(即数据)到获取响应,接着解析内容,最后显示相应内容或者保持内容的过程。
2.3.2 能抓取什么样的数据
通过2.3.1小节的介绍,我们了解到爬虫的主要作用就是采集网络上的数据,那么究竟爬虫能抓取什么样的数据呢?从广义上来说,只要是能请求并且能获取响应的数据都能够被抓取,具体包括以下几类:
(1)网页文本,如HTML文档、JSON格式文本、XML格式文本等。
(2)图片文件,如JPEG、PNG等图片文件,获取的是二进制文件,保存为相应格式的图片即可。
(3)视频文件,如MP4、WMV等视频文件,同样获取的是二进制文件,保存为相应的视频格式即可。
(4)其他文件。只要是能请求到的文件都能获取,比如MP3文件、Flash文件以及其他各种类型的文件。
2.3.3 JavaScript渲染页面
在介绍JavaScript渲染页面之前,我们先来了解一下浏览器渲染页面的过程。HTML源代码由浏览器渲染为一个网页需要以下过程:
(1)浏览器根据HTML结构生成DOM Tree(节点树)。
(2)浏览器根据CSS(Cascading Style Sheets,层叠样式表)生成CSSOM(样式表对象模型)。
(3)将DOM和CSSOM整合,形成RenderTree(渲染树)。
(4)浏览器根据渲染树开始渲染页面。
在这个过程中遇到<script>时会执行并阻塞渲染,因为JavaScript有权利改变DOM结构,甚至也能改变对象的CSS样式,所以要等JavaScript脚本执行完毕,之后再继续渲染过程。
通过以上内容可以了解到,JavaScript在整个页面渲染过程中起着举足轻重的作用,包括JavaScript在页面中的放置位置也十分重要。
如果JavaScript要对页面中的某个元素进行操作,就必须在这个元素加载之后才能进行,比如下面的代码。
【示例2-4】JavaScript渲染页面错误演示
<!DOCTYPE html> <html lang="zh-CN"> <head> <title>节点方法的调用</title> </head> <body> <script> obj=document.getElementById("my_div") alert(obj.innerHTML) </script> <div id="my_div">1234567</div> </body> </html>
以上代码尝试获取页面中层里的内容并以弹出窗口的形式显示其内容。将以上代码保存为2-6.htm,执行代码会发现,只会正常显示网页,但并没有任何弹出窗口。之所以会出现这种情况,就是因为<script>的出现中止了页面的渲染,导致获取不到<script>后面的层里的内容。
如果将代码修改如下:
<div id="my_div">1234567</div> <script> obj=document.getElementById("my_div") alert(obj.innerHTML) </script>
也就是将<script>放到要操作层之后,修改后将代码保存为2-7.htm,再次执行代码就会看到弹出窗口的提示,执行结果如图2-10所示。
学习更多专业Python知识,点此查看: