動態ip代理教你:如何用爬蟲實現前端頁面渲染

太陽小諸葛發表於2019-01-16

  

  在很早以前,幾乎絕大多數網站全全都是利用後端渲染的,即在伺服器端組裝形成完整的HTML頁面,隨後再將完整頁面返回給前端進行展現。而近期,隨著AJAX技術的不斷普及,和AngularJS這類SPA框架的廣泛應用,前端渲染的頁面越來越多。

  不知大夥兒有沒有聽說過,前端渲染相比於後端渲染,是不利於進行SEO的,因為對網路爬蟲不友好。究其原因,就是因為前端渲染的頁面是需要在瀏覽器端執行JavaScript程式碼(即AJAX請求)才能獲取後端資料,隨後才能拼裝成完整的HTML頁面。

  針對這類情況,當前也是已經有很多解決方案,最常用的就是藉助PhantomJS、puppeteer這類Headless瀏覽器工具,相當於在網路爬蟲中內建1個瀏覽器核心,對爬取的頁面先渲染(執行Javascript指令碼),隨後再對頁面內容進行爬取。

  不過,要使用這類技術,通常全全都是需要使用Javascript來開發網路爬蟲工具,對於我這種寫慣了Python的人來說的確有些痛苦。

  直到某1天,kennethreitz大神釋出了開源專案requests-html,看到專案介紹中的那句FullJavaScriptsupport!時不禁熱淚盈眶,就是它了!該專案在GitHub上釋出後不到三天,star數就達到5000以上,足見其影響力。

  requests-html為啥會這麼火?

  寫過Python的人,幾乎全都會使用requests這麼1個HTTP庫,說它是最好的HTTP庫1點也是不誇張(不限程式語言),對於其介紹語HTTPRequestsforHumans也是當之無愧。也是是因為這個原因,Locust和HttpRunner全全都是基於requests來進行開發的。

  而requests-html,則是kennethreitz在requests的基礎上開發的另1個開源專案,除了可以複用requests的全部功能外,還實現了對HTML頁面的解析,即支援對Javascript的執行,和利用CSS和XPath對HTML頁面元素進行提取的功能,這些全全都是編寫網路爬蟲工具非常需要的功能。

  在實現Javascript執行方面,requests-html也是並沒有自己造輪子,而是藉助了pyppeteer這個開源專案。還記得前面提到的puppeteer專案麼,這是GoogleChrome官方實現的NodeAPI;而pyppeteer這個專案,則相當於是使用Python語言對puppeteer的非官方實現,幾乎具有puppeteer的所有功能。

  理清了以上關係後,相信大夥兒對requests-html也是就有了更好的理解。

  在使用方面,requests-html也是十分簡單,用法與requests幾乎相同,只是多了render功能。

  

007.jpg

  在執行render()之後,返回的就是經過渲染後的頁面內容。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31561288/viewspace-2561524/,如需轉載,請註明出處,否則將追究法律責任。

相關文章