国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

利用node.js爬取指定排名網站的JS引用庫詳解

2024-05-06 15:13:53
字體:
來源:轉載
供稿:網友

前言

本文給大家介紹的爬蟲將從網站爬取排名前幾的網站,具體前幾名可以具體設置,并分別爬取他們的主頁,檢查是否引用特定庫。下面話不多說了,來一起看看詳細的介紹:

所用到的node主要模塊

express 不用多說 request http模塊 cheerio 運行在服務器端的jQuery node-inspector node調試模塊 node-dev 修改文件后自動重啟app

關于調試Node

在任意一個文件夾,執行node-inspector,通過打開特定頁面,在頁面上進行調試,然后運行app,使用node-dev app.js來自動重啟應用。

所碰到的問題

1. request請求多個頁面

由于請求是異步執行的,和分別返回3個頁面的數據,這里只爬取了50個網站,一個頁面有20個,所以有3頁,通過循環里套request請求,來實現。

通過添加請求頭可以實現基本的反爬蟲

處理數據的方法都寫在analyData()里面,造成后面的數據重復存儲了,想了很久,才想到一個解決方法,后面會寫到是怎么解決的。

for (var i = 1; i < len+1; i++) { (function(i){ var options = { url: 'http://www.alexa.cn/siterank/' + i, headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36' } }; request(options, function (err, response, body) { analyData(body,rank); }) })(i) }

2. 多層回調

仔細觀察代碼,你會發現,處理數據的方法使用了如下的多層回調,也可以不使用回調,寫在一個函數內部;因為,每層都要使用上一層的數據,造成了這樣的寫法。

function f1(data1){ f2(data1);}function f2(data2){ f3(data2);}function f3(data3){ f4(data4);}

3. 正則獲取JS庫

由于獲取頁面庫,首先需要獲取到script的src屬性,然后通過正則來實現字符串匹配。

<script src="https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/js/lib/jquery-1.10.2_d88366fd.js"></script>

獲取到的script可能是上面這樣的,由于庫名的命名真是各種各樣,后來想了一下,因為文件名是用.js結尾的,所以就以點號為結尾,然后把點號之前的字符截取下來,這樣獲得了庫名,代碼如下。

var reg = /[^////]+$/g;var libName = jsLink.match(reg).join('');var libFilter = libName.slice(0,libName.indexOf('.'));

4.cheerio模塊獲取JS引用鏈接

這部分也花了一點時間,才搞定,cheerio獲取DOM的方法和jQuery是一樣的,需要對返回的DOM對象進行查看,就可以看到對象里隱藏好深的href屬性,方法大同小異,你也可以使用其他選擇器,選擇到script標簽

var $ = cheerio.load(body);var scriptFile = $('script').toArray();scriptFile.forEach(function(item,index){ if (item.attribs.src != null) { obtainLibName(item.attribs.src,index);}            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 抚远县| 循化| 濮阳市| 中山市| 东平县| 桂平市| 襄垣县| 十堰市| 宁明县| 临朐县| 汾西县| 剑阁县| 琼结县| 松原市| 鹤壁市| 资溪县| 龙门县| 和硕县| 平阳县| 临泉县| 无为县| 黔西| 马山县| 武威市| 贵溪市| 逊克县| 常山县| 泗阳县| 黑水县| 黄骅市| 河津市| 多伦县| 黎城县| 兴隆县| 两当县| 咸宁市| 吉木萨尔县| 星座| 宁波市| 伊川县| 远安县|