您好,登錄后才能下訂單哦!
這篇文章主要介紹Python3爬蟲中Ajax有什么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
Ajax,全稱為Asynchronous JavaScript and XML,即異步的JavaScript和XML。它不是一門編程語言,而是利用JavaScript在保證頁面不被刷新、頁面鏈接不改變的情況下與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁的技術(shù)。
對于傳統(tǒng)的網(wǎng)頁,如果想更新其內(nèi)容,那么必須要刷新整個頁面,但有了Ajax,便可以在頁面不被全部刷新的情況下更新其內(nèi)容。在這個過程中,頁面實際上是在后臺與服務(wù)器進行了數(shù)據(jù)交互,獲取到數(shù)據(jù)之后,再利用JavaScript改變網(wǎng)頁,這樣網(wǎng)頁內(nèi)容就會更新了。
1. 實例引入
瀏覽網(wǎng)頁的時候,我們會發(fā)現(xiàn)很多網(wǎng)頁都有下滑查看更多的選項。比如,拿微博來說,我們以我的個人的主頁為例:https://m.weibo.cn/u/2830678474,切換到微博頁面,一直下滑,可以發(fā)現(xiàn)下滑幾個微博之后,再向下就沒有了,轉(zhuǎn)而會出現(xiàn)一個加載的動畫,不一會兒下方就繼續(xù)出現(xiàn)了新的微博內(nèi)容,這個過程其實就是Ajax加載的過程,如圖6-1所示。
我們注意到頁面其實并沒有整個刷新,也就意味著頁面的鏈接沒有變化,但是網(wǎng)頁中卻多了新內(nèi)容,也就是后面刷出來的新微博。這就是通過Ajax獲取新數(shù)據(jù)并呈現(xiàn)的過程。
2. 基本原理
初步了解了Ajax之后,我們再來詳細(xì)了解它的基本原理。發(fā)送Ajax請求到網(wǎng)頁更新的這個過程可以簡單分為以下3步:
(1) 發(fā)送請求; (2) 解析內(nèi)容; (3) 渲染網(wǎng)頁。
下面我們分別來詳細(xì)介紹這幾個過程。
發(fā)送請求
我們知道JavaScript可以實現(xiàn)頁面的各種交互功能,Ajax也不例外,它也是由JavaScript實現(xiàn)的,實際上執(zhí)行了如下代碼:
var xmlhttp; if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("myDiv").innerHTML=xmlhttp.responseText; } } xmlhttp.open("POST","/ajax/",true); xmlhttp.send();
這是JavaScript對Ajax最底層的實現(xiàn),實際上就是新建了XMLHttpRequest對象,然后調(diào)用onreadystatechange屬性設(shè)置了監(jiān)聽,然后調(diào)用open()和send()方法向某個鏈接(也就是服務(wù)器)發(fā)送了請求。前面用Python實現(xiàn)請求發(fā)送之后,可以得到響應(yīng)結(jié)果,但這里請求的發(fā)送變成JavaScript來完成.由于設(shè)置了監(jiān)聽,所以當(dāng)服務(wù)器返回響應(yīng)時,onreadystatechange對應(yīng)的方法便會被觸發(fā),然后在這個方法里面解析響應(yīng)內(nèi)容即可。
解析內(nèi)容
得到響應(yīng)之后,onreadystatechange屬性對應(yīng)的方法便會被觸發(fā),此時利用xmlhttp的responseText屬性便可取到響應(yīng)內(nèi)容。這類似于Python中利用requests向服務(wù)器發(fā)起請求,然后得到響應(yīng)的過程。那么返回內(nèi)容可能是HTML,可能是JSON,接下來只需要在方法中用JavaScript進一步處理即可。比如,如果是JSON的話,可以進行解析和轉(zhuǎn)化。
渲染網(wǎng)頁
JavaScript有改變網(wǎng)頁內(nèi)容的能力,解析完響應(yīng)內(nèi)容之后,就可以調(diào)用JavaScript來針對解析完的內(nèi)容對網(wǎng)頁進行下一步處理了。比如,通過document.getElementById().innerHTML這樣的操作,便可以對某個元素內(nèi)的源代碼進行更改,這樣網(wǎng)頁顯示的內(nèi)容就改變了,這樣的操作也被稱作DOM操作,即對Document網(wǎng)頁文檔進行操作,如更改、刪除等。
上例中,document.getElementById("myDiv").innerHTML=xmlhttp.responseText便將ID為myDiv的節(jié)點內(nèi)部的HTML代碼更改為服務(wù)器返回的內(nèi)容,這樣myDiv元素內(nèi)部便會呈現(xiàn)出服務(wù)器返回的新數(shù)據(jù),網(wǎng)頁的部分內(nèi)容看上去就更新了。
我們觀察到,這3個步驟其實都是由JavaScript完成的,它完成了整個請求、解析和渲染的過程。
再回想微博的下拉刷新,這其實就是JavaScript向服務(wù)器發(fā)送了一個Ajax請求,然后獲取新的微博數(shù)據(jù),將其解析,并將其渲染在網(wǎng)頁中。
因此,我們知道,真實的數(shù)據(jù)其實都是一次次Ajax請求得到的,如果想要抓取這些數(shù)據(jù),需要知道這些請求到底是怎么發(fā)送的,發(fā)往哪里,發(fā)了哪些參數(shù)。如果我們知道了這些,不就可以用Python模擬這個發(fā)送操作,獲取到其中的結(jié)果了嗎?
在下一節(jié)中,我們就來了解下到哪里可以看到這些后臺Ajax操作,去了解它到底是怎么發(fā)送的,發(fā)送了什么參數(shù)。
以上是Python3爬蟲中Ajax有什么用的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。