溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何抓取ajax動態(tài)網(wǎng)站

發(fā)布時間:2021-12-09 10:54:41 來源:億速云 閱讀:143 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)如何抓取ajax動態(tài)網(wǎng)站,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

什么是ajax呢,簡單來說,就是加載一個網(wǎng)頁完畢之后,有些信息你你還是看不到,需要你點(diǎn)擊某個按鈕才能看到數(shù)據(jù),或者有些網(wǎng)頁是有很多頁數(shù)據(jù)的,而你在點(diǎn)擊下一頁的時候,網(wǎng)頁的url地址沒有變化,但是內(nèi)容變了,這些都可以說是ajax。如果還聽不懂,我給你看看百度百科的解釋吧,下面就是。

Ajax 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù)。

Ajax = 異步 JavaScript 和 XML(標(biāo)準(zhǔn)通用標(biāo)記語言的子集)。

Ajax 是一種用于創(chuàng)建快速動態(tài)網(wǎng)頁的技術(shù)。

Ajax 是一種在無需重新加載整個網(wǎng)頁的情況下,能夠更新部分網(wǎng)頁的技術(shù)。 [

通過在后臺與服務(wù)器進(jìn)行少量數(shù)據(jù)交換,Ajax 可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進(jìn)行更新。

傳統(tǒng)的網(wǎng)頁(不使用 Ajax)如果需要更新內(nèi)容,必須重載整個網(wǎng)頁頁面。

下面說下例子,我抓取過的ajax網(wǎng)頁最難的就是網(wǎng)易云音樂的評論,感興趣的可以看看利用python爬取網(wǎng)易云音樂,并把數(shù)據(jù)存入mysql

這里的評論就是ajax加載的,其他的那個抓今日頭條妹子圖片的也算是ajax加載的,只不過我把它簡單化了。還有很多,就不說了,說下我今天要說的ajax網(wǎng)站吧!

http://www.kfc.com.cn/kfccda/storelist/index.aspx

這個是肯德基的門面信息

如何抓取ajax動態(tài)網(wǎng)站

這里有很多頁數(shù)據(jù),每一頁的數(shù)據(jù)都是ajax加載的。如果你直接用python請求上面那個url的話,估計(jì)什么數(shù)據(jù)都拿不到,不信的話可以試試哈。這時候,我們照常打開開發(fā)者工具。先把所有請求清楚,把持續(xù)日志打上勾,然后點(diǎn)擊下一頁,你會看到

如何抓取ajax動態(tài)網(wǎng)站

上面那個請求就是ajax請求的網(wǎng)頁,里面就會有我們需要的數(shù)據(jù),我們看看是什么樣的請求

如何抓取ajax動態(tài)網(wǎng)站

是個post請求,請求成功狀態(tài)碼為200,請求url上面也有了,下面的from data就是我們需要post的數(shù)據(jù),很容易就可以猜到pageIndex就是頁數(shù),所以我們可以改變這個值來進(jìn)行翻頁。

這個網(wǎng)頁就分析完了,這樣就是解決ajax動態(tài)網(wǎng)頁了,是不是覺得很簡單,其實(shí)不是的,只是這個網(wǎng)頁比較簡單的,因?yàn)楸韱?from data)的數(shù)據(jù)并沒有進(jìn)行加密,如果進(jìn)行加密的話估計(jì)你的找js文件看看參數(shù)是怎樣加密的了,這就是我之前寫的網(wǎng)易云音樂評論的爬取??催@些混淆的js尋找加密方法的話有時會讓你很頭痛,所以經(jīng)常有人會選擇用selenium這些來進(jìn)行爬取,但是用這些會使爬蟲的性能降低,所以這個方法在工作里是不允許的。所以必須學(xué)會怎樣應(yīng)對這些ajax。

貼下代碼

import requests
page = 1
while True:
   url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'
   data = {
           'cname': '廣州',
           'pid': '',
           'pageIndex': page,
           'pageSize': '10'
   }
   response = requests.post(url, data=data)
   print(response.json())
   if response.json().get('Table1', ''):
       page += 1
   else:
       break

看完上述內(nèi)容,你們對如何抓取ajax動態(tài)網(wǎng)站有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI