第四章- 动态网页抓取 (解析真实地址 + selenium)

作者: santostang 分类: Python 网络爬虫 发布时间: 2018-07-14 01:22

由于网易云跟帖停止服务,现在已经在此处中更新了新写的第四章。请参照文章:
前面爬取的网页均为静态网页,这样的网页在浏览器中展示的内容都在HTML源代码中。但是,由于主流网站都使用JavaScript展现网页内容,和静态网页不同的是,在使用JavaScript时,很多内容并不会出现在HTML源代码中,所以爬取静态网页的技术可能无法正常使用。因此,我们需要用到动态网页抓取的两种技术:通过浏览器审查元素解析真实网页地址和使用selenium模拟浏览器的方法。
本章首先介绍动态网页的实例,让读者了解什么是动态抓取,然后使用上述两种动态网页抓取技术获取动态网页的数据。

4.1 动态抓取的例子

在开始爬取动态网页前,我们还需要了解一种异步更新技术—AJAX(Asynchronous Javascript And XML,异步JavaScript和XML)。它的价值在于通过在后台与服务器进行少量数据交换就可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下对网页的某部分进行更新。一方面减少了网页重复内容的下载,另一方面节省了流量,因此AJAX得到了广泛使用。
相对于使用AJAX网页而言,传统的网页如果需要更新内容,就必须重载整个网页页面。因此,AJAX使得互联网应用程序更小、更快、更友好。但是,AJAX网页的爬虫过程比较麻烦。
首先,让我们来看动态网页的例子。打开笔者博客的Hello World文章,文章地址为: http://www.santostang.com/2018/07/04/hello-world/
如下图所示,页面下面的评论就是用JavaScript加载的,这些评论数据不会出现在网页源代码中。
第一张截图
为了验证其用 JavaScript 加载的,我们可以查看此网页的网页源代码。如下如所示,放置该评论的代码,里面并没有评论数据,只有一段JavaScript代码。最后呈现出来的数据就是通过JavaScript提取数据加载到源代码进行呈现的。
网页源代码
除了我的博客,我们还可以在天猫电商上找到AJAX技术的例子。例如,我们打开天猫的iPhone7的产品页面,并点击“累计评价”,我们可以发现上面的url地址没有任何改变,并没有重新加载整个网页,对网页的评论部分进行更新。
blob.jpg
和刚刚一样,我们也可以查看此商品网页的源代码,如下如所示,里面并没有用户评论,这一块内容是空白的。

因此,我们如果使用 AJAX 加载的动态网页,怎么爬取里面动态加载的内容呢?有两种方法:
1. 通过浏览器审查元素解析地址
2. 通过selenium模拟浏览器抓取

第四章其他章节请查看

第四章:动态网页抓取 (解析真实地址 + selenium)
4.2 解析真实地址抓取
4.3 通过selenium 模拟浏览器抓取