写网文大纲如何写大纲?怎么将自己脑海中某个桥段(想法)逻辑化成一个完整的大纲?百度了一些但感觉有些欠缺。

订阅你的位置: >
> 【教程】手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程
重要提示:1.此贴,以后不再更新;2.想要看更新的内容,请移至: 【前提】想要实现使用某种语言,比如,等,去实现模拟登陆网站的话,首先要做的事情就是使用某种工具,去分析本身使用浏览器去登陆网页的时候,其内部的执行过程,内部逻辑。此登陆的逻辑过程,主要指的是,需要访问哪些地址,提交哪些http请求,其中包含了有哪些查询关键字,涉及到哪些post的数据,涉及到哪些cookie等等。只有知道了内部逻辑过程,才能谈及,使用某种语言去实现,模拟,此套登陆网站的过程。关于分析工具,其实有很多种,此处选用,之前在所介绍的IE9的F12。在分析之前,虽然不需要你有太多的网络相关的基础,但是,如果真正想要熟悉分析网站抓取,模拟网站登陆的话,还是需要了解相关的知识的。其中,和cookie相关的内容,可参考:【使用IE9的F12分析登陆百度首页的内部逻辑过程】1.准备好工具,配置好工具 打开IE9,打开百度首页:按F12,调出F12工具,再切换到Network界面:然后点击“Start capturing”开始调试:下面就来利用F12来调试,分析登陆的内部逻辑。不过,在调试之前,先去做一些配置上的准备工作:(1)设置网页跳转时,已抓取的数据不被清除掉即设置:Tools -& Clear entries on navigate中的Console和Network,都取消掉:这样,在网页分析过程中,由于从一个页面跳转到另外一个页面,所抓取的到内容,就不会被清空掉了。(2)清除旧的cookie和缓存为了后续的调试,不被之前的已登陆的账户的(缓存和cookie等)信息所影响,所以去都清除掉:其中,简单解释一下是:A。2个和清除cookie有关的:Cache-&Clear session cookies:清除当前会话,即访问当前这么一堆网页所涉及的cookieCache-&Clear cookies for domain:清楚和当前网页所属的domain,此处为.baidu.com相关的cookie;B。2个和缓存cache有关的另外,为了清除的更彻底,往往也顺带把cache,即缓存的网页,也顺带都清理了:Cache-&Clear browser cacheCache-&Clear browser cache for this domain更多关于F12如何使用的事情,还是去参考之前所写的:接下来的所有操作,实际上就是,在IE9中,手动操作一遍,登陆百度首页的过程而已。2.模拟操作过程,利用工具抓取所需的整个过程 点击“登陆”:可以看到,除了网页中跳出你所熟悉的登陆对话框之外,F12调试窗口中,就已经抓取到很多内容了。然后输入用户名和密码,正常登陆:然后,就可以看到网页调转到了:以及,对应的抓取到了很多内容:好了,到此为止,我们的操作,基本就结束了。剩下的,就是从我们所已经抓取到的信息中,找到是如何登陆的。3.分析网站登陆的内部逻辑过程 3.1找到登陆网站所涉及的最核心的地址 对于熟悉的人,可以直接从那一堆的url中,找到哪个是登陆的页面。而现在假定你不熟悉,教你如何找到真正的有价值的信息。对于此处,我们可以想到的一种办法是,通过直接搜索密码,而搜到哪里发送了我们的密码:【小提示:显示内容时,设置为 自动换行】当抓取出来的Request Body,Response Body等部分的内容中,单行内容太长,一行显示不下,不方便查看时,可以点击右键,选择Word wrap:即可实现自动换行显示的效果了,方便查看了:此处,很容易看到,此处和我们密码相关的url地址为:即,以后如果想要写代码的话,所要访问的url地址,就是这个地址了。3.2分析所提交的数据(post data)中的参数和值 而且,此处的Request Body,就是对应的http的POST请求中所要提交的数据,简称为post data。此处Request Body中完整的数据为(注:以下数据,是另外一次分析出来的结果,对解释分析过程无影响):ppui_logintime=6852&charset=utf-8&codestring=&token=5abe7fbbe1bfc267b90b3&isPhone=false&index=0&u=&safeflg=0&staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html&loginType=1&tpl=mn&callback=parent.bdPass.api.login._postCallback&username=crifan&password=xxxxxx&verifycode=&mem_pass=on然后处理一下就是:ppui_logintime=6852&         charset=utf-8&           codestring=&           token=5abe7fbbe1bfc267b90b3&           isPhone=false&           index=0&           u=&           safeflg=0&           staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html&           loginType=1&           tpl=mn&           callback=parent.bdPass.api.login._postCallback&           username=crifan&           password=xxxxxx&           verifycode=&           mem_pass=on再去掉后面的那个&字符,变为:ppui_logintime=;        charset=utf-8           codestring=           token=5abe7fbbe1bfc267b90b3           isPhone=false           index=0           u=           safeflg=0           staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html           loginType=1           tpl=mn           callback=parent.bdPass.api.login._postCallback           username=crifan           password=xxxxxx           verifycode=           mem_pass=on很明显,此处就是模拟网站登录的核心数据了,是在写代码时,对于url=提交POST请求时,所以要发送的一些参数和值了。此处,再重新简要的介绍一下,模拟登陆网站的基本逻辑:想要模拟网站登陆,就要知道,要向什么url地址,发送什么样的数据,GET请求还是POST请求。GET请求只从服务器请求数据,不需要所谓的post data,但是往往需要在url后面添加上对应的?para1=val1&para2=value2之类的形式,此部分叫做query parameter,其本质上,有点类似于post data;POST请求,在发送请求时,还需要提供对应的post data,此处即对应着IE9的F12中的Request Body。     而余下的,发送请求时的其他相关参数设置,主要就是设置很多基本的参数,包括user-agent等,此处对应着那个Request Headers而提交请求后,网站的服务器会给你反馈,返回数据和信息给你。此处对应的就是Response Headers和Response Body。经常地,其中还涉及到cookie等信息。在发送之前,准备好,发送给服务器,服务器返回的信息中,往往也包含,更新后,cookie的值。对应的这部分内容,是Cookies部分。此处,把所有的内容,分别截图如下:Request HeadersRequest Body:Response Headers:Response body:Cookies:接下来,就是分析,如何获得所需的信息。先分析上述的post data中的值:ppui_logintime=;        charset=utf-8           codestring=           token=5abe7fbbe1bfc267b90b3           isPhone=false           index=0           u=           safeflg=0           staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html           loginType=1           tpl=mn           callback=parent.bdPass.api.login._postCallback           username=crifan           password=xxxxxx           verifycode=           mem_pass=on都是怎么来的。分析值是如何来的,以及顺带说说,写代码时,如何设置这些值。在此之前,先解释一下,在代码中关于如何设置这些参数的值的规律和经验:(1)对于有参数,但是值为空的哪些参数,一般来说,都是可以省略的。即写代码时,是可以去掉,忽略掉,这些参数的;当然,如果你抓取出来的参数是有值的,则需要考虑其值是怎么得到的,是否有意义,否则随便忽略掉某些参数,可能会导致模拟登陆失败的。(2)对于,看不太懂的参数的值的情况下,不妨先使用抓取出来的数据尤其是一些参数,看不太懂,而且其值又明显不是那种,很可能会变化的数字之类的值,则一般情况下,也都是固定的值,所以,即使对于参数和值本身不太了解,也无所谓,也都可以直接在代码中,直接使用抓取出来的数据即可。即使会导致出错,一般来说,也可以通过后续的多次抓取和分析,看出来该值真正的规律。在上面那一堆参数和值中:(1)一些很明显,是固定的值,不需要考虑太多的值有:charset=utf-8 -& 表示当前网页的编码是utf-8,我们写代码照着写即可,不需要改;codestring= -&此处为空,所以也可以不理会;isPhone=false -& 很明显,此处是通过PC登陆百度的,不是通过手机类的移动设备登陆的,所以是false。所以写代码时,也设置为false即可;细心的读者,也很容易回想起,此处是对应着之前的登陆界面中的“手机登陆”:如果是我们是通过“手机登陆”百度时,不出意外的话,肯定参数是isPhone=trueindex=0 -& 未知,但是也没看出来是什么含义,所以也直接设置为0即可;u=-& 空值,同样设置空值即可;safeflg=0 -& 未知,所以也可以暂且不管,同样设置为0即可。username=crifan -& 很明显,是我们的账号,不多解释;   password=xxxxxx -& 同理,是对应的密码;     verifycode= -&此处为空,所以也可以不管;     mem_pass=on -& 很明显,是memory password的所写,即记住密码,对应的页面是,我们已经勾选的&记住我的登陆状态&:(2)另外一些就是不太容易一眼就看出来的值,需要简单解释一下的:staticpage=http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html -&此处,等有了一定的调试经验,和本身具有一定的url的encode,decode基础的话,可以直接看出来,这个值http%3A%2F%2Fwww.baidu.com%2Fcache%2Fuser%2Fhtml%2Fjump.html是原先某个url地址,编码之后的值。而对应的原始的值,可以在代码中去解码而获得;此处先直接给出原始值:关于如何通过此,被编码的url地址中,获得原始的url地址,详细解释在这里: loginType=1 -& 未知,但是一般不知道的值,都可以先按照原先的值去设置即可;tpl=mn -& 未知,也还是同样设置即可;callback=parent.bdPass.api.login._postCallback -& 未知,也同样设置即可;(3)再剩下的,就是需要去分析调查,才知道为何是这样值的了:ppui_logintime=6852此值6852,看起来就像是会变化的。但是到底如何得到的,则需要去分析分析了。所以就去搜索6852:经过搜索,发现结果只能搜到此单独一处的6852,貌似没办法找到此数据如何得到的。但是,我们可以再去搜其参数ppui_logintime,然后另外在别的文件中也可以找到2处,其中一处是:很明显,此处是javascript脚本:在其中根据实际情况计算出来的。【小提示:对于参数的处理策略】对于涉及的很多参数,总的说,有两种策略:一是,直接忽略此值,暂时不管。因为很多时候,有些参数,至少是这样看起来,不是那么重要的参数(重要的参数,相信我不说你自己也能看出来,是那些username,password之类的参数)。然后就去写程序去模拟了。而真的等到程序运行出错,服务器没有返回你所期望的信息的时候,再回来分析此参数,看看是不是这个参数所导致的。然后再试图去分析其真正的值;二是,继续分析,甚至调试javascript代码,以便找到此值到底是如何一点点计算出来的。此过程可能会极其繁琐,也可能相对简单。要取决于此值被计算出来所经历的过程的复杂度。此处,在表面看起来,这个参数ppui_logintime,大概意思是登陆的时间,所以推测是服务器为了记录你本地登陆百度的时间,和能否登陆百度这个过程本身,应该不会产生根本的影响,所以此处就可以采用策略一,暂时忽略不管。万一真的有影响,再回来继续分析也不迟。token=5abe7fbbe1bfc267b90b3 -&此值5abe7fbbe1bfc267b90b3,很明显,是需要从别的地方找到的。所以就去分析此值是如何来的。同理,继续去搜5abe7fbbe1bfc267b90b3,然后是可以搜到的,然后通过点击搜索框中的向前和向后的按钮,是可以找到这个2/68 条记录,对应url是:的这处的:【小提示:在两种视图模式:Detailed View和Summary View之间切换】对应的,可以通过点击“Back to summary view”,而更加清楚的看到,是哪条记录,以及对应的视图模式中,显示出:Go to detailed view对于上述所搜到的内容,很明显可以看出,就是我们在通过网页登陆百度首页过程中,通过IE9的F12抓取出来的记录知道了,其内部还是会先去访问:然后会获得Response Body,即(服务器所返回的)html源码,其中包括了:bdPass.api.params.login_token='5abe7fbbe1bfc267b90b3';的,此时,你应该就明白了,到时候我们去写代码时,想要获得上述token的值的话,就需要先去对于url=发送GET请求,获得对应的html代码,然后从中分析出token的值5abe7fbbe1bfc267b90b3;而写到此,基本逻辑过程,也相对清楚了。但是有人很快会想到,即使上述代码写出来了,又如何能确保的确已经模拟登陆成功了,即如何验证此处模拟登陆百度首页成功了呢?此处,根据经验,主要通过两方面来验证:【小提示:如何验证模拟登陆网站已成功】一是返回的html代码返回的html代码,即对应着F12中的Response Body,此处为截图如下:如果你登陆成功了,那么代码中所获得的返回的html中,至少也应该是类似的html了。二是cookie如果你成功登陆了服务器,那么其所返回的值中中,对于cookie,一般都是会有对应的,和成功登陆有关的新的cookie返回给你的,以及另外更新一些原先发送的一些cookie的值。此处F12中的Cookies的截图如下:很容易看出,当登陆成功后,会返回那一堆的cookie,拷贝出来如下:Direction
Expires Domain
WpNYWFNSGFub0t6YU9PMW1tVzNIUGRya35TQk5pM0JnflI2fndrT3UtQmdESVpSQVFBQUFBJCQAAAAAAAAAAAoavCuy1YMAY3JpZmFuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAYIArMAAAALDmT5YqAAAA6p5DAAAAAAAxMC4yNi4xOWC-mFBgvphQM
Sat, 23-Jan-:08 GMT
b42a396ff9c7efb80c08beecd040f032
Sat, 23-Jan-:08 GMT
passport.baidu.com
fcfbca3c4faa6
Sat, 23-Jan-:08 GMT
passport.baidu.com
deleted Mon, 07-Nov-:07 GMT
SAVEUSERID
345bafed4234
Sat, 23-Jan-:08 GMT
passport.baidu.com
No而当代码模拟登陆成功后,则也肯定会收到类似的cookie的。【小提示:关于cookie,需要注意的事情】此处,需要特别提示一句,如果你在最开始没有去清除cookie,则很可能看到的cookie结果是这样的:即,登陆前后的cookie,都有BDUSS,PTOKEN,STOKEN,SAVEUSERID。这是因为,之前通过别的账号,以及同样的账号crifan,登陆过,所以IE9已经在本地记录了相关的cookie。所以,在访问该url时,能看到Sent中已经存在了类似的cookie。所以,总的来说,可以通过返回的html和cookie,来验证是否登录成功了。而一般来说,通过验证cookie,是最有效的。因为很多时候,某些网站登陆成功和登陆失败,所显示的页面可能是同一个;但是登陆成功的话,基本都会有对应的,新的,和登陆有关的cookie,返回的。一般来说,实际上,对于很多不是很复杂的网站,到这一步,就完全就够了,就能够成功模拟登陆了。但是,后来经过代码的证实,如上的流程,实际上是行不通的,因为对于去访问:实际上,返回的html是:var bdPass=bdPass||{};
bdPass.api=bdPass.api||{};
bdPass.api.params=bdPass.api.params||{};
bdPass.api.params.login_token='the fisrt two args should be string type:0,1!';
bdPass.api.params.login_tpl='mn';
document.write('&script type=&text/javascript& charset=&UTF-8& src=&https://passport.baidu.com/js/v2ApiUsedTangramFunctions.js?v=&&&/script&');
document.write('&script type=&text/javascript& charset=&UTF-8& src=&https://passport.baidu.com/js/pass_api_login.js?v=&&&/script&');其中的:bdPass.api.params.login_token=’the fisrt two args should be string type:0,1!’;是无法正确获得我们所需要耳朵token的值的。所以,接下来,就是继续去想办法,找到此处没有正确获得返回的html的原因。不过,首先要知道的,无论何时,从抓取出来的数据来看,只要你程序是完整模拟了整个浏览器所发送的所有的数据,此处即IE9所发送的request headers:和post data(Request body),此处为空:那么,程序所获得的返回值,就应该也和所抓取到的数据一样,即应该就可以从返回的html(response body)中获得所需的token的值了。而此处之所有没有获得,对照上述所抓取的数据去看,则很可能是,request headers中某些值,比如cookie值,referer等值,没有赋值正确,导致返回的html不对。所以,接下来,就是想办法,尝试一点点,完全找到上那些cookie的值,referer等的值,都是从哪里来的。具体寻找的办法,其实还是那些笨办法,就是去搜索,然后一点点找线索,对于某个值,最初是哪里获得的。好的,现在接着就以其中一个最复杂的cookie:SAVEUSERID,来说明,到底是如何分析出来的,找到最开始的SAVEUSERID是从哪里来的:不过,此部分内容,相对比较复杂,所以单独写到这里了:最终,才分析出来,SAVEUSERID是通过访问:而获得的。而相应的,访问之前,需要用到BAIDUID。所以又用同样的分析方法,去找到BAIDUID这个cookie的最开始的来源(又重新打开浏览器,重新分析了一次):因此,即为:先访问:去获得对应的BAIDUID,接着去访问:其中发送的数据中,包括BAIDUID,返回数据中,得到SAVEUSERID。而此时,其实访问本身就是我们所追求的目标,模拟登陆百度。所以后续的SAVEUSERID,其实此处是可以不用,只是去通过校验cookie,而验证登陆是否成功时,会涉及到而已。然后再去回头看之前所说的:再次重现抓取所看到的结果为:就容易看懂了,即需要在访问:时,提供BAIDUID这个cookie。另外,再确认一下,访问:正确登陆时,所返回的cookie:其中的cookie的详细的值为:Direction
Expires Domain
BAIDUID D612EFBFB9D9CD:FG=1
lxMkVCTHNMUlljSk9ERXgtNjZoZ3Q0S2tZbHBvUDFBSzZOUmk3ZHhza1JNSVpSQVFBQUFBJCQAAAAAAAAAAApRIA6y1YMAY3JpZmFuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAYIArMAAAALA2xXUAAAAA6p5DAAAAAAAxMC4yNi4xORHimFAR4phQbW
Sat, 23-Jan-:25 GMT
44cd9fe37e3f4a3a1e0bf1
Sat, 23-Jan-:25 GMT
passport.baidu.com
9f3536bfdaa41f08f54f62
Sat, 23-Jan-:25 GMT
passport.baidu.com
deleted Mon, 07-Nov-:24 GMT
SAVEUSERID
345bafed4234
Sat, 23-Jan-:25 GMT
passport.baidu.com
No可见,其中至少包括:BDUSS,PTOKEN,STOKEN,SAVEUSERID(其中,对于原先域名为baidu.com的PTOKEN,是被删除掉的,此处暂可忽略)3.3 总结出模拟登陆网站的基本流程至此,对于想要模拟登陆百度首页:的内部逻辑过程,基本上就很清楚了:顺序访问地址访问类型发送的数据需要获得/提取的返回的值1GET无返回的cookie中的BAIDUID2GET包含BAIDUID这个cookie从返回的html中提取出token的值3POST一堆的post data,其中token的值是之前提取出来的需要验证返回的cookie中,是否包含BDUSS,PTOKEN,STOKEN,SAVEUSERID【小提示:分析模拟登陆时,未必非得要完全搞懂和在代码中用到所有的参数】对于上述流程,按理来说,去使用代码,Python或C#等,去实现出来,即可。不过,关于模拟登陆时所需要的数据,多解释一下。按理来说,完整的模拟网站登陆的话,其实应该是从头到尾的,分析出浏览器(IE9)本身是如何访问网站的,然后把所有的逻辑搞懂,数据的来源都分析清楚,即如上述过程,对于访问所需要的那么一堆参数,都去搞懂具体的含义,以及参数的值,是怎么获得的。而实际上,很多时候,模拟网站登陆,或者是抓取网页信息的时候,只需要最关心的那些核心参数即可。因为,服务器,很可能,只是去判断那些核心参数,比如上述的username,password,及其他几个参数,然后就可以正确返回你所需要的信息,即html,cookie等,就可以成功实现模拟登陆的目的了。但是,话说回来,具体需要哪些,最基本的参数,还是需要通过写程序,去一点点测试出来的。而之所以给大家介绍上述的概念,目的是为了,在你觉得自己能看懂参数的大概含义的时候,很多时候,能看出该参数不要也无所谓的时候,那就可以先去测试基本的参数,而暂时忽略其他相对次要的参数。由此,在一定程度上,提高做事情的效率而已。当然,在忽略参数的时候,也要注意,不要轻易忽略很多参数,否则也是很可能影响到程序模拟登陆的正确性的。具体的尺度的把握,就一点:根据情况而定,自己看着办。【总结】至此,关于模拟登陆网站,如何一步步的分析出内部逻辑过程,就完成了。总结下来就是,先去用工具“录制”你所有的操作,然后再去利用工具去分析和登陆有关那些url的相关的信息,主要是post data有哪些参数,以及其值是如何获得的。提示:1.关于:SAVEUSERID我后来在写其他的教程: 和期间,遇到类似的问题了:在自动管理cookie时,由于发现返回的SAVEUSERID,已经是被deleted,所以就删除掉了,所以让你以为这个SAVEUSERID,是获得不到的。所以,此处,实际上不理会这个SAVEUSERID,只去检测其他的BDUSS,PTOKEN,STOKEN,就可以了。 2.更想说的是:如果以后,由于百度改版等原因,而导致各种内部逻辑改变,导致代码无法模拟登陆。则:在我没有时间更新帖子的前提下,还是要靠你自己,自己去用工具分析逻辑,然后再用代码去实现。即:凡事要靠自己,除非遇到错误,或者哪里不懂了,再求助别人,这样你会进步的更快。 模拟登陆网站的内部逻辑过程分析完毕后,就可以去通过代码去实现了: (1)Python版 (2)C#版(3)Java版 (4)go语言版 转载请注明: & 与本文相关的文章
64 queries in 0.361 seconds, using 11.63MB memory【教学】如何写好大纲【纸故文学社吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:37贴子:
【教学】如何写好大纲
写大纲前先立意
立意既是准备写出个什么样的故事? 用简短的话介绍出整个故事。 确定立意后决定角色设定,性格,习惯等等,角色需要能够充满趣味性,能够很好的推动故事发展,并且可以体现你故事想表达的东西。 确定了角色性格,可以按照性格设定他特别的一些能力。能使他拥有别人不具备的发展潜力。俗称金手指。 设定大纲前,还需要确定背景设定。故事是发生在什么背景环境下的。在这个环境下有可能发生哪些事,作者要对这个背景足够熟悉,自己做背景设定越详尽故事会显得越真实,而作者背景的了解也更佳透彻。但这却非常费时费力,建议参照某种背景环境,某些地方做修改。 有了故事背景,现在可以开始着手制定大纲。首先以主角的性格,会造成这种性格的原因,也就是角色背景是有据可循的,确定主角的背景。 故事的开始将会是在故事发生转折的时候。当然要遵从晚进早出的的模式,故事发生转折之前的某一点作为文章的开头,让读者对角色得到一定的了解,然后发生转折。让读者拥有阅读欲望。转折前的铺垫和人物着眼点需要注意。让读者尽快的代入。 确定了故事的开头,而结局在立意的时候便需要明确,故事最终会发展到什么地步。 这样有了开头和结尾,这就是故事主线,我们就需要开始填充情节,丰富剧情。 开头到结尾找到关键的连接点,例提问,胆小怕死的主角怎么成为一个救世主去拯救世界?需要些什么条件?以主角的性格他会怎样去达成这样的条件。这样我们可以得到一些结论。要成为救世主一定是能做到一般人不能做到的事,也就是说比一般人强,他强在哪些方面?他要如何获得这些能力?以他的性格他怎样才会去获得这些能力? 向自己提出这些问题
我们可以设想出很多可能
如冒牌大英雄 胆小怕死的主角——被丢到战场前线,生存本能让他拼命的学习保命的技能——因为能力出众立功被召回,得到上层赏识——因坐镇后方,丧失了危机感,又获得了他人的认可赏识难免会开始不可一世。开始花天酒地——然而因为爱上某个女人,女人遭遇危机,他不得不重新冲到前线去拯救女人——后面省略 小说中,情节事件发生巨大变化,一定要有事先的铺垫和暗示。才能不显得突兀。 你不能直接写主角去挖宝,获得神器。至少,你去挖宝前,或许有某个人想利用主角的血脉,打开神殿的大门。亦或者主角杀了什么人,找到了一张藏宝图,当然,这只是举例,自己构思的时候尽量曲折复杂合理一些。如果要想达到让读者意外的效果,你就得用暗示,甚至误导读者的思考方向。 一般来说这种关键连接点需要很好的把握起爽点,也就是冲突点。利用冲突点来制造出强烈的情绪,让读者跟着兴奋,期待,幸福等等。而负面的如危机感,愤怒等等可以和正面的情绪产生强烈的对比,使正面情绪的效果得到更好的发挥。这方面,渲染是很重要的。渲染得好,读者所产生的情绪越强烈。 控制读者情绪需要制造一个能引起正常人情绪的环境。 成功会感到喜悦 这个就不用举例了吧,不过故事高潮过后,不要急着进入下一个情节,享受一下高潮的余韵。 例如海贼王
路飞一伙大战司法岛,成功后,赏金的暴增,全世界的震惊等等,这都是成功的余韵,主角们成功后对敌人造成什么样的打击,自己有些什么样的成长,旁人的感受等等。强化成功后喜悦情绪的手段。 被当面羞辱
会感到愤怒
如斗破的退婚 预知会成功会感到希望
期待 如斗破获得药老的帮助
如返回云岚宗报复 预知会失败
会感到恐惧
紧张 如冒牌大英雄里胖子上的那艘被人盯上的舰艇 失败会感到悲伤
难过(这一种,一般来说需要有转机,或者是读者能够接受的失败。就像失败是为了更好的成功。不然容易引起读者不满,读者看书是为了消遣,不愿意被故事弄得烦闷,难过。诛仙之所以成功,是因为他一直给予读者希望,或许碧瑶能救活,或许和陆雪琪在一起,而到最后失败的时候,故事已经完了,所以,即便让读者不满,但这种结尾亦能让人记忆犹新。对此书印象深刻。)这种关键的连接点也尽量的曲折一些,不要太过于简单的一帆风顺。例如 胆小怕死的主角——遭遇重大打击,至亲被杀,变得疯狂,嗜血,被仇恨所占据——为了报仇主角拼命的渴求力量——去拜师学艺——然后找人报仇——不断的成长最后手刃仇人。 以上就是非常简单的模式,显得平淡,狗血。 胆小怕死的主角——遭遇重大打击,至亲被杀,变得疯狂,嗜血,被仇恨所占据——为了报仇主角拼命的渴求力量——去拜师学艺——然后找人报仇——结果发现仇人已死——失去目标,茫然无措——这时,突然得到消息至亲被杀另有隐情——去追查——发现这件事关系着一个隐秘的组织——经过一番追查发现至亲没死,只是假死为了某一个不为人知的目的—— 这样就会好很多,剧情变得曲折离奇,当然,你还能设计得更佳复杂一些,不过越复杂就越难掌握,因为不管再怎么复杂的剧情,作者的义务是要让读者清晰明白故事的内容。同样达到一个目的,你可以达到得很精彩,也可以达到得很直接。读者当然喜欢看精彩的故事。 为了保持读者对故事始终保持着热忱和兴趣。这个就需要学习金庸大大,多一些意料之外,情理之中。偶然中也存在着必然。不要一味的得神兽,得神器。那样故事会显得虚假。唐家三少就是很好的例子,没几个人能耐性看完他的书。期待是有了,但是每次期待的和设想的没什么区别,也没有让读者感到意外的转折,会丧失新鲜感。 设定这些主要的连接点,我们就可以开始丰富这些链接点的剧情了,每个连接点都是故事的一个转折,可以分成一卷,在丰富连接点的时候需要注意的东西很多,先要把每个连接点所需要的铺垫确定,像是胆小怕死的主角,我们需要设计桥段,让读者很清晰明了的感受到主角胆小,他胆小到什么程度,他为什么胆小等等。如果你就描述一句,XX非常胆小。屁用没有,完全就是垃圾。 人物性格需要用情节来塑造,善良的人,会因为被人欺负了还为着他人着想,有爱心的人会因为一只淋雨的流浪狗而把自己的伞给他,固执的人会不顾他人的反对,依然一意孤行。当然
这只是最浅险的举例,你也可以用其他更能表现角色特点的事例。在这些事件中你要懂得去渲染,让事件达到你所要的效果,像是斗破苍穹的退婚,实际上对一个穿越人士来说,这种被女人甩了也不算什么大事,但是经过土豆的渲染,把事情扯到侮辱他父母,绝对不能容忍,退婚女另人火大的态度等等,把事情渲染出成倍的效果。 但新人不建议描写太过复杂的人性,人性的矛盾,正反面等等。毕竟网络小说没有必要把人性刻画得那么复杂,有鲜明的特点,爱憎分明就好了。你非要写复杂的人物也不是不可以,不过那就非常考验作者的角色塑造能力了。我们在丰富剧情的时候要不断的强化角色的特点,性格等等。像是海贼王路飞的大胃口,山治的好色,乌索普的胆小,娜美的吝啬等等,这些能够让我们一看到名字,其鲜明的特点就会浮现脑中,这就是角色的塑造。 这些只是小的特点,也就是我们常说的角色的表象性格特征,很明显的特点。而内在性格特征,如路飞的梦想,对伙伴的态度,他的原则,对敌人的态度等等。路飞当海贼王,山治的梦想,找到那个传说拥有一切的海域,这些都不是三言两语能够表达清楚的,这些就需要我们利用情节让读者感受到角色爱憎,原则,梦想。等等。并且在这期间,一步步的展开你所设计的世界,也就是背景设定。 背景设定有很多种,也许你故事的世界有很多种种族,也许你故事的世界处处哀鸿,也许你故事的世界强者为尊,也许你故事中的战舰采用的是几百年后的新型技术,这些都需要你在情节中一点点让读者去了解。如果你把你故事里的世界当做一个真实的世界,存在于宇宙的某个空间层面,只是人类还未发现。那么你的故事也会显得更佳真实,让人向往。 对于在故事中加入配角和龙套性格等必须定死,在出场前他就像一个真人一样,所有性格都固定好了,才不会写出人格分裂,让读者无厘头,至于人物性格在剧情中的微妙变化都是有迹可循的,这个只要设身处地的去想就不会出错。 任何角色的出场都必须要有目的,根据目的来设定角色,你故事需要配角来拉动剧情发展,或者展示主角对待爱情,对待友情的处理方式都行。而配角也需要塑造,像主角一样,有特点,有历史,有背景,有爱憎。这里有一个小技巧,表现配角的性格用他的习惯,行为,动作,表情,语言,还有在各种情节中的表现来展现。不要用心理描写。对主角的敬佩,或者爱慕都可以用行为来表现。而龙套则不同,龙套对主角的腹诽,轻蔑都可以直接用心理描写来表达,因为龙套不需要被塑造得多么立体,也不要浪费过多的篇幅介绍无关的人。 下面介绍一些写作的小技巧和注意事项。 不要用第一人称。 第一人称因为局限了主角的感观,放弃了很多丰富情节的多角度叙述手段,例如双线并进的蒙太奇式描写、第三角度的场景和扣人心弦的冲突情节营造。 最主要的是,第一人称根本无法描写其他配角和第三者的心理活动,包括一些主角不在的场景等等。不要打斗细节占据文章比例超过30%,热衷于描写打斗,追求打斗场景细致化。 不要对话形式单调,大量的引号开头的对话推动情节,没有采取多种对话方式。 例:对话形式有四种: 甲说:“……” “……”甲说。 “……”甲对乙说,“……” “……” “……” 要加强对话形式多样化,有好几种, 第一,上面的对话形式变化是一种。 第二,在对话中,穿插表情,小动作,场景,细节,描写。利用这些描写,增强对话中人物的心理活动。 第三,作者要控制对话的数量,尽量不要完全以对话推动情节发展。 第四,叙述和语言的顺序可以根据感官顺序来,一个老头叹了口气,道:“今年的税负怕是交不起了啊!”老人先叹气后说话。 反面例子: 众人听到轻蔑的话,齐齐转头向门口看去,白衣男子大声笑道:“这么多前辈高人聚集于此,不知是对我派有什么大的意见?”这种写法就显得奇怪。先闻声后有动作的描写用“……”甲说。反之用甲说:“……”动作和语言交叉的用“……”甲对乙说,“……”。龙套,不需要露脸,或者描述的用最后一种,例如群众的声音。“这不可能!没有人能练成乾坤大挪移!” “这!这!这是什么功夫!天呐!” 还有就是没有必要的动作表情的两人对话,可以直接用这种。 主角少用自言自语的方式反应心理。 场景转换容易丢失代入感,读者兴趣不大,少写。时间和空间上有跳跃的话,要清晰明了。同场景角色的视觉转换主要作用于以不同的角度表达对人或者事物的观点。强化这个人事物在读者心中的印象。表达这种观点不要用心理描写。尽量用话语,表情,动作,行为来表达。 一件神器,你想让他在读者心里塑造一个强大的形象,你需要渲染他,旁人对它的感受,它的能力,甚至可以塑造它的历史,它曾经被什么伟大的人拥有过,是否带有诅咒,需要多强的力量才能驾驭,它曾经跟随主人有过什么样的伟大事迹,它消失了多少年等等。 不要写与故事无关的情节,任何情节都需要有目的性。需要有表达的东西。不要因为看过某书觉得哪个桥段看着爽就写什么桥段,你要懂得别人为什么写这个桥段,这个桥段写出来产生的什么作用,为什么你会觉得爽。 章节前后不要有与文章内容无关的名言警句之类的东西。这种东西让人反感,读者不需要你教他们道理,你想表达什么你可以通过具体的故事,让读者感受到。 错别字一章不能超过10个。 标点符号应用规范,没有超过5个逗号的长句子使人憋气。 无不能脑补的逻辑错误,经得起推敲,写作时多考虑各种可能性。 把 脑补不懂自己百度 段落字数,80个字为例,不能超过4行,以免使人密集恐惧。 不要有括号补充性文字。 不要有作者语,作者旁白。 写人物行为,语言要设身处地的去想。不要理所当然。把自己当做那个角色,那种性格。从角色的角度,以他的五种感官体验的顺序去描写。具体方法有
尝。还有概念型的东西,如疼痛,物体大小可以用对比法来形容。 像星级航母长五十公里,宽,高。这种数据化的东西谁都感受不到,你用对比法写成和台湾岛一样大。月球一样大,读者都会有个印象。疼痛,像生锈的铁锯狠狠的拉扯着皮肉,这种读者也能有个想象。太过飘渺的东西要想办法让读者感受到。
 初写大纲很难着手,因为大部分的写手在写大纲之前,只是知道自己要写的故事是一个什么样的开头,至于结尾的部分恐怕还没有想好。因为很多新手都是在有了一个好的灵感后,就兴冲冲的开始动笔,然后听说需要写一个大纲,于是开始准备。所以,对很多写手来说,给大纲的各个元素建立一个完成模式,是很有必要和效率的方法。什么模式呢?说通俗点,就是完成大纲各步骤的先后顺序。我相信如果按照以下顺序写大纲的话,一定会取得事半功倍的效果。1、确认题材。如果你连自己写的是什么都不知道,又如何去展开后续的情节?同样的,只有确定题材后,才能设定出与之配套的各种设定。另外,在选材的时候,必然要考虑到市场以及自己擅长的是什么类型。2、确定升级体系。在几个YY点中,你可以没有夺宝,你可以没有发财,甚至你可以没有泡妞,但是升级从来不能没有,因为他是夺宝、发财、泡妞、欺负人的基础,没有升级,前面的几个YY点就很难实现。可能有人会拿鹿鼎记来反驳我的这段话。那我在这里稍做解释下,如官场文等它的固有升级体系是现实存在的,自然不必设定,韦小宝泡妞、发财是建立在他升官的基础上的,鹿鼎记里的升级体系已经将武力体系极度弱化,而是由韦小宝的官职以及其与康熙的特殊关系带动了其他的YY点。另外,我们没有金庸老爷子的水平,这种特殊例子对于我们来说,起码是现阶段的我们来说并没有特别大的可参考性。许多作者会忽视对于升级体系的设定,但是他们可能没有意识到,升级体系的设定,是牵涉到世界背景、人物设定、细节情节发展等多方面元素的基础性内容。关于此点,我的建议是,能有多详细就有多详细。大家可以看看番茄、三少和JJ三个人,他们的升级体系无不十分完备,我相信这些工作在他们写书之前就是已经完成的。3、确定主角性格。只有确定了主角的性格,才能更好的通过剧情来体现主角的形象,也能更好的把握剧情的走向,并为剧情的发展提供可参考的依据。而且,主角的性格也大体就能确定作品的风格。你不可能让一个一本正经的主角总是遇到搞笑的桥段,那就将主角的形象搞得乱七八糟了……4、描述主线情节。描述主线情节的方法有很多,有的以人物出现顺序为标记,有的以道具为标记,有的以时间为标记等。但是我还是建议大部分的小说适合以地图变化为标记法对主线情节进行概要化。为什么呢?我用几种简单的例子来做下解释。A、竞技小说。主角的转会,在不同环境的成长过程,显然是情节发展最合适的方案。B、玄幻、仙侠、修真类小说。开启新地图已经成为目下最流行、最容易操作也是最为读者接受的模式。究其原因,盖因这种模式,可以有效的对主角的升级速度进行控制,不至于让主角遇到过分强大的对手,使得主角的虐人合理化,因为在这张地图上确实没有什么人能给他造成太大的威胁。C、官文(含架空类的官场文)。查看很多官文小说可以看到,主角大的职位的变化,通常是会出现地点的变化,这个是由实际情况约束的,自不必多言。D、王朝争霸。这类文已经很少有人写,因为很少有人看。但是这种文的特点也必然是从小地图到大地图的变化。E、其他如灵异、都市、科幻等类型文章则可能受地点变化的影响会比较小一些。综上所述,以地点变化为标记概述大纲的方法,优点是很明显的,那就是易于推进故事情节。这一点对于新人来说十分重要。而如果作者对故事情节的把握能力有了相当程度的功力,则可以不必选择这种方法。还有就是地点变化直接对应升级体系的变化,这是开拓更高级升级体系的绝佳方法。诸如土豆、西红柿的小说莫不如此。但是要注意的是,地图的变化一定要有一个合理的解释,想要做到这一点,就需要在即将结束甚至更早的情节里做出完美的伏笔和铺垫。大家可以参考下吞噬星空中番茄在描述主角从地球到宇宙的过程,很突然,但是很合理。意料之外,情理之中正是小说剧情中的一个极高的境界。另外,用地图变化法的主线情节,对于小说内时间的把握非常不到位,这就要求作者在后续的过程中进行编年史确定。关于这一点,后续将有解释。再来说下本条内容的细化程度。我的建议是,每个地点的故事用500字左右的文字,精简的介绍在这个地图上发生的故事。作者可以把这个看成给一部电影写内容简介一样。5、世界背景初始设定。在完善故事主线情节的时候,相信每个作者都必然有很多的想法了,那么在这个过程中,记录下你的灵感吧,它在你完善世界背景的过程中,将会发挥很重要的作用。世界背景的建立时间,有人选择在了主线情节的前面,我认为这也是一种方法,但是我的建议是:在建立主线情节前可以也必然有一定的关于世界背景的想法,但是,完善世界背景的工作,适宜在确定主线情节后进行。为什么呢?原因有两点。第一、主线情节和世界背景是需要相互配套,在互相配套的过程中,就需要不断的进行修改,相对于主线情节来说,世界背景的设定和修改显然更加容易。第二、用主线情节来配套世界背景,我认为更加容易
贴吧热议榜
使用签名档&&
保存至快速回贴

我要回帖

更多关于 应用文写作课程大纲 的文章

 

随机推荐