內容來源:2017年2月25日,懂球帝高級開發工程師鄧佳龍在「HTML5夢工場 & 微軟開發者沙龍第01期 -「再說 「JS 一統江湖」」」進行《所見即所得-基於Node.js的頁面數據實踐》演講分享。IT 大咖說(微信ID:itdakashuo)做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。前端
閱讀字數:1424 | 4分鐘閱讀數據庫
數據抓取是企業信息化的根基和第一步,只有利用先進的技術做好了信息抓取工做,才能爲信息化帶來最大的價值。懂球帝高級開發工程師鄧佳龍用五個字就歸納了數據抓取的精髓。緩存
數據抓取,通俗叫法是「爬蟲」。就是把非結構化的信息數據從網頁中抓取出來,保存到結構化的數據庫的過程。微信
能在頁面上看到的數據就是能獲得的數據,這就是我所說的「所見即所得」這五個字的含義。cookie
數據抓取技術能夠經過不少後臺語言實現,好比PHP、JAVA等等,可是Node.js有它獨特的優點。前端工程師
知己知彼,百戰不殆。數據抓取也有惡意攻擊網站或盜取數據的狀況。做爲前端工程師,只有當你知作別人是如何抓取的時候,才能想辦法去作防守。併發
一、獲取數據。異步
二、從網頁中提取並清洗出所需的數據。工具
三、落入存儲當中。網站
Node.js的無阻塞和事件驅動這兩個特性能夠大大提高抓取效率。
由於Javascript是一門前端語言,因此用它來作數據的提取和清洗有很大優點。
Node.js最近幾年的社區活躍度比較高,能夠用的工具和包也不少。
有一些數據會隱藏在JS腳本中,只能用Javascript來抓取。
在球探足球的官網上有一些關於賽事比分的應用,若是這些數據要小編人工錄入,至少要三個月。有了數據抓取技術,就變得很便捷高效。
首先抓取賽事數據,而後落地球隊數據,再落地球員數據,根據賽事數據能夠獲取到賽程、比賽、賠率等數據。
足球裏的賽程、賠率等信息都是很是重要的,而咱們利用數據抓取技術能夠輕易得到。
有些網頁若是用一些常規的數據請求方式不帶useragent信息是沒法正常訪問的。因此在作數據抓取的時候最好帶上useragent。
有些頁面上的數據接口必須在頭部中聲明特定的referer才能獲取數據。
部分網頁和數據接口會有訪問頻次限制。我建議你們下降訪問頻次,不要過於規律。
一些網頁和數據接口會出現轉碼問題。
有的網頁和數據接口須要身份驗證才能訪問。那麼就須要先作一個模擬登陸,把一些cookie信息緩存下來,獲取數據的時候再帶上這些cookie信息。
獲取數據異常狀態須要兼容性處理和必定的重試機制。針對不一樣的網站機制也有所不一樣。
目標網站改版時須要必定的預警機制。
Request——主要是用來獲取數據。
Cheerio——用於轉換和數據提取。
Co——把異步轉化爲同步的方式來寫。
Async——作併發流程控制。
Mongoose——主要用於操縱MongoDB。
Sequelize——主要用於操縱MySQL。
Log4js——作日誌記錄。
Pm2——守護進程。
Icony-lito——轉換代碼。
今天就分享到這裏,謝謝你們!