![实战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=1738859261-v4TnJYcoLRTdLYQnUHHKVVgvRSAu7PEb-0-ba1e54d392468c785050ce6b7a215832)
图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=1738859261-C2HjMef97houCznT4OjKgYUir758akYC-0-7e6234ab44cf83b9813a23090ad19f3c)
图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=1738859261-ixVrB07RnYTW7oMwIjW5C6ClLmeRYx5S-0-e1931f163659d8f0c9ff4913f4b83bcf)
图8-5 Chromium浏览器自动配置
完成了Chromium浏览器配置,可以编写以下代码来实现Requests-HTML的Ajax加载功能:
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P75_3.jpg?sign=1738859261-jxqVHXDkIUI6gZ18C7VhHfPGE3q2YrTM-0-12ab67b3ec37b317a40043f4f04fe7c6)
在PyCharm里运行上述代码,可以看到程序将歌手姓名逐一输出。虽然运行速度比模拟Ajax请求的速度较慢,但可以大大降低开发难度,运行结果如图8-6所示。
![](https://epubservercos.yuewen.com/78BE40/15056704604178806/epubprivate/OEBPS/Images/Figure-P75_4.jpg?sign=1738859261-7Eogbv5lMXfKH93o1p2WvUUAMdQINZYB-0-45f79a357d5614779c20db2d295ec32e)
图8-6 运行结果