有幾位簡(jiǎn)友留言問到簡(jiǎn)書首頁數(shù)據(jù)的抓取問題,說只能抓取到20條數(shù)據(jù),如何抓取到更多;簡(jiǎn)書首頁數(shù)據(jù)分頁加載是怎么樣處理?
我用chrome -- 檢查 -- network 分析一下,截圖來說明。我是按這樣的順序來進(jìn)行分析的。
- 弄清分頁加載的方式
- 著重分析第2頁url,找出構(gòu)造url參數(shù)的規(guī)律
- 在第3頁中驗(yàn)證
分頁加載方式在前面文章中講過,無非3種方式,簡(jiǎn)書首頁采用的是滾動(dòng)加載,直接滾動(dòng)加載第2頁,查看url進(jìn)行分析:


構(gòu)成第2頁url中有20個(gè)id的參數(shù),加上page=2,需要回到加載首頁時(shí)看看這20個(gè)id是如何得到的。

發(fā)現(xiàn)就是文章<li>的id,這個(gè)可以在第一次抓取時(shí)獲得,這樣就可以構(gòu)造成第二頁的一長串的URL
再驗(yàn)證一下第3頁的URL,發(fā)現(xiàn)這個(gè)時(shí)候id的數(shù)量增加了。增加的是從哪里來的?


核對(duì)一下,這些id包含了前兩次加載的頁面的<li>id值,這樣構(gòu)成第3頁的url,在編寫代碼的過程中,我發(fā)現(xiàn)直接構(gòu)造了這樣的URL,還是不能抓取到第2頁或第3頁的數(shù)據(jù),仍然是第一頁的數(shù)據(jù)。從抓包和請(qǐng)求上查看,這時(shí)我已經(jīng)構(gòu)造了完整的請(qǐng)求的URL。
回過頭來比較一下,第一次(首頁)加載的數(shù)據(jù)和后面分頁加載的數(shù)據(jù)有什么不同。


后面的分頁加載的直接是xml數(shù)據(jù),請(qǐng)求的是XMLHttpRequest,修改一下請(qǐng)求頭headers,再次抓取,就會(huì)看到抓取的是分頁數(shù)據(jù)了。
在這篇文章中 Python爬取數(shù)據(jù)的分頁分析,簡(jiǎn)書七日熱門和三十熱門抓取時(shí),網(wǎng)頁結(jié)構(gòu)基本與首頁相似,我對(duì)URL做了簡(jiǎn)化處理,不影響數(shù)據(jù)的獲取,為什么在抓取首頁數(shù)據(jù)時(shí)要傳遞這么復(fù)雜的參數(shù),大家可以思考一下。