動態ip教你如何用爬蟲渲染前端頁面!很久以前,幾乎大部分網站都是由后端進行渲染的,即在服務器端組裝完整的HTML頁面,然后將完整的頁面返回前端進行顯示。最近,隨著AJAX技術的不斷普及和AngularJS等SPA框架的廣泛應用,越來越多的頁面在前端呈現。
不知道大家有沒有聽說前端渲染相比后端渲染不利于SEO,因為對網頁爬蟲不友好。原因是前端渲染的頁面需要在瀏覽器端執行JavaScript代碼(AJAX請求)來獲取后端數據,然后才能組裝成完整的HTML頁面。
目前針對這種情況的解決方案有很多,最常用的是PhantomJS、puppeteer等無頭瀏覽器工具,相當于在網絡爬蟲中構建一個瀏覽器內核,先對抓取的頁面進行渲染(執行Javascript腳本),然后對頁面內容進行抓取。
但是,要使用這種技術,通常都需要使用Javascript開發網絡爬蟲工具,這對于像我這樣習慣于編寫Python的人來說,確實很痛苦。
直到有一天,god kennethreitz發布了開源項目requests-html,在項目介紹中看到了FullJavaScriptsupport這句話!眼淚奪眶而出,就是這樣!該項目在GitHub上發布不到三天,明星數量就達到了5000多位,可見其影響力。
requests-html為什么這么受歡迎?
幾乎所有寫過Python的人都會使用這樣的HTTP庫作為請求。毫不夸張地說,它是最好的HTTP庫(不限于編程語言),它的引入也是當之無愧的,HTTPRequestsforHumans。因此,蝗蟲和HttpRunner都是基于請求開發的。
而requests-HTML是kennethreitz基于請求開發的另一個開源項目。除了重用請求的所有功能外,它還實現了html頁面的解析,即支持Javascript的執行,并使用CSS和XPath提取HTML頁面元素,這些都是編寫網絡爬蟲工具非常必要的功能。
在Javascript執行方面,requests-html沒有構建自己的輪子,而是依賴pyppeteer作為開源項目。還記得前面提到的木偶師項目,是GoogleChrome對NodeAPI的官方實現;pyppeteer項目相當于使用Python語言對木偶師的非官方實現,幾乎具備了木偶師的所有功能。理清了以上關系,相信大家對requests-html會有更好的理解。
在用法上,requests-html也很簡單,它的用法和requests幾乎一樣,只是它有更多的呈現功能。
動態IP模擬器
執行render()后,返回的是呈現的頁面內容。