Nodejs將JavaScript語言帶到了服務器端,做爲js主力用戶的前端們,所以得到了服務器端的開發能力,但除了用express搭建一個博客外,還有什麼好玩的項目能夠作呢?不如就作一個網絡爬蟲吧。聽說互聯網上的流量90%以上都是爬蟲貢獻的,不知道真假,但起碼證實了,爬蟲是一種用途普遍的東西,尤爲在電商比價領域,整個就是爬蟲的技術較量,固然我要作的是爬蟲中的弱雞,只實現基本功能,代碼見底部。html
運行效果:前端
下面簡述一下實現過程。express
首先挑選爬取對象,這裏選擇的也是門檻比較低的新聞站cnBeta.com,由於天天上午都要去逛一逛,比較熟悉,爲何說新聞站比較簡單呢,由於一般這類網站不要求用戶登陸,全部爬蟲的請求很容易僞造。
爬蟲的基本思路是,獲取頁面->構造信息選擇器->分析頁面連接->獲取相鄰頁面->循環第一步,對於新聞站來講,咱們要獲取的就是新聞內容啦,請求到頁面html代碼後,只要從頁面中找到內容容器元素就很容易獲取到新聞內容,下一步是獲取相鄰頁面的地址,cnBeta新聞是有上一頁下一頁連接的,但仔細觀察會發現其實使用js動態生成的,這裏須要找出js是如何獲取到連接的,拿到連接咱們就繼續獲取下一篇新聞的html代碼,周而復始。
期間確定不會一路順風,好比就遇到了301跳轉,好在從請求頭中很容易找到了跳轉目標,發現301跳轉後當即放棄請求從新請求跳轉地址就行了。
另外,爬蟲不能無限制的爬取,不然很容易被封IP,須要設置一個爬取條數的限制。最好再作一個爬取間隔的設置,但這裏只用做學習Nodejs,不會大量的爬取,所以也就不必作爬取間隔了。
詳細的過程分析見原文地址:http://refined-x.com/2017/06/09/Nodejs%E7%88%AC%E8%99%AB%E5%AE%9E%E8%B7%B5%E5%B0%8F%E8%AE%B0/。服務器
項目源碼:Github。網絡