最近本人在学习开发NodeJs,使用到express框架,对于网上的学习资料甚少,因此本人会经常在开发中做一些总结。
express获取参数有三种方法:官网介绍如下
Checks route params (reqparams), ex: /user/:id
Checks query string params (reqquery), ex: id=12
Checks urlencoded body params (reqbody), ex: id=
1、例如:127001:3000/index,这种情况下,我们为了得到index,我们可以通过使用reqparams得到,通过这种方法我们就可以很好的处理Node中的路由处理问题,同时利用这点可以非常方便的实现MVC模式;
2、例如:127001:3000/indexid=12,这种情况下,这种方式是获取客户端get方式传递过来的值,通过使用reqqueryid就可以获得,类似于PHP的get方法;
3、例如:127001:300/index,然后post了一个id=2的值,这种方式是获取客户端post过来的数据,可以通过reqbodyid获取,类似于PHP的post方法;
下面举例介绍下这三个方法:
如下一个testhtml代码
<form action="/index" method="get">
<input type="text" name="login_name"/>
<input type="submit" value="Sign In" />
</form>
在nodeJs中我们要自定义>
抓取网站上的妹子照片。
第三方模块
superagent : 第三方Nodejs 模块,用于处理服务器和客户端的>
cheerio : 为服务器端定制的Jquery实现。
思路
通过superagent 获取目标网站的dom
通过cheerio对dom进行解析,获得通用布局。
如果只是爬取一个页面,则可以直接将目标页面的目标元素获取
如果是分页或者多个页面,可以通过循环获得目标链接,进行多次抓取。
实现
这里我们实现一个抓取网站妹子的照片。
目标网址:>
代码如下:
//引入第三方和通用模块var fs = require('fs');//为了将抓取的存到本地,使用fs
var superagent = require('superagent');//引入superagent
var cheerio = require('cheerio');//引入jquery实现
var filePath = '/node/学习/sis/img/';//定义抓取妹子文件存放路径
var count = 0;//记录抓取数量
var test = [];
//抓取一个页面的实现。
var getOnePage = function(url){
//因为煎蛋对请求做了限制,所以将cookie加上了。如果你要访问该网站的话,可以通过浏览器查找cookie 并进行替换
superagentget(url)
set({
'user-agent':'Mozilla/50 (Windows NT 100; WOW64) AppleWebKit/53736 (KHTML, like Gecko) Chrome/4702526111 Safari/53736'
})
set('cookie','500322148=53; Hm_lvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1454117846; Hm_lpvt_fd93b7fb546adcfbcf80c4fc2b54da2c=1454119909')
set({
'accept' : 'text/html,application/xhtml+xml,application/xml;q=09,image/webp,/;q=08',
'connection' : 'keep-alive',
'host' : 'jandannet'
})
end(function(err,sres){//这里是对获取的dom进行处理
if(err)throw err;
var $ = cheerioload(srestext);
var nextUrl = $('previous-comment-page')attr('href');//获得下一页的链接,为了开始下一次请求
$('img')each(function(index,ele){//循环该页面的所有并得到对应的链接,放进数组。
var u = '';
if($(ele)attr('org_src')){
u = $(ele)attr('org_src');
}else{
u = $(ele)attr('src');
}
testpush(u);
//通过superagent 获取数据,并保存到本地。
superagentget(u)end(function(err,sres){
if(err)throw err;
//根据访问路径获得文件名称
var ttt = usplit('/');
var name = ttt[tttlength-1];
var path = filePath+name
fswriteFile(path,sresbody,function(){
count++;
consolelog(u);
consolelog('已成功抓取'+count+'张');
});
});
});
if(null != nextUrl && '' != nextUrl){ //何时开始下一次请求
getOnePage(nextUrl);
}
});
};
getOnePage('/');//触发第一次请求开始
5 结果
CSDN的登录界面下会有“两周内不再登录”选项,用户登录后会保存用户登录信息,第二次登录时自动补全登录密码
二、过程
1、当客户端发送一个请求的时候,会产生一个request对象,这个对象里面就包含了cookie
2、服务端先设置cookie信息,并在客户端请求时把这个cookie信息发送给客户端,客户端会自动保存cookie的key/value值
3、下次向服务端发送请求时,客户端会自动带上cookie信息,服务端会根据cookie信息来识别状态。(之前是否访问过)
4、简单说就是在客户端,保存一串加密后的字符串,下次用户访问时,获取这个加密串进行解密匹配,然后创建登录Session信息。
三、定义
cookie用来给无状态的>
首先,你需要在服务器端使用一个Session模块,比如Express的Session模块。
然后,在你的路由中,你可以访问reqsessionusername,这样就可以获取到用户名了。
例如:
appget('/', function(req, res){
var username = reqsessionusername;
ressend('Hello ' + username);
});
1var language = windownavigatorlanguage
Linux 是获取相关的环境变量,这个不难。Windows的话中文版默认都是GBK
打印头信息就可以了,因为nodejs是基于>
玩nodejs的话,最好把>
session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。
当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截。
session可以和Redis或者数据库等结合做持久化 *** 作,当服务器挂掉时也不会导致某些客户信息(购物车)丢失。
以上就是关于nodejs 中express框架中request有哪些属性和方法全部的内容,包括:nodejs 中express框架中request有哪些属性和方法、如何使用nodejs做爬虫程序、如果需要两个cookie发往客服端,需要的代码是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)