談談如何抓取ajax動態網站

什麼是ajax呢,簡單來講,就是加載一個網頁完畢以後,有些信息你你仍是看不到,須要你點擊某個按鈕才能看到數據,或者有些網頁是有不少頁數據的,而你在點擊下一頁的時候,網頁的url地址沒有變化,可是內容變了,這些均可以說是ajax。若是還聽不懂,我給你看看百度百科的解釋吧,下面就是。python

Ajax 即「Asynchronous Javascript And XML」(異步 JavaScript 和 XML),是指一種建立交互式網頁應用的網頁開發技術。mysql

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

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

Ajax 是一種在無需從新加載整個網頁的狀況下,可以更新部分網頁的技術。 [json

經過在後臺與服務器進行少許數據交換,Ajax 可使網頁實現異步更新。這意味着能夠在不從新加載整個網頁的狀況下,對網頁的某部分進行更新。服務器

傳統的網頁(不使用 Ajax)若是須要更新內容,必須重載整個網頁頁面。異步

下面說下例子,我抓取過的ajax網頁最難的就是網易雲音樂的評論,感興趣的能夠看看利用python爬取網易雲音樂,並把數據存入mysql工具

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

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

這個是肯德基的門面信息

這裏有不少頁數據,每一頁的數據都是ajax加載的。若是你直接用python請求上面那個url的話,估計什麼數據都拿不到,不信的話能夠試試哈。這時候,咱們照常打開開發者工具。先把全部請求清楚,把持續日誌打上勾,而後點擊下一頁,你會看到

上面那個請求就是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


平常學python

代碼不止bug,還有美和樂趣

相關文章
相關標籤/搜索