動態渲染反爬蟲

爲了提高用戶的體驗,大部分網站都使用動態渲染,即使用JavaScript代碼來實現。

  動態渲染,由JavaScript改變HTML DOM 導致頁面內容發生變化的現象,不僅提高了網頁的交互性,還提升網頁的加載速度,爲用戶提供了更好的體驗,網頁中常見的表現形式有下拉,刷新,點擊切換和懸停顯示等,以下常見的幾種案例。

  • 自動執行的異步請求


     網頁資源由多個異步(AJAX)請求共同加載資源。


     當客戶端請求時,爲了提高效率,開發者將頁面總資源分成多個資源,多個資源通過異步發送客戶端。所以頁面數據的響應值基本都是在多個AJAX請求響應中。
  • 點擊事件


     在網頁中通過點擊按鈕或標籤發生請求,而點擊事件一般與JavaScript的方法綁定,只要點擊事件觸發,就會執行事件的方法發送請求。
  • 下拉加載


     下拉加載實際上一種翻頁操作,而翻頁操作則爲點擊事件,只是鼠標操作不一樣罷了,所以對於下拉加載,也是發送一個AJAX請求。

  動態渲染技術不止以上幾種,但無論事件加載如何變化,動態渲染的基礎不會變化,只要能夠解決頁面渲染問題,那麼…

動態渲染爬蟲解決方法:

  對於動態渲染,通過分析對應的JavaScript代碼也能解決,但是時間成本太大,不推薦。如:網站有50個請求,那麼需要就分析50對應的JavaScript代碼。而且代碼如果下次發生改變,那麼又要重新分析。


以下是常用的對付動態渲染的工具:

  • Selenium


     不多介紹,做運維、爬蟲的工程師都知道。
  • Puppeteer


     可以理解爲異步的Selenium,Python 中使用 Pyppeteer 庫
  • Splash


     Splash 是一個異步的 JavaScript 渲染服務,它帶有HTTP API 的輕量級 Web 瀏覽器。它能夠並行地處理多個頁面請求。


     Splash 使用到分佈式爬蟲上,這是Selenium和Puppeteer無法做到的。做法:在雲服務器上部署該服務,並配置負載均衡,然後多臺爬蟲服務器使用該服務。
題外話:

  在使用渲染工具做爬蟲時,並不是最強大的渲染工具(如Splash)是最好的,而是爭對網站而定。


  同時也要注意渲染工具加載的渲染時間,在這三個渲染工具中,都支持資源禁止加載,這個可以提高渲染時間。如:某網站需要的是文字資源,並不是圖片資源,這裏可以設置禁止加載圖片或其它類型文件。


  通用不一定適用,對於頁面的動態渲染,不要想到使用渲染工具是最好的,應當考慮爬取的資源,請求的資源,工具的所需的時間。如:網頁中分析出JavaScript代碼,AJAX請求也不是很多,這時可以結合 JavaScript + Python 代碼的方式解決。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章