- 實戰Python網絡爬蟲
- 黃永祥
- 669字
- 2019-11-22 18:44:46
8.4 Ajax動態數據抓取
如果使用Requests-HTML請求網頁地址,相應的響應內容與開發者工具的Doc選項卡的響應內容是一致的。如果網頁數據是通過Ajax請求并由JavaScript渲染到網頁上,還需要使用Requests-HTML模擬Ajax請求來獲取網頁數據。
對于爬蟲開發者來說,模擬Ajax請求是一件相當痛苦的事情,比如構建請求參數,請求參數的構建方式繁多而復雜,這非常考驗開發者對網站的分析能力。以QQ音樂的歌手列表頁為例,每位歌手的名字都是由Ajax加載到網頁上,如圖8-3所示。

圖8-3 歌手信息分析
為了降低開發難度,Requests-HTML提供了Ajax加載功能,加載后的網頁信息與開發者工具的Elements選項卡的網頁信息是一致的。這個加載功能是通過調用谷歌的Chromium瀏覽器實現的,Chromium是谷歌為發展Chrome而開啟的計劃,它可以理解為Chrome的工程版或實驗版,新功能都會率先在Chromium上實現,待驗證后才會應用在Chrome上。
Ajax加載功能由render()方法實現,初次使用render()方法會自動下載Chromium瀏覽器,下載Chromium瀏覽器必須保證當前網絡能正常訪問谷歌首頁,否則無法下載。此外,還可以直接下載Chromium瀏覽器,并將瀏覽器放置在C盤的用戶文件夾,如圖8-4所示。

圖8-4 配置Chromium瀏覽器
在圖8-4上的文件路徑中,只有“000”是變化的,不同的電腦有不同的命名;而chrome-win32文件夾的命名也是固定的,該文件夾里存放了Chromium瀏覽器的相關文件和應用程序。如果是通過下載方式就無需手動配置文件路徑,Requests-HTML會將下載后的Chromium瀏覽器自動配置到相應的文件路徑,如圖8-5所示。

圖8-5 Chromium瀏覽器自動配置
完成了Chromium瀏覽器配置,可以編寫以下代碼來實現Requests-HTML的Ajax加載功能:

在PyCharm里運行上述代碼,可以看到程序將歌手姓名逐一輸出。雖然運行速度比模擬Ajax請求的速度較慢,但可以大大降低開發難度,運行結果如圖8-6所示。

圖8-6 運行結果
- HTML5+CSS3+JavaScript從入門到精通:上冊(微課精編版·第2版)
- 數據結構(Java語言描述)
- 小程序,巧運營:微信小程序運營招式大全
- 軟件工程
- Android Native Development Kit Cookbook
- 全棧自動化測試實戰:基于TestNG、HttpClient、Selenium和Appium
- 大話Java:程序設計從入門到精通
- 計算機應用技能實訓教程
- Mastering Gephi Network Visualization
- OpenCV Android開發實戰
- After Effects CC案例設計與經典插件(視頻教學版)
- IBM RUP參考與認證指南
- 微信小程序開發邊做邊學(微課視頻版)
- Swift Essentials(Second Edition)
- Learning HTML5 by Creating Fun Games