superagent
superagent是一個http方面的庫颊亮,用于發(fā)起請求
- 基本用法
request .post('http://meng.com') .send({name:'meng'}) .set('Accept','application/json') .end(function(err,res){ if(err || !res.ok){ alert(err) }else{ alert('you got' + JSON.stringify(res.body)); })
-
end()
,方法在于發(fā)送請求,并且有response
es6語法禽炬,使用request.get('/search').end(function(err,res){ ... })
.then()
代替.end()
request.get('search').then(success,failure)
- 支持的http方法米苹,默認(rèn)為get撵枢,也就是不顯示寫的話默認(rèn)為get
request('search',function(err,res)) #delete方法有點特殊羡藐,因為delete是保留字尾序,所以寫的時候用del request.del('/user/1').end(callback)
- 設(shè)置頭部信息,
set()
,參數(shù)接受一對鍵值對或者一個對象(也就是設(shè)置很多頭部信息的時候可以寫在一個set里也可以鏈?zhǔn)秸{(diào)用set方法)request.get('/search').set('API-Key','foobar').end(callback)
- GET請求迷郑,通過
query()
方法可以生成一個query-stringrequest .get('/search') .query({query:'manny'}) .query({range:'1..5}) .query({order:'desc'}) .end(callback) #生成的路徑為/search?query=manny&range=1..5&order=desc #當(dāng)然枝恋,也可以寫在一個里面,如果不想用鏈?zhǔn)秸{(diào)用的方式的話
- HEAD請求
request .head('/users') .query({email:'meng@126.com'}) .end(callback)
- POST/PUT請求
request.post('/user') .set('Content-Type','application/json') .send('{"name":"m","pet":"dd"}')#要發(fā)送的數(shù)據(jù) .end(callback)
- 設(shè)置Content-Type,可以用
set()
, 或者type()
或者request.post('/user') .set('Content-Type','application/json')
request.post('/user') .type('application/json')
- Response 屬性
-
res.text
,返回一個未經(jīng)過解析的response字符串(舉例來說如果get爬一個網(wǎng)頁嗡害,得到的就是整個網(wǎng)頁的源碼) -
res.body
,目前的理解是解析后的數(shù)據(jù)焚碌,當(dāng)然如果是解析后,當(dāng)然要設(shè)置過'application/json' -
res.header
,返回解析后的header對象
-
- 終止一個請求霸妹,
req.abort()
即可
cheerio基本用法
類似于python的beautifulsoup模塊十电,解析HTML代碼,語法類似jquery
- 最基本的用法
var cheerio = require('cheerio') var $ = cheerio.load(htmlCode)
- 對爬取的網(wǎng)頁進行處理
#首先獲得整個頁面的html代碼 superagent.get('http://baidu.com').end(function(err,sres){ var $ = cheerio.load(sres.text) #此時$的用法就會jquery一模一樣了叹螟,查找元素鹃骂,設(shè)置屬性都一樣,類比吧 })
eventproxy
-
基本用法
//得到eventproxy實例 var ep = new EventProxy() //all方法將handler注冊到事件組合上罢绽,也相當(dāng)于監(jiān)聽了這個事件組合 //當(dāng)event1畏线,event2都完成之后,也就是ep接收到ep.emit()函數(shù)之后才會執(zhí)行最后的函數(shù) ep.all('event1','event2',function(event1,event2){ //函數(shù)的參數(shù)對應(yīng)各自的事件名 }) //觸發(fā)良价,這里假設(shè)event1是數(shù)據(jù)庫的一個操作 db.get('sql',function(err,result){ ep.emit('event1',result) })
-
多類型異步協(xié)作
//就是上面的用法寝殴,所謂多類型就是多個獨立、并且不相關(guān)的事件 //all事件有兩種注冊方法明垢,第一種如上蚣常,第二種如下 var ep = EventProxy.create('event1','event2',function(event1,event2){ ... })
-
重復(fù)異步協(xié)作
抽象出來,一種類型的事件重復(fù)做很多次的時候用
var ep = EventProxy() ep.after('event1',number,function(list){ //event1執(zhí)行number次之后痊银,function將被執(zhí)行抵蚊,注意,并不是執(zhí)行一次就調(diào)用一次,是最后完了泌射,然后after函數(shù)才被執(zhí)行 //something被存儲在list里面 }) for (var i = 0;i<number;i++){ .... ep.emit('event1',something) }
-
持續(xù)型異步協(xié)作
當(dāng)某個事件獲取到的數(shù)據(jù)是動態(tài)的粘姜,也就是要持續(xù)刷新的時候
var ep = new EventProxy(); ep.tail('event1','event2',function(event1,event2){ //也是所有的事件觸發(fā)之后,這個function被調(diào)用執(zhí)行 //參數(shù)對應(yīng)各自的事件名的最新數(shù)據(jù) }) //event1假設(shè)是要持續(xù)觸發(fā)的(也就是數(shù)據(jù)重復(fù)更新的)熔酷,那么將會在每次觸發(fā)之后tail都會執(zhí)行一次孤紧,event1具體的形式可能就是放在一個定時器里面,5秒執(zhí)行一次