这两天hxd找我写一道面试题,要求使用typescript类型系统 并且可以编译成普通的JavaScript代码。   
1. 从多个网页爬取内容,然后进行解析 有10个网页,1.txt 到 10.txt
http://dy-public.oss-cn-shenzhen.aliyuncs.com/interviewTestData/1.txt 
1 2 <abc >  <de  f ></def > </abc > 
格式有可能有区别 
用 promise, async, await 分别实现并发、串行爬取 
网页下载使用nodejs的http即可 
使用正则表达式获取data后面的字段,将10个文件的data值全部获取,并相加 
 
网络请求 Node.js 有大量的网络请求模块,题目这里要求用node的http模块
1 2 3 4 5 6 7 8 http.get (url, res  =>     res.setEncoding ('utf8' )     res.on ('data' , data  =>         resolve (data)     }) }).on ('error' , (e ) =>  {     reject (e.message ) }) 
http模块还可以指定options,但这里只需要下载网页,因此使用简单的get请求足以。  
爬虫主体 爬虫大致分为两部分-> 网络请求 和 数据清理 , 网络请求已经实现了,剩下就是把请求回来的数据进行清理了。这里也没啥多的选择,题目要求使用正则表达式,简单的构建整理一下就得到了下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 import  * as  http from  'http' class  Spider  {    sum : Number      constructor (         this .sum  = 0      }     httpGet (url ) {         return  new  Promise ((resolve, reject ) =>  {             http.get (url, res  =>                 res.setEncoding ('utf8' )                 res.on ('data' , data  =>                     resolve (data)                 })             }).on ('error' , (e ) =>  {                 reject (e.message )             })         })     }     render (urls ) {         urls.reduce ((promise, url ) =>  {             return  promise.then (_  =>                 return  this .httpGet (url)             }).then (node  =>                 return  this .flush (node)             }).then (res  =>                 this .sum  += res             })                 .catch (e  =>console .log (e))         }, Promise .resolve ())     }     flush (data ) {         return  new  Promise (resolve  =>             const  re = /:\s(\d+?);/gi              const  number  = Number (re.exec (String (data))[1 ])             resolve (number )         })     } } let  baseUrl = 'http://dy-public.oss-cn-shenzhen.aliyuncs.com/interviewTestData/' let  urlList = []for  (let  index = 1 ; index <= 10 ; index++) {    urlList.push (`${baseUrl} ${index} .txt` ) } const  spider = new  Spider ()spider.render (urlList) setTimeout (() =>  {    console .log (spider.sum ) }, 5000 ); 
The End 到此为止,整个爬虫就写完了,总结一下体验。typescript是具有类型系统,这对于我这写多了python和JavaScript的人来说太好上手了!