回答一個(gè)同學(xué)的提問蕾管,為什么網(wǎng)站中的數(shù)據(jù),明明BeautifulSoup菩暗,XPath寫提沒有問題掰曾,卻沒有抓取到數(shù)據(jù),如何決判斷這個(gè)數(shù)據(jù)是異步加載的勋眯,異步加載的包怎么找婴梧?
1下梢、現(xiàn)在很多網(wǎng)頁都采用了異步加載的方式(Ajax)客蹋,好處可以大大提高網(wǎng)站響應(yīng)速度和用戶體驗(yàn)度。
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)建快速動(dòng)態(tài)網(wǎng)頁的技術(shù)岗屏。
通過在后臺(tái)與服務(wù)器進(jìn)行少量數(shù)據(jù)交換辆琅,AJAX 可以使網(wǎng)頁實(shí)現(xiàn)異步更新。這意味著可以在不重新加載整個(gè)網(wǎng)頁的情況下这刷,對(duì)網(wǎng)頁的某部分進(jìn)行更新婉烟。
傳統(tǒng)的網(wǎng)頁(不使用 AJAX)如果需要更新內(nèi)容,必須重載整個(gè)網(wǎng)頁頁面暇屋。
一般的做法是似袁,當(dāng)前網(wǎng)頁的主要信息內(nèi)容會(huì)首先加載進(jìn)來,大的圖片咐刨,非本頁面核心相關(guān)的內(nèi)容稍后異步的方式加載進(jìn)來(json數(shù)據(jù))
這是簡頁首頁昙衅,大家看到打開首頁時(shí),向服務(wù)器發(fā)送了93個(gè)請(qǐng)求定鸟,包括首頁document而涉, js(javascript), 圖片联予,和json數(shù)據(jù)啼县。
對(duì)于首頁來說材原,用戶首先要看到的是熱門文章,所以右邊的推薦作者就是異步加載進(jìn)來的
我們用chrome右鍵檢查時(shí)谭羔,比較容易找到這個(gè)異步的請(qǐng)求华糖,返回的就是json,找的方法瘟裸,就是看請(qǐng)求Name 和 type客叉,排除圖片和js再看名稱,基本就能確定下來话告,簡書代碼也是相當(dāng)整潔優(yōu)雅兼搏,看名字 recommended?page=1&per_page=5
這個(gè)就是頁面上的右邊的推薦作者。
不過從這個(gè)頁面的抓取來說沙郭,首頁我們關(guān)注的數(shù)據(jù)是文章佛呻,文章URL和閱讀量,評(píng)論數(shù)病线,點(diǎn)贊數(shù)和文章作者吓著。在一個(gè)頁面我們不會(huì)去處理推薦作者的數(shù)據(jù)信息送挑。
這里就是一個(gè)分析纺裁。上次視頻中Young在這里講到分析這個(gè)URL,可以快速抓取到所有推薦作者的信息谚殊。有興趣的同學(xué)也可以對(duì)推薦作者的信息進(jìn)行一下分析。
另外還要說明一點(diǎn):使用chrome右鍵檢查工具,是能夠找到異步加載的數(shù)據(jù)的標(biāo)簽 怨愤,xpath路徑的篮愉,但是如果是用頁面的URL去抓取數(shù)據(jù)肯定是獲取這個(gè)內(nèi)容的,因?yàn)閿?shù)據(jù)都還沒有進(jìn)來。而chrome的右鍵檢查犀被,在頁面所有數(shù)數(shù)據(jù)加載完成了。無論是同步數(shù)據(jù),異步加載的數(shù)據(jù)最后都會(huì)渲染在網(wǎng)頁中的藕畔,也就是有一樣的樣式巫玻,能夠找到它的標(biāo)簽或xpath熄诡。
而在網(wǎng)頁中右鍵源代碼的方式查看,一般看的是一次請(qǐng)求的源代碼,這時(shí)是你看異步加載的數(shù)據(jù)笛厦。如果你網(wǎng)頁比較熟悉或者看得比較有贱鄙,有些網(wǎng)頁內(nèi)容很多,你右鍵查看源代碼,可能沒有這么多內(nèi)容或者代碼比較少言缤,仔細(xì)看一下,這可能是一個(gè)框架頁面(之前用得比較多點(diǎn))。
所以檢查一個(gè)頁面中的數(shù)據(jù)哪些是異步請(qǐng)求(大家俗稱是“包”)穿铆,要確定哪些是“包”,一是多分析網(wǎng)絡(luò)請(qǐng)求,二是掌握頁面的一些規(guī)律筑辨。
大家可以對(duì)比分析一下拉鉤網(wǎng)的職位數(shù)據(jù)抓取。
2楚昭、遇到一些異步加載的數(shù)據(jù)菇怀,怎么也找不到包怎么辦帅霜?
大家可以看一下58崗位的抓取時(shí)钝尸,這個(gè)崗位的 瀏覽量和申請(qǐng)人數(shù),會(huì)發(fā)現(xiàn)這個(gè)也是一個(gè)異步數(shù)據(jù)。(這種也是一個(gè)網(wǎng)頁特點(diǎn))
但是這個(gè)異步數(shù)據(jù)的“包”,真找不到(可能藏在某個(gè)js的請(qǐng)求中)
如果需要這個(gè)數(shù)據(jù)怎么辦,就只能用其他方法背蟆。可以參考 http://www.reibang.com/p/3abbc259f55a
總之碴裙,分析網(wǎng)頁莺琳,分析請(qǐng)求,確定類型辞做,快速用不同方式去嘗試稚补。這也大概是爬蟲學(xué)習(xí)和數(shù)據(jù)抓取的魅力。你可能每次遇到的問題都不太一樣。