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