![实战Python网络爬虫](https://wfqqreader-1252317822.image.myqcloud.com/cover/862/26542862/b_26542862.jpg)
8.4 Ajax动态数据抓取
如果使用Requests-HTML请求网页地址,相应的响应内容与开发者工具的Doc选项卡的响应内容是一致的。如果网页数据是通过Ajax请求并由JavaScript渲染到网页上,还需要使用Requests-HTML模拟Ajax请求来获取网页数据。
对于爬虫开发者来说,模拟Ajax请求是一件相当痛苦的事情,比如构建请求参数,请求参数的构建方式繁多而复杂,这非常考验开发者对网站的分析能力。以QQ音乐的歌手列表页为例,每位歌手的名字都是由Ajax加载到网页上,如图8-3所示。
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P74_2.jpg?sign=1739368084-TVtqz5H4T0ERKnEMoJUE9cshRMhISqTa-0-4dbddb3a8da92bbf8efdeb2df48185b2)
图8-3 歌手信息分析
为了降低开发难度,Requests-HTML提供了Ajax加载功能,加载后的网页信息与开发者工具的Elements选项卡的网页信息是一致的。这个加载功能是通过调用谷歌的Chromium浏览器实现的,Chromium是谷歌为发展Chrome而开启的计划,它可以理解为Chrome的工程版或实验版,新功能都会率先在Chromium上实现,待验证后才会应用在Chrome上。
Ajax加载功能由render()方法实现,初次使用render()方法会自动下载Chromium浏览器,下载Chromium浏览器必须保证当前网络能正常访问谷歌首页,否则无法下载。此外,还可以直接下载Chromium浏览器,并将浏览器放置在C盘的用户文件夹,如图8-4所示。
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P75_1.jpg?sign=1739368084-oDV2VxmVQMBqtAy8MDzpgS0foO0htN0L-0-00e9eabc21f767189f9b5beedd2cdf9e)
图8-4 配置Chromium浏览器
在图8-4上的文件路径中,只有“000”是变化的,不同的电脑有不同的命名;而chrome-win32文件夹的命名也是固定的,该文件夹里存放了Chromium浏览器的相关文件和应用程序。如果是通过下载方式就无需手动配置文件路径,Requests-HTML会将下载后的Chromium浏览器自动配置到相应的文件路径,如图8-5所示。
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P75_2.jpg?sign=1739368084-a9fErO61gNJjs7Bh1Dj0CCP4WMHAouHd-0-4b9849dfb9377ee6a2c4cdd8ea04af72)
图8-5 Chromium浏览器自动配置
完成了Chromium浏览器配置,可以编写以下代码来实现Requests-HTML的Ajax加载功能:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P75_3.jpg?sign=1739368084-uL11JaohydMsOmsHqcVTb1lZwIgta9HH-0-6e0c693ddfe90e939f437bd99d2711ab)
在PyCharm里运行上述代码,可以看到程序将歌手姓名逐一输出。虽然运行速度比模拟Ajax请求的速度较慢,但可以大大降低开发难度,运行结果如图8-6所示。
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P75_4.jpg?sign=1739368084-n5rCjB1Z4ky4LWmifyJKFpVRnZWSneK1-0-645300ddf7560b206390d963ecfc35c2)
图8-6 运行结果