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