官术网_书友最值得收藏!

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 運行結果

主站蜘蛛池模板: 夏津县| 宁都县| 罗田县| 海丰县| 柏乡县| 光泽县| 西宁市| 改则县| 禄丰县| 茂名市| 峨边| 淳化县| 锡林浩特市| 铁力市| 雅江县| 新乡市| 美姑县| 嵊州市| 迭部县| 大渡口区| 甘孜县| 宜章县| 潼关县| 东乌| 固阳县| 沙田区| 江门市| 榆林市| 柞水县| 五常市| 迁西县| 银川市| 图们市| 河东区| 措勤县| 台东县| 阿合奇县| 沧州市| 苏尼特右旗| 宿迁市| 环江|