JavaScript
JavaScript是網(wǎng)絡(luò)上最常用也是支持者對多的客戶端腳本語言。它可以收集用戶的跟蹤數(shù)據(jù),不需要重載頁面直接提交表單,在頁面嵌入多媒體文件,甚至運(yùn)行網(wǎng)頁游戲。
我們可以在網(wǎng)頁源代碼的<script>標(biāo)簽里看到,比如:
<script type="text/javascript" src="https://statics.huxiu.com/w/mini/static_2015/js/sea.js?v=201601150944"></script>
jQuery
jQuery是一個(gè)非常常見的庫,70%最流行的網(wǎng)站(約200萬)和約30%的其他網(wǎng)站(約2億)都在使用。一個(gè)網(wǎng)站使用jQuery的特征,就是源代碼里包含了jQuery入口,比如:
<script type="text/javascript" src="https://statics.huxiu.com/w/mini/static_2015/js/jquery-1.11.1.min.js?v=201512181512"></script>
如果你在一個(gè)網(wǎng)站上看到了jQuery,那么采集這個(gè)網(wǎng)站數(shù)據(jù)的時(shí)候要格外小心。jQuery可以動(dòng)態(tài)地創(chuàng)建HTML內(nèi)容,只有在JavaScript代碼執(zhí)行后才會(huì)顯示。如果你使用傳統(tǒng)的方法采集頁面內(nèi)容,就只能獲得JavaScript代碼執(zhí)行之前頁面的內(nèi)容。
Ajax
我們與網(wǎng)站服務(wù)器通信的唯一方式,就是發(fā)出HTTP請求獲取新頁面。如果提交表單之后,或從服務(wù)器獲取信息之后,網(wǎng)站的頁面不需要重新刷新,那么你訪問的網(wǎng)站就在用Ajax技術(shù)。
Ajax其實(shí)并不是一門語言,而是用來完成網(wǎng)絡(luò)任務(wù)(可以認(rèn)為它與網(wǎng)絡(luò)數(shù)據(jù)采集差不多)的一系列技術(shù)。Ajax全稱是Asynchronous JavaScript and XML(異步JavaScript和XML),網(wǎng)站不需要使用單獨(dú)的頁面請求就可以和網(wǎng)絡(luò)服務(wù)器進(jìn)行交互(收發(fā)信息)
DHTML
Ajax一樣,動(dòng)態(tài)HTML(Dynamic HTML, DHTML)也是一系列用于解決網(wǎng)絡(luò)問題的技術(shù)集合。DHTML使用客戶端語言改變頁面的HTML元素(HTML, CSS,或者二者皆可改變)。比如頁面上的按鈕只有當(dāng)用戶移動(dòng)鼠標(biāo)之后才出現(xiàn),背景色可能每次點(diǎn)擊都會(huì)改變,或者用一個(gè)Ajax請求觸發(fā)頁面加載一段內(nèi)容,網(wǎng)頁是否屬于DHTML,關(guān)鍵要看有沒有用JavaScript控制HTML和CSS元素。
那么,如何搞定?
那些使用了Ajax或DHTML技術(shù)改變/加載內(nèi)容的頁面,可能有一些采集手段。但是用Python解決這個(gè)問題只有兩種途徑:
- 直接從JavaScript代碼里采集內(nèi)容(費(fèi)時(shí)費(fèi)力)
- 用Python的第三方庫運(yùn)行JavaScript,直接采集你在瀏覽器里看到的頁面