JavaScript
JavaScript 是網(wǎng)絡(luò)上最常用也是支持者最多的客戶端腳本語言。它可以收集 用戶的跟蹤數(shù)據(jù),不需要重載頁面直接提交表單,在頁面嵌入多媒體文件,甚至運(yùn)行網(wǎng)頁游戲。
我們可以在網(wǎng)頁源代碼的<scripy>標(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í)行之后才會顯示。如果你用傳統(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)擊都會改變,或者用一個(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,直接采集你在瀏覽器里看到的頁面(這個(gè)可以有)。