談談如何抓取ajax動態網站

sergiojune發表於2019-03-02

什麼是ajax呢,簡單來說,就是載入一個網頁完畢之後,有些資訊你你還是看不到,需要你點選某個按鈕才能看到資料,或者有些網頁是有很多頁資料的,而你在點選下一頁的時候,網頁的url地址沒有變化,但是內容變了,這些都可以說是ajax。如果還聽不懂,我給你看看百度百科的解釋吧,下面就是。

Ajax 即“Asynchronous Javascript And XML”(非同步 JavaScript 和 XML),是指一種建立互動式網頁應用的網頁開發技術。

Ajax = 非同步 JavaScript 和 XML(標準通用標記語言的子集)。

Ajax 是一種用於建立快速動態網頁的技術。

Ajax 是一種在無需重新載入整個網頁的情況下,能夠更新部分網頁的技術。 [

通過在後臺與伺服器進行少量資料交換,Ajax 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。

傳統的網頁(不使用 Ajax)如果需要更新內容,必須過載整個網頁頁面。

下面說下例子,我抓取過的ajax網頁最難的就是網易雲音樂的評論,感興趣的可以看看利用python爬取網易雲音樂,並把資料存入mysql

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

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

這個是肯德基的門面資訊

談談如何抓取ajax動態網站

這裡有很多頁資料,每一頁的資料都是ajax載入的。如果你直接用python請求上面那個url的話,估計什麼資料都拿不到,不信的話可以試試哈。這時候,我們照常開啟開發者工具。先把所有請求清楚,把持續日誌打上勾,然後點選下一頁,你會看到

談談如何抓取ajax動態網站

上面那個請求就是ajax請求的網頁,裡面就會有我們需要的資料,我們看看是什麼樣的請求

談談如何抓取ajax動態網站

是個post請求,請求成功狀態碼為200,請求url上面也有了,下面的from data就是我們需要post的資料,很容易就可以猜到pageIndex就是頁數,所以我們可以改變這個值來進行翻頁。

這個網頁就分析完了,這樣就是解決ajax動態網頁了,是不是覺得很簡單,其實不是的,只是這個網頁比較簡單的,因為表單(from data)的資料並沒有進行加密,如果進行加密的話估計你的找js檔案看看引數是怎樣加密的了,這就是我之前寫的網易雲音樂評論的爬取。看這些混淆的js尋找加密方法的話有時會讓你很頭痛,所以經常有人會選擇用selenium這些來進行爬取,但是用這些會使爬蟲的效能降低,所以這個方法在工作裡是不允許的。所以必須學會怎樣應對這些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複製程式碼

可以看到去掉from data,不用十行程式碼就可以把資料都爬下來了,所以說這個網站適合練手,大家可以去試試。

寫在最後

下篇文章我會寫下複雜點的ajax請求,這個網站

http://drugs.dxy.cn/

不知道有多少人想看,想看的話點個贊吧!或者你可以自己先試試哈

推薦文章

如何爬取asp動態網頁?搞定可惡的動態引數,這一文告訴你!

利用python爬取網易雲音樂,並把資料存入mysql

談談如何抓取ajax動態網站

日常學python

程式碼不止bug,還有美和樂趣

相關文章