春运,对富人来说,是一场荣归故里的盛宴;而对穷人来说,只是一场悲欢离合的迁徙。

什么是春运?

640.jpg


春运,就是有工作的地方,没有家;有家的地方,没有工作。


今天我们用几组照片回顾一下春运,体味人间悲喜辛酸,也让我们对“家”这个字,有着更深刻的理解。

641.jpg



2001年,春运期间,一名女子在购票的队伍中精疲力尽。
怕被拥挤的人群冲散,她拼尽全力拉紧爱人的衣服。



642.jpg


2002年,春运期间,人和行李把车厢挤塞得满满的,没有一丝喘息之机。

一个小男孩被挤得张嘴大叫。


643.jpg


2003年春运,广州火车站,一对夫妻一年的积蓄和车票,都被小偷偷走了。

夫妻二人绝望地相拥而泣。



644.jpg


2005年1月10日,春节来临,贵阳一个农民工,背起三米多高的年货回家过年。




645.jpg


2006年1月16日,兰州火车站,一位已经登车的男子从车窗中探出身来亲吻自己的爱人。



646.jpg


2006年在北京西客站候车室,父亲挑起方便面喂孩子,孩子的小脸冻得红里发乌。



647.jpg


2006年1月18日,北京西站候车室,母亲咬断方便面喂孩子。

孩子张大嘴巴,小脸冻得通红。





650.jpg


由于南方大雪,近10万人滞留。


648.jpg




2007年2月7日一场暴雪突降太原,在太原站购买车票的人们排成了长龙,尽管大雪纷飞,尽管许多人没有带伞,他们还是不愿意放弃排队等待。

因为多坚持一会,可能就多一份回家的希望。



2007年2月26日,在武汉汉口火车站,一名乘客用头顶另同伴从车窗上车。


649.jpg



2008年1月27日,一名旅客顶着大雪在合肥火车站进站候车。




2008年2月1日,广州火车站,人山人海。






2008年,广州火车站,人山人海中,有一名乘客晕倒,被众人抬高救出。






2009年1月12日,广东惠州火车站,旅客来不及从车门登车,只能爬车窗。






2010年1月20日,宁波一个铁路临时售票点,长长的队伍中,广西小伙梁献贵趴在隔离栏上酣然入眠。这是他三年来第一次回家。






2010年1月30日,一位背负着超大行李的妈妈怀抱孩子,在南昌火车站匆忙赶车。






2010年,在宁波工作的白先生送别回甘肃老家过年的父母,父母在车窗上写下了“保重”两个字。白先生顿时凝噎。






2011年1月12日,因为孩子要和爷爷奶奶回家过年,妈妈到火车站送别,离别前孩子亲吻妈妈。






2011年1月17日,在杭州春运火车票大卖场,来自湖南常德的牟师傅(左一)和两名工友,裹着棉被,在寒风中等待买票回家。






2011年1月18日,众多旅客冒雪在苏州体育中心集中售票处排队,准备购买火车票。






2011年1月18日,浙江嘉兴,一位民工用冻裂的手指夹着刚买到的车票,展示给仍在排队的老乡看。






2011年1月29日,广州火车站,小曾与女友不停地挥手告别,两人都流下了眼泪。




“女友是河南郑州的,她这次回家有可能就不回来了,我们或许就要分开,没有站台票,我是买短途列车票进站送她的。”小伙子含泪说。






2012年1月6日下午,深圳火车站开往桂林的列车上,香港人陈先生与儿子隔着玻璃亲吻。两个儿子先由岳母带回桂林老家。






2013年2月2日,北京火车站一对男女依依不舍,男孩不想让别人看见自己落泪,捂着双眼。






2015年1月31日,武汉大雪纷飞。一位年轻母亲用衣物把幼小的孩子裹在胸前,急匆匆拖着行李赶路。




因为无法用双手护着怀里的孩子,她只好用牙齿紧紧地咬着裹孩子的衣物,不让风雪飘进去。






2016年1月31日,安徽阜阳小雪。




59岁的吕俊荣背着母亲,和挑着行礼的爱人一起准备乘车回家过年。






还有些买不到票,每年都有一大批外出务工人员,选择用骑摩托车的方式回家。




寒风、大雪、疲劳,以及结冰的路面,都阻挡不住他们回家的脚步。




网友“我头戴小花”说:“以前总是很排斥农民工,离得远远的。一前从广州坐火车去武汉,看到大包小包的农民工,心里一阵酸。特别是有个农民工子女,一个小妹妹,才五六岁的光景,提着一个有她半个身高的大桶,还背着一个和我行李差不多大的包袱,被挤得东倒西歪。她爹妈走前面,背着很多东西,也无暇顾她。”


网友“蓝的岸”说:“有一次火车正待出发,突然被一阵叫声哭声惊到,一个农民大哥背着大包小包,在站台上惊慌失措地跑来跑去,说是上错站台了,乘警和乘务人员在旁边冷冷地看着他,‘已经错过了,那班次开了’,我看见农民大哥很绝望的样子,那张伤心的脸一直留在我脑海里。”




春运开始了,在回家的火车上,如果看到过道里的农民工,请适当地让会儿座、交换着坐;别厌烦他们行李多,大包小包,那可能是他们用辛苦一年的血汗钱,给孩子买的玩具、给老人买的礼物…...


春运,对富人来说,是一场荣归故里的盛宴;而对穷人来说,只是一场悲欢离合的迁徙。--
 
继续阅读 »
什么是春运?

640.jpg


春运,就是有工作的地方,没有家;有家的地方,没有工作。


今天我们用几组照片回顾一下春运,体味人间悲喜辛酸,也让我们对“家”这个字,有着更深刻的理解。

641.jpg



2001年,春运期间,一名女子在购票的队伍中精疲力尽。
怕被拥挤的人群冲散,她拼尽全力拉紧爱人的衣服。



642.jpg


2002年,春运期间,人和行李把车厢挤塞得满满的,没有一丝喘息之机。

一个小男孩被挤得张嘴大叫。


643.jpg


2003年春运,广州火车站,一对夫妻一年的积蓄和车票,都被小偷偷走了。

夫妻二人绝望地相拥而泣。



644.jpg


2005年1月10日,春节来临,贵阳一个农民工,背起三米多高的年货回家过年。




645.jpg


2006年1月16日,兰州火车站,一位已经登车的男子从车窗中探出身来亲吻自己的爱人。



646.jpg


2006年在北京西客站候车室,父亲挑起方便面喂孩子,孩子的小脸冻得红里发乌。



647.jpg


2006年1月18日,北京西站候车室,母亲咬断方便面喂孩子。

孩子张大嘴巴,小脸冻得通红。





650.jpg


由于南方大雪,近10万人滞留。


648.jpg




2007年2月7日一场暴雪突降太原,在太原站购买车票的人们排成了长龙,尽管大雪纷飞,尽管许多人没有带伞,他们还是不愿意放弃排队等待。

因为多坚持一会,可能就多一份回家的希望。



2007年2月26日,在武汉汉口火车站,一名乘客用头顶另同伴从车窗上车。


649.jpg



2008年1月27日,一名旅客顶着大雪在合肥火车站进站候车。




2008年2月1日,广州火车站,人山人海。






2008年,广州火车站,人山人海中,有一名乘客晕倒,被众人抬高救出。






2009年1月12日,广东惠州火车站,旅客来不及从车门登车,只能爬车窗。






2010年1月20日,宁波一个铁路临时售票点,长长的队伍中,广西小伙梁献贵趴在隔离栏上酣然入眠。这是他三年来第一次回家。






2010年1月30日,一位背负着超大行李的妈妈怀抱孩子,在南昌火车站匆忙赶车。






2010年,在宁波工作的白先生送别回甘肃老家过年的父母,父母在车窗上写下了“保重”两个字。白先生顿时凝噎。






2011年1月12日,因为孩子要和爷爷奶奶回家过年,妈妈到火车站送别,离别前孩子亲吻妈妈。






2011年1月17日,在杭州春运火车票大卖场,来自湖南常德的牟师傅(左一)和两名工友,裹着棉被,在寒风中等待买票回家。






2011年1月18日,众多旅客冒雪在苏州体育中心集中售票处排队,准备购买火车票。






2011年1月18日,浙江嘉兴,一位民工用冻裂的手指夹着刚买到的车票,展示给仍在排队的老乡看。






2011年1月29日,广州火车站,小曾与女友不停地挥手告别,两人都流下了眼泪。




“女友是河南郑州的,她这次回家有可能就不回来了,我们或许就要分开,没有站台票,我是买短途列车票进站送她的。”小伙子含泪说。






2012年1月6日下午,深圳火车站开往桂林的列车上,香港人陈先生与儿子隔着玻璃亲吻。两个儿子先由岳母带回桂林老家。






2013年2月2日,北京火车站一对男女依依不舍,男孩不想让别人看见自己落泪,捂着双眼。






2015年1月31日,武汉大雪纷飞。一位年轻母亲用衣物把幼小的孩子裹在胸前,急匆匆拖着行李赶路。




因为无法用双手护着怀里的孩子,她只好用牙齿紧紧地咬着裹孩子的衣物,不让风雪飘进去。






2016年1月31日,安徽阜阳小雪。




59岁的吕俊荣背着母亲,和挑着行礼的爱人一起准备乘车回家过年。






还有些买不到票,每年都有一大批外出务工人员,选择用骑摩托车的方式回家。




寒风、大雪、疲劳,以及结冰的路面,都阻挡不住他们回家的脚步。




网友“我头戴小花”说:“以前总是很排斥农民工,离得远远的。一前从广州坐火车去武汉,看到大包小包的农民工,心里一阵酸。特别是有个农民工子女,一个小妹妹,才五六岁的光景,提着一个有她半个身高的大桶,还背着一个和我行李差不多大的包袱,被挤得东倒西歪。她爹妈走前面,背着很多东西,也无暇顾她。”


网友“蓝的岸”说:“有一次火车正待出发,突然被一阵叫声哭声惊到,一个农民大哥背着大包小包,在站台上惊慌失措地跑来跑去,说是上错站台了,乘警和乘务人员在旁边冷冷地看着他,‘已经错过了,那班次开了’,我看见农民大哥很绝望的样子,那张伤心的脸一直留在我脑海里。”




春运开始了,在回家的火车上,如果看到过道里的农民工,请适当地让会儿座、交换着坐;别厌烦他们行李多,大包小包,那可能是他们用辛苦一年的血汗钱,给孩子买的玩具、给老人买的礼物…...


春运,对富人来说,是一场荣归故里的盛宴;而对穷人来说,只是一场悲欢离合的迁徙。--
  收起阅读 »

ubuntu 12.04及以上安装nvidia显卡驱动

只用系统库apt就可以满足需求的了,即使你要挖矿,安装一个cuda的库即可。
运行命令: apt-get install nvidia-current
然后一路回车即可,如果遇到依赖关系,看看差哪些库,然后优先使用apt-get来安装,如果实在安装不了,就可以使用aptitude install 来安装(使用这个命令可以省下很多解决依赖问题)
 
 
继续阅读 »
只用系统库apt就可以满足需求的了,即使你要挖矿,安装一个cuda的库即可。
运行命令: apt-get install nvidia-current
然后一路回车即可,如果遇到依赖关系,看看差哪些库,然后优先使用apt-get来安装,如果实在安装不了,就可以使用aptitude install 来安装(使用这个命令可以省下很多解决依赖问题)
 
  收起阅读 »

python获取股权质押数据

<占位,今晚回来更新>
<占位,今晚回来更新>

为什么我不买银行股(四大行)?


此文作为一个消费者的立场来说的,撇开财务数据或者k线曲线趋势。
如果你很讨厌一个公司,你还会买入吗?
最近年关将近,相信不少人都会去银行兑新钞,用来过年发红包。 本人也不例外。
去到银行,首先要做的就是取号,取号的作用,一是用来排队,二是用来确定银行工作人员的工作量,在繁忙的年关,去晚了,号很快就被拿完,大堂工作人员会跟你说下午再来吧。
但是看着业务大厅,3个现金窗口,剩下的5个非现金窗口。3个现金窗口排满了人。而剩下的拿那个非现金窗口中有3个没有人。
因为银行卡的磁条掉了,所以当时去重新办理一张。 办理前顺便问了下大堂工作人员,有没有新的新钞,被告知已经没有了,要等到下周一才有新钞。
但是在我办理完了换卡手续后,看到一位貌似银行亲戚或者朋友的人进来,因为她没有拿号,直接去到非现金柜台那里和工作人员聊天,大概过了5分钟,工作人员领着那个人直接到了现金柜台,拿了2K的新零钞(20元一张)。 当时觉得这样的企业,要不是有垄断地位,应该早就倒闭了。
回家后,掏出手机,把刚转到银行卡的5K又转出到京东小金库。银行卡余额为300.因为那个银行有低额资金管理费,低于300每个月,就会收你手续费(这个是3-4年前的政策,不知道现在改了没有)。
PS:一线城市的宇宙行。
 
继续阅读 »

此文作为一个消费者的立场来说的,撇开财务数据或者k线曲线趋势。
如果你很讨厌一个公司,你还会买入吗?
最近年关将近,相信不少人都会去银行兑新钞,用来过年发红包。 本人也不例外。
去到银行,首先要做的就是取号,取号的作用,一是用来排队,二是用来确定银行工作人员的工作量,在繁忙的年关,去晚了,号很快就被拿完,大堂工作人员会跟你说下午再来吧。
但是看着业务大厅,3个现金窗口,剩下的5个非现金窗口。3个现金窗口排满了人。而剩下的拿那个非现金窗口中有3个没有人。
因为银行卡的磁条掉了,所以当时去重新办理一张。 办理前顺便问了下大堂工作人员,有没有新的新钞,被告知已经没有了,要等到下周一才有新钞。
但是在我办理完了换卡手续后,看到一位貌似银行亲戚或者朋友的人进来,因为她没有拿号,直接去到非现金柜台那里和工作人员聊天,大概过了5分钟,工作人员领着那个人直接到了现金柜台,拿了2K的新零钞(20元一张)。 当时觉得这样的企业,要不是有垄断地位,应该早就倒闭了。
回家后,掏出手机,把刚转到银行卡的5K又转出到京东小金库。银行卡余额为300.因为那个银行有低额资金管理费,低于300每个月,就会收你手续费(这个是3-4年前的政策,不知道现在改了没有)。
PS:一线城市的宇宙行。
  收起阅读 »

孙志刚之死


当初他们(纳粹)杀共产党,我没有作声,因为我不是共产党;后来他们杀犹太人,我没有作声,因为我不是犹太人;再接下来他们杀天主教徒,我仍然保持沉默,因为我不是天主教徒;最后,当他们开始对付我时,已经没有人为我讲话了”
 
这就是我为什么要转载这篇文字给大家。
 
 ——2003年,孙志刚死于暂住证。这是2003年3月27日的广州,晚上,孙志刚一个人闲来无事,决定出门找个网吧上网。他没有办理暂住证,警察以此为理由将他扣留。3天之后,在一家专门收治收容人员的医院里,孙志刚死了。

一个身板结实的年轻人就这么死了,他死于一张臭名昭著的暂住证。如果孙志刚只是住在自己的家乡,不去广州;或者说他去了广州,但及时办理了暂住证, 想来他应该会好好地活着。可是他没有办理暂住证,为什么要办理这个看上去毫无用处的东西呢?为什么要在自己的祖国暂住呢?太多的人问过这样的问题,这听上 去有一些荒谬,但却是事实,甚至是一种法律的事实,如同当年的美国立法歧视黑人一样。

这就是问题的本质所在。孙志刚事实上死于一种歧视性的恶法,当一部法律竟然是恶劣的、残暴的,那么所有以法律的名义谋生的所谓执法者、执法者豢养的走狗,当然更加恶毒、更加残暴。

任何一个有良知的中国人都需要记住这样的历史:

在中国的许多大中城市,一直都有这样的明文规定:外来务工人员必须办理暂住证,否则视同流浪者。警察有权抓捕这些没有暂住证的人,并把他们遣返原籍 或者关押。而在2003年之前,为了救助流浪汉和乞讨者,中国地方政府设有收容所,目的是为了帮助在城市的无业游民返回家乡。但是,在实行过程中,部分收 容所员工不但不救助弱者,反而对被收容者进行敲诈勒索甚至辱骂殴打。

这一连串的政府行动,都以一部法律为基础,它的名字叫做《城市流浪乞讨人员收容遣送办法》。

这是2003年3月17日晚,大概10点钟刚过,孙志刚的死亡之路正式开始。后来的法院判决书记录下了他的死亡细节:

“孙志刚因未携带任何证件外出,被执行清查任务的广州市天河区公安分局黄村街派出所民警收容送至广州市收容遣送中转站。3月18日晚10时许,因被 害人孙志刚自报有心脏病,广州市收容遣送中转站将孙转送至广州市收容人员救治站治疗,收治在救治站一区201室。3月19日晚,因被害人孙志刚向到救治站 认领被收容救治人员罗某海的亲属大声喊叫求助,引起该救治站护工被告人乔燕琴的不满,被告人乔燕琴遂与同班护工被告人乔志军商量将孙调至一区206室,让 206室内的被收容救治人员教训孙志刚。之后,被告人乔燕琴到206室窗边直接授意206室内的被告人李海婴等人殴打被害人孙志刚。”

“翌日凌晨0时30分许,当被告人乔燕琴、乔志军与护王被告人吕二鹏、胡金艳交接班时,被告人乔燕琴再次向被告人乔志军以及被告人吕二鹏、胡金艳提 出将被害人孙志刚调至206室,让该室的人殴打孙志刚,得到被告人乔志军、吕二鹏、胡金艳的认同。随后,被告人乔燕琴、吕二鹏又分别到206室授意李海婴 等人殴打孙志刚,接着乔燕琴、乔志军、吕二鹏、胡金艳四人共同将被-害人孙志刚从201室调至206室,然后四人回一楼监控室。当天凌晨1时许,206室 的被告人李海婴首先上前殴打被害人孙志刚,接着被告人李文星、周利伟、钟辽国、李龙生、张明君、韦延良也上前以拳打、肘击、脚踩、脚跟砸的方式对孙志刚的 背部等部位进行殴打。其中被告人李海婴采取了拳打脚踢、肘击、膝盖撞击背部的方式殴打孙志刚,还将孙按倒在地,让同案人殴打;被告人钟辽国采取左、右肘 击、将孙志刚推至墙边站立用膝盖撞击等姿势殴打孙志刚;被告人周利伟长时间持续殴打孙志刚;被告人何家红则在旁边望风。被害人孙志刚被打几分钟后,被告人 胡金艳去到206室门口进行了口头制止。约10分钟后,被害人孙志刚向206室内的众被告人下跪求饶,但被告人李海婴又首先冲上前殴打孙志刚,接着被告人 钟辽国、周利伟、张明君、李文星、何家红也上前殴打孙志刚。其中被告人李海婴以肘击,被告人钟辽国、周利伟以肘击、脚踩,被告人张明君以跳上背部踩、脚 踢,被告人何家红以拳打脚踢的方式反复殴打孙志刚。当值班护士曾伟林、被告人胡金艳发现孙志刚再次被殴打后,去到206室制止并将孙志刚调至205室。当 天凌晨2时许,被害人孙志刚向被告人吕二鹏反映情况,被告人吕二鹏持塑胶警棍隔着205室的门对孙的胸腹部连捅数下。当天上午10时许,被害人孙志刚被发 现昏迷不醒,后被送至该站医疗室进行抢救,经抢救无效死亡。后经法医鉴定,被害人孙志刚系因背部遭受钝性暴力反复打击,造成背部大面积软组织损伤致创伤性 休克死亡。”[1]

一个身板结实的年轻人就这么死了,他是被活活打死的。

我们要记住这个叫孙志刚的年轻人,他生于1976,死于2003年,湖北黄冈人,2001年毕业于武汉科技学院艺术系艺术设计专业,2003年2月 24日被广州市达奇服装有限公司雇佣。由于刚来广州,他未办理暂住证。3月17日晚上他出门上网,也没有带身份证。在当晚11点左右,他在路上被查暂住证 的警察送往黄村街派出所。在这里,他打了一个电话给朋友,要求对方把他的身份证明文件送往该派出所。可是当对方到达派出所之后,才发现孙志刚已被转送往收 容站,其收容表格上莫名其妙说其是三无人员,符合收容条件,而事实是,孙志刚有正常住所,有合法工作,有合法的身份证件,并不符合收容条件。[2]

我们要记住孙志刚被打死之后官方起初的说法。他们坚持孙志刚是正常因病死亡,他们不承认孙志刚被殴打致死,事实上是不承认他们的暂住证制度有错,他 们的收容遣送办法有错。他们可能认为,一个孙志刚被打死算不了什么;或者他们认为,如果孙志刚事件被过度放大,会一定程度破坏社会稳定,而稳定是压倒一切 的。但每个熟悉孙志刚的人都知道他向来是一个身材魁梧、生龙活虎的年轻人,人们有理由不相信孙志刚的官方死因。

我们要记住南方都市报的及时介入,记住优秀的记者陈峰、王雷的名字,是他们对孙志刚之死进行了详细的调查,将孙志刚被殴打致死的的消息公布于众,逼 迫官方不得不重新进行调查,最后不得不公布,孙志刚的确是在医院中被人殴打致死的。媒体再一次成为改变历史的主角。让我们记住程益中、喻华峰的名字,这些 中国最优秀的媒体人在孙志刚事件中为我们受难,有人以莫须有的罪名对他们进行报复,程益中从此丢了官阶,而喻华峰则被关进了监狱。[3]

我们要记住乔燕琴、李海樱等等普通得不能再普通的名字。在这个社会中他们甚至比孙志刚更加卑贱,他们同样需要办理暂住证,同样属于被收容的对象,他 们几乎没有接受过起码的教育,个人利益每天都遭受剥夺,可是他们却充当了一部恶法的打手。当他们野蛮殴打孙志刚的时候,他们可能以为自己竟然是法律的代言 人,是法律的执行者,所以才那样肆无忌惮,才那样丧心病狂。事实上,任何一部恶法的本意都是冲着他们而去,可是他们不知道,却有意混迹在这样的恶法之中, 鱼肉别人,恶贯满盈。一旦事迹败露,那些背后指使他们的人迅速销声匿迹,只留下他们做了替死鬼。这样的闹剧让人彻底无语,我们想起了林语堂当年的讽刺: “中国就有这么一群奇怪的人, 本身是最底阶层, 利益每天都在被损害,却具有统治阶级的意识.,在动物世界里找这么弱智的东西都几乎不可能”。[4]

我们要记住,孙志刚死去的消息被更多的人了解,事实上与他的大学生身份有关。在此之前,在不同的城市都发生过收容所员工犯法的案件,没有人引起重 视,那些被伤害、被殴打、被遣送的人们命如草芥,他们的伤痛和死亡仿佛没有发生一样。但是孙志刚不一样,他有学历,有同学,有朋友。他是一名大学生,他的 死去,让成千上万的大学生悲伤,孙志刚的命运几乎就是每个大学生的命运,所以他的死亡才引起极大反响。

我们要记住俞江、腾彪、许志永这三名法学博士的名字。2003年5月14日,他们三个人联名向全国人大常委会递交了审查《城市流浪乞讨人员收容遣送 办法》的建议书,认为收容遣送办法中限制公民人身自由的规定,与中国宪法和有关法律相抵触,应予以改变或撤销。 我们还要记住贺卫方、盛洪、沈岿、萧瀚、何海波5位著名法学家的名字,2003年5月23日,5个人以中国公民的名义,联合上书全国人大常委会,就孙志刚 案及收容遣送制度实施状况提请启动特别调查程序。[5]。

我们要记住2003年6月20日这特别的一天,中华人民共和国国务院总理温家宝签署国务院令,公布《城市生活无着的流浪乞讨人员救助管理办法》,该 办法的公布标志着《城市流浪乞讨人员收容遣送办法》的废止。我们为此高兴,也为此悲伤。为什么一定要等到孙志刚被打死了才废止这样的恶法,而不是提前主动 纠正呢?一部恶法可以就此寿终正寝,用另外一部改良过的法律代替,但孙志刚年轻的生命由谁来代替呢?这真是一个被人推着走的社会,没有重大的恶性事件,没 有汹涌澎湃的怨恨,似乎他们可以永远画地为牢,按部就班,全然不顾时间的流淌和生命的消失。

我们要记住,孙志刚死了,可是暂住证还活着。根据媒体的披露,一些地方政府执法机关针对非本地户籍人口的滥用暴力情况,时有发生。城乡二元结构对立 的状况仍然相当尖锐、公民自由迁徙权时常遭受剥夺、违宪审查机制并没有成为常态。要纠正这些常识性的错误,还需要更长时间的努力。

在孙志刚的墓碑上,有这样两段话:

“逝者已逝,众恶徒已正法,然天下居庙堂者与处江湖者,当以此为鉴,牢记生命之重,人权之重,民主之重,法治之重,无使天下善良百姓,徒为鱼肉。”

“人之死,有轻于鸿毛者,亦有重于泰山者,志刚君生前亦有大志,不想竟以生命之代价,换取恶法之终结,其死虽难言为舍身取义,然于国于民于法,均可比重于泰山。”[6]

我永远记得2003年的春天,孙志刚之死让每个有良知的中国人心疼。一个有梦想、有骨气的年轻人,毫无罪过,就那样被打死了,我记得他父亲的表情, 绝望、痛苦,老泪纵横,许多年之后还让我们半夜惊醒,任恐惧继续把我们包围,任泪水流过我们渐渐苍老的脸。我们不想把孙志刚看成一个英雄,他只是一个生 命,每个生命都是上帝的赐予,每个人的生命都只有一次。无论如何,我们不希望看到“孙志刚之死”再次发生,所以我们要反思,要警醒。孙志刚的悲剧事实上是 每一个中国人的悲剧。一个公民权利得到充分保障的社会,才是一个美好的社会。我们应该像天籁一样的迎风诉说,应该像鸟儿一样自由飞翔,我们心存善意,怀揣 梦想,我们本来就拥有与生俱来的自由,这不是他人的恩赐,是自有,是永有。每个人都是上帝的创造啊,无论是国家元首,还是大街上的流浪汉,在生命面前,一 律平等。
继续阅读 »

当初他们(纳粹)杀共产党,我没有作声,因为我不是共产党;后来他们杀犹太人,我没有作声,因为我不是犹太人;再接下来他们杀天主教徒,我仍然保持沉默,因为我不是天主教徒;最后,当他们开始对付我时,已经没有人为我讲话了”
 
这就是我为什么要转载这篇文字给大家。
 
 ——2003年,孙志刚死于暂住证。这是2003年3月27日的广州,晚上,孙志刚一个人闲来无事,决定出门找个网吧上网。他没有办理暂住证,警察以此为理由将他扣留。3天之后,在一家专门收治收容人员的医院里,孙志刚死了。

一个身板结实的年轻人就这么死了,他死于一张臭名昭著的暂住证。如果孙志刚只是住在自己的家乡,不去广州;或者说他去了广州,但及时办理了暂住证, 想来他应该会好好地活着。可是他没有办理暂住证,为什么要办理这个看上去毫无用处的东西呢?为什么要在自己的祖国暂住呢?太多的人问过这样的问题,这听上 去有一些荒谬,但却是事实,甚至是一种法律的事实,如同当年的美国立法歧视黑人一样。

这就是问题的本质所在。孙志刚事实上死于一种歧视性的恶法,当一部法律竟然是恶劣的、残暴的,那么所有以法律的名义谋生的所谓执法者、执法者豢养的走狗,当然更加恶毒、更加残暴。

任何一个有良知的中国人都需要记住这样的历史:

在中国的许多大中城市,一直都有这样的明文规定:外来务工人员必须办理暂住证,否则视同流浪者。警察有权抓捕这些没有暂住证的人,并把他们遣返原籍 或者关押。而在2003年之前,为了救助流浪汉和乞讨者,中国地方政府设有收容所,目的是为了帮助在城市的无业游民返回家乡。但是,在实行过程中,部分收 容所员工不但不救助弱者,反而对被收容者进行敲诈勒索甚至辱骂殴打。

这一连串的政府行动,都以一部法律为基础,它的名字叫做《城市流浪乞讨人员收容遣送办法》。

这是2003年3月17日晚,大概10点钟刚过,孙志刚的死亡之路正式开始。后来的法院判决书记录下了他的死亡细节:

“孙志刚因未携带任何证件外出,被执行清查任务的广州市天河区公安分局黄村街派出所民警收容送至广州市收容遣送中转站。3月18日晚10时许,因被 害人孙志刚自报有心脏病,广州市收容遣送中转站将孙转送至广州市收容人员救治站治疗,收治在救治站一区201室。3月19日晚,因被害人孙志刚向到救治站 认领被收容救治人员罗某海的亲属大声喊叫求助,引起该救治站护工被告人乔燕琴的不满,被告人乔燕琴遂与同班护工被告人乔志军商量将孙调至一区206室,让 206室内的被收容救治人员教训孙志刚。之后,被告人乔燕琴到206室窗边直接授意206室内的被告人李海婴等人殴打被害人孙志刚。”

“翌日凌晨0时30分许,当被告人乔燕琴、乔志军与护王被告人吕二鹏、胡金艳交接班时,被告人乔燕琴再次向被告人乔志军以及被告人吕二鹏、胡金艳提 出将被害人孙志刚调至206室,让该室的人殴打孙志刚,得到被告人乔志军、吕二鹏、胡金艳的认同。随后,被告人乔燕琴、吕二鹏又分别到206室授意李海婴 等人殴打孙志刚,接着乔燕琴、乔志军、吕二鹏、胡金艳四人共同将被-害人孙志刚从201室调至206室,然后四人回一楼监控室。当天凌晨1时许,206室 的被告人李海婴首先上前殴打被害人孙志刚,接着被告人李文星、周利伟、钟辽国、李龙生、张明君、韦延良也上前以拳打、肘击、脚踩、脚跟砸的方式对孙志刚的 背部等部位进行殴打。其中被告人李海婴采取了拳打脚踢、肘击、膝盖撞击背部的方式殴打孙志刚,还将孙按倒在地,让同案人殴打;被告人钟辽国采取左、右肘 击、将孙志刚推至墙边站立用膝盖撞击等姿势殴打孙志刚;被告人周利伟长时间持续殴打孙志刚;被告人何家红则在旁边望风。被害人孙志刚被打几分钟后,被告人 胡金艳去到206室门口进行了口头制止。约10分钟后,被害人孙志刚向206室内的众被告人下跪求饶,但被告人李海婴又首先冲上前殴打孙志刚,接着被告人 钟辽国、周利伟、张明君、李文星、何家红也上前殴打孙志刚。其中被告人李海婴以肘击,被告人钟辽国、周利伟以肘击、脚踩,被告人张明君以跳上背部踩、脚 踢,被告人何家红以拳打脚踢的方式反复殴打孙志刚。当值班护士曾伟林、被告人胡金艳发现孙志刚再次被殴打后,去到206室制止并将孙志刚调至205室。当 天凌晨2时许,被害人孙志刚向被告人吕二鹏反映情况,被告人吕二鹏持塑胶警棍隔着205室的门对孙的胸腹部连捅数下。当天上午10时许,被害人孙志刚被发 现昏迷不醒,后被送至该站医疗室进行抢救,经抢救无效死亡。后经法医鉴定,被害人孙志刚系因背部遭受钝性暴力反复打击,造成背部大面积软组织损伤致创伤性 休克死亡。”[1]

一个身板结实的年轻人就这么死了,他是被活活打死的。

我们要记住这个叫孙志刚的年轻人,他生于1976,死于2003年,湖北黄冈人,2001年毕业于武汉科技学院艺术系艺术设计专业,2003年2月 24日被广州市达奇服装有限公司雇佣。由于刚来广州,他未办理暂住证。3月17日晚上他出门上网,也没有带身份证。在当晚11点左右,他在路上被查暂住证 的警察送往黄村街派出所。在这里,他打了一个电话给朋友,要求对方把他的身份证明文件送往该派出所。可是当对方到达派出所之后,才发现孙志刚已被转送往收 容站,其收容表格上莫名其妙说其是三无人员,符合收容条件,而事实是,孙志刚有正常住所,有合法工作,有合法的身份证件,并不符合收容条件。[2]

我们要记住孙志刚被打死之后官方起初的说法。他们坚持孙志刚是正常因病死亡,他们不承认孙志刚被殴打致死,事实上是不承认他们的暂住证制度有错,他 们的收容遣送办法有错。他们可能认为,一个孙志刚被打死算不了什么;或者他们认为,如果孙志刚事件被过度放大,会一定程度破坏社会稳定,而稳定是压倒一切 的。但每个熟悉孙志刚的人都知道他向来是一个身材魁梧、生龙活虎的年轻人,人们有理由不相信孙志刚的官方死因。

我们要记住南方都市报的及时介入,记住优秀的记者陈峰、王雷的名字,是他们对孙志刚之死进行了详细的调查,将孙志刚被殴打致死的的消息公布于众,逼 迫官方不得不重新进行调查,最后不得不公布,孙志刚的确是在医院中被人殴打致死的。媒体再一次成为改变历史的主角。让我们记住程益中、喻华峰的名字,这些 中国最优秀的媒体人在孙志刚事件中为我们受难,有人以莫须有的罪名对他们进行报复,程益中从此丢了官阶,而喻华峰则被关进了监狱。[3]

我们要记住乔燕琴、李海樱等等普通得不能再普通的名字。在这个社会中他们甚至比孙志刚更加卑贱,他们同样需要办理暂住证,同样属于被收容的对象,他 们几乎没有接受过起码的教育,个人利益每天都遭受剥夺,可是他们却充当了一部恶法的打手。当他们野蛮殴打孙志刚的时候,他们可能以为自己竟然是法律的代言 人,是法律的执行者,所以才那样肆无忌惮,才那样丧心病狂。事实上,任何一部恶法的本意都是冲着他们而去,可是他们不知道,却有意混迹在这样的恶法之中, 鱼肉别人,恶贯满盈。一旦事迹败露,那些背后指使他们的人迅速销声匿迹,只留下他们做了替死鬼。这样的闹剧让人彻底无语,我们想起了林语堂当年的讽刺: “中国就有这么一群奇怪的人, 本身是最底阶层, 利益每天都在被损害,却具有统治阶级的意识.,在动物世界里找这么弱智的东西都几乎不可能”。[4]

我们要记住,孙志刚死去的消息被更多的人了解,事实上与他的大学生身份有关。在此之前,在不同的城市都发生过收容所员工犯法的案件,没有人引起重 视,那些被伤害、被殴打、被遣送的人们命如草芥,他们的伤痛和死亡仿佛没有发生一样。但是孙志刚不一样,他有学历,有同学,有朋友。他是一名大学生,他的 死去,让成千上万的大学生悲伤,孙志刚的命运几乎就是每个大学生的命运,所以他的死亡才引起极大反响。

我们要记住俞江、腾彪、许志永这三名法学博士的名字。2003年5月14日,他们三个人联名向全国人大常委会递交了审查《城市流浪乞讨人员收容遣送 办法》的建议书,认为收容遣送办法中限制公民人身自由的规定,与中国宪法和有关法律相抵触,应予以改变或撤销。 我们还要记住贺卫方、盛洪、沈岿、萧瀚、何海波5位著名法学家的名字,2003年5月23日,5个人以中国公民的名义,联合上书全国人大常委会,就孙志刚 案及收容遣送制度实施状况提请启动特别调查程序。[5]。

我们要记住2003年6月20日这特别的一天,中华人民共和国国务院总理温家宝签署国务院令,公布《城市生活无着的流浪乞讨人员救助管理办法》,该 办法的公布标志着《城市流浪乞讨人员收容遣送办法》的废止。我们为此高兴,也为此悲伤。为什么一定要等到孙志刚被打死了才废止这样的恶法,而不是提前主动 纠正呢?一部恶法可以就此寿终正寝,用另外一部改良过的法律代替,但孙志刚年轻的生命由谁来代替呢?这真是一个被人推着走的社会,没有重大的恶性事件,没 有汹涌澎湃的怨恨,似乎他们可以永远画地为牢,按部就班,全然不顾时间的流淌和生命的消失。

我们要记住,孙志刚死了,可是暂住证还活着。根据媒体的披露,一些地方政府执法机关针对非本地户籍人口的滥用暴力情况,时有发生。城乡二元结构对立 的状况仍然相当尖锐、公民自由迁徙权时常遭受剥夺、违宪审查机制并没有成为常态。要纠正这些常识性的错误,还需要更长时间的努力。

在孙志刚的墓碑上,有这样两段话:

“逝者已逝,众恶徒已正法,然天下居庙堂者与处江湖者,当以此为鉴,牢记生命之重,人权之重,民主之重,法治之重,无使天下善良百姓,徒为鱼肉。”

“人之死,有轻于鸿毛者,亦有重于泰山者,志刚君生前亦有大志,不想竟以生命之代价,换取恶法之终结,其死虽难言为舍身取义,然于国于民于法,均可比重于泰山。”[6]

我永远记得2003年的春天,孙志刚之死让每个有良知的中国人心疼。一个有梦想、有骨气的年轻人,毫无罪过,就那样被打死了,我记得他父亲的表情, 绝望、痛苦,老泪纵横,许多年之后还让我们半夜惊醒,任恐惧继续把我们包围,任泪水流过我们渐渐苍老的脸。我们不想把孙志刚看成一个英雄,他只是一个生 命,每个生命都是上帝的赐予,每个人的生命都只有一次。无论如何,我们不希望看到“孙志刚之死”再次发生,所以我们要反思,要警醒。孙志刚的悲剧事实上是 每一个中国人的悲剧。一个公民权利得到充分保障的社会,才是一个美好的社会。我们应该像天籁一样的迎风诉说,应该像鸟儿一样自由飞翔,我们心存善意,怀揣 梦想,我们本来就拥有与生俱来的自由,这不是他人的恩赐,是自有,是永有。每个人都是上帝的创造啊,无论是国家元首,还是大街上的流浪汉,在生命面前,一 律平等。 收起阅读 »

【量化选股】A股上有哪些东北股(排雷)?

上一篇文章中写道,东北企业由于本地特色,会存在一定的造假风险,所以需要在选股的时候排除东北的A股上市企业。
 
打开jupyter notebook。然后输入下面的代码:

area.GIF

 
上面可以获得A股上市公司所有区域的分布。果然刘士余上台后,浙江地区的企业一下子超越广东,成为A股最多公司的省份(当然,这里的广东是把深圳给单独分离出去了),浙江有418个上市公司。
 
然后根据条件筛选列area,选出辽宁,吉林,黑龙江的企业。

area1.GIF

共有152家上市公司。截止2018-01-30日。
列表太长没有显示完整,贴在附件里面供大家参考(排雷)。
 
原文地址:http://30daydo.com/article/271
转载请注明出处
继续阅读 »
上一篇文章中写道,东北企业由于本地特色,会存在一定的造假风险,所以需要在选股的时候排除东北的A股上市企业。
 
打开jupyter notebook。然后输入下面的代码:

area.GIF

 
上面可以获得A股上市公司所有区域的分布。果然刘士余上台后,浙江地区的企业一下子超越广东,成为A股最多公司的省份(当然,这里的广东是把深圳给单独分离出去了),浙江有418个上市公司。
 
然后根据条件筛选列area,选出辽宁,吉林,黑龙江的企业。

area1.GIF

共有152家上市公司。截止2018-01-30日。
列表太长没有显示完整,贴在附件里面供大家参考(排雷)。
 
原文地址:http://30daydo.com/article/271
转载请注明出处 收起阅读 »

今天股市市场雷声不断呀。以后选股因子中要直接把东北股给排除掉

今晚喜闻乐见的段子贝因美:亏10个亿,服不服?
海润:不服,我三倍……
乐视:不服,我加个零...
保千里:亏的数都数不清
獐子岛:哦,我扇贝又跑了
盐湖股份:我计提30亿资产减值~
湖北宜化:我计提22亿资产减值,还剩10几亿净资产~
石化油服:净资产负50亿了,三年亏完,厉害不?
巴士在线:嘿嘿,我老板不见了
 
又见獐子岛,同样的套路还能玩2次,服了东北人。 还有神雾节能和神雾环保,财务作假,伪白马。
前阵子是大连电瓷,庄家就是老板儿子,操控600多个证券账户买买买。
抚顺特钢,前几年的财报有问题,停牌重新审核。。。。
 
我去。。。。。
 
以后在地区筛选上隔离东北板块。
继续阅读 »
今晚喜闻乐见的段子贝因美:亏10个亿,服不服?
海润:不服,我三倍……
乐视:不服,我加个零...
保千里:亏的数都数不清
獐子岛:哦,我扇贝又跑了
盐湖股份:我计提30亿资产减值~
湖北宜化:我计提22亿资产减值,还剩10几亿净资产~
石化油服:净资产负50亿了,三年亏完,厉害不?
巴士在线:嘿嘿,我老板不见了
 
又见獐子岛,同样的套路还能玩2次,服了东北人。 还有神雾节能和神雾环保,财务作假,伪白马。
前阵子是大连电瓷,庄家就是老板儿子,操控600多个证券账户买买买。
抚顺特钢,前几年的财报有问题,停牌重新审核。。。。
 
我去。。。。。
 
以后在地区筛选上隔离东北板块。 收起阅读 »

Message: invalid selector: Compound class names not permitted

使用selenium的时候如果使用了
driver.find_element_by_class_name("content")
使用class名字来查找元素的话,就会出现
Message: invalid selector: Compound class names not permitted
这个错误。
 
比如京东的登录页面中:
<div id="content">
<div class="login-wrap">
<div class="w">
<div class="login-form">
<div class="login-tab login-tab-l">
<a href="javascript:void(0)" clstag="pageclick|keycount|201607144|1"> 扫码登录</a>
</div>
<div class="login-tab login-tab-r">
<a href="javascript:void(0)" clstag="pageclick|keycount|201607144|2">账户登录</a>
</div>
<div class="login-box">
<div class="mt tab-h">
</div>
<div class="msg-wrap">
<div class="msg-error hide"><b></b></div>
</div>

我要找的是<div class="login-tab login-tab-l">
 
那么应该使用css选择器:

browser.find_element_by_css_selector('div.login-tab.login-tab-r')
 
继续阅读 »
使用selenium的时候如果使用了
driver.find_element_by_class_name("content")
使用class名字来查找元素的话,就会出现
Message: invalid selector: Compound class names not permitted
这个错误。
 
比如京东的登录页面中:
<div id="content">
<div class="login-wrap">
<div class="w">
<div class="login-form">
<div class="login-tab login-tab-l">
<a href="javascript:void(0)" clstag="pageclick|keycount|201607144|1"> 扫码登录</a>
</div>
<div class="login-tab login-tab-r">
<a href="javascript:void(0)" clstag="pageclick|keycount|201607144|2">账户登录</a>
</div>
<div class="login-box">
<div class="mt tab-h">
</div>
<div class="msg-wrap">
<div class="msg-error hide"><b></b></div>
</div>

我要找的是<div class="login-tab login-tab-l">
 
那么应该使用css选择器:

browser.find_element_by_css_selector('div.login-tab.login-tab-r')
  收起阅读 »

Pycharm控制台窗口怎样可以显示不同程序的运行结果

默认情况下,每次运行会把之前的那个结果给清理掉。 有时候运行多个程序像对比结果,不太方便。
可以在pycharm的控制台那里点击右键,在弹出的菜单中,选择“Pin Tab”,那么当前的控制台就不会被清掉啦,它可以一直保留着,自带你自己手动去关闭它。
默认情况下,每次运行会把之前的那个结果给清理掉。 有时候运行多个程序像对比结果,不太方便。
可以在pycharm的控制台那里点击右键,在弹出的菜单中,选择“Pin Tab”,那么当前的控制台就不会被清掉啦,它可以一直保留着,自带你自己手动去关闭它。

【量化分析】到底谁在买乐视网?2018年1月26日

这是乐视复牌的第三天,连续3个跌停。

letv.png

 
本来没有持有这一只股票,不过雪球上不时地出现一些文章,根据龙虎榜推测到底谁在接盘。 于是今天收盘,打开jupyter notebook来简单地分析一下。 大家也可以跟着学习一些分析的思路。因为今天的龙虎榜还没出来,等待会龙虎榜出来了可以再比较一下。
 
首先导入今天的分时数据

df.png

 
volume列就是我们感兴趣的成交量。单位是手(100股)
 
先计算一下今天的总成交量:

Snap3.png


1021800股,额,比不少中小创的小股的成交量还大呢,瘦死的骆驼比马大。
 
去对比一下雪球或者东财的数据,看看数据是否准确。


Snap4.png

 
嗯,1.02万手,数据一致。
 
接着我们来看看排序,按照成交量的大小排序,可以看到最大和最小的差别:

Snap5.png

 
大单都集中在开盘和收盘阶段(其实开盘和收盘严格来说不算大单,因为同一时刻太多人一起买,所以掺杂在一起,如果把收盘和开盘的数据拿掉,其实真的没多少大单。。。)
 
Snap6.png

 
然后剩下的都是些零零散散的1手的成交:

可以统计一下每个单数出现的频率:

Snap7.png

 
出现最多的是1手,2手。这个很正常,如果出现较多的是超过100手的大单,那么也说明跌停很快被打开(后续如果有打算冒风险去撸一把乐视翘班的,可以自己写一个检测程序)
 
接着做一些统计:
定义大于100手的为大单。
然后计算100手大单占成交的比例:

Snap8.png

 
嗯,有28%的比例呢。
 
然后计算一下小于10手的占成交比例。

Snap9.png

有30%的比例。
 
再统计一下中位数和各分位数:

Snap11.png

 
中位数是3,说明整个交易中,一半的成交是在等于或小于3手的,而分位数看到,1手的可以排到25%的位置,而8手则排到了75%的位置。
 
结论:
其实在买的都是小散,不知道是乐粉还是赌徒了。
原文地址:
http://30daydo.com/article/267
源码:https://github.com/Rockyzsu/stock/blob/master/levt_notebook.ipynb
 
继续阅读 »
这是乐视复牌的第三天,连续3个跌停。

letv.png

 
本来没有持有这一只股票,不过雪球上不时地出现一些文章,根据龙虎榜推测到底谁在接盘。 于是今天收盘,打开jupyter notebook来简单地分析一下。 大家也可以跟着学习一些分析的思路。因为今天的龙虎榜还没出来,等待会龙虎榜出来了可以再比较一下。
 
首先导入今天的分时数据

df.png

 
volume列就是我们感兴趣的成交量。单位是手(100股)
 
先计算一下今天的总成交量:

Snap3.png


1021800股,额,比不少中小创的小股的成交量还大呢,瘦死的骆驼比马大。
 
去对比一下雪球或者东财的数据,看看数据是否准确。


Snap4.png

 
嗯,1.02万手,数据一致。
 
接着我们来看看排序,按照成交量的大小排序,可以看到最大和最小的差别:

Snap5.png

 
大单都集中在开盘和收盘阶段(其实开盘和收盘严格来说不算大单,因为同一时刻太多人一起买,所以掺杂在一起,如果把收盘和开盘的数据拿掉,其实真的没多少大单。。。)
 
Snap6.png

 
然后剩下的都是些零零散散的1手的成交:

可以统计一下每个单数出现的频率:

Snap7.png

 
出现最多的是1手,2手。这个很正常,如果出现较多的是超过100手的大单,那么也说明跌停很快被打开(后续如果有打算冒风险去撸一把乐视翘班的,可以自己写一个检测程序)
 
接着做一些统计:
定义大于100手的为大单。
然后计算100手大单占成交的比例:

Snap8.png

 
嗯,有28%的比例呢。
 
然后计算一下小于10手的占成交比例。

Snap9.png

有30%的比例。
 
再统计一下中位数和各分位数:

Snap11.png

 
中位数是3,说明整个交易中,一半的成交是在等于或小于3手的,而分位数看到,1手的可以排到25%的位置,而8手则排到了75%的位置。
 
结论:
其实在买的都是小散,不知道是乐粉还是赌徒了。
原文地址:
http://30daydo.com/article/267
源码:https://github.com/Rockyzsu/stock/blob/master/levt_notebook.ipynb
  收起阅读 »

coinegg上哪些虚拟币不能碰

通过上一篇文章: 10分钟发行虚拟币 ,那些tokens发行的币最好不要去碰。 tokens的币可以到这里取找:https://coinmarketcap.com/tokens/views/all/
 
那么coinegg中哪些币是用了tokens发行的呢? 把两个网站的币都爬下来,然后做个交集就可以了。
 
#-*-coding=utf-8-*-
import requests,datetime
from lxml import etree
import pandas as pd
from sqlalchemy import create_engine
import random,time

user_agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36'
headers={'User-Agent':user_agent}

def getWebContent(url):
# url=url.format(kind)
r=requests.get(url,headers=headers)

if r.status_code==200:
return r.text
else:
return None

def getCoinList():
content=getWebContent(url='https://coinmarketcap.com/tokens/views/all/'
)
tree=etree.HTML(content)
# table=tree.xpath()
# if not table:
# reutrn None
df=pd.DataFrame()

# for coin in table:
df['currency-symbol']=tree.xpath('//tbody/tr//span[@class="currency-symbol"]/a/text()')
df['currency-name']=tree.xpath('//tbody/tr//a[@class="currency-name-container"]/text()')
df['platformsymbol']=tree.xpath('//tbody/tr/@data-platformsymbol')
df['platform-name']=tree.xpath('//tbody/tr//td[@class="no-wrap platform-name"]/a/text()')

df['price(->bct)']=tree.xpath('//tbody/tr//td[@class="no-wrap text-right"]/a/@data-btc')
df['datetime']=datetime.datetime.now()
return df

def getBtcPrice():
btc_p_url='https://www.coinegg.com/index/pricebtc'
try:
r=requests.get(url=btc_p_url,headers=headers)
except Exception,e:
print e
return None

return r.json().get('data').get('cny')


def coinegg_coins():
url='https://www.coinegg.com/coin/btc/allcoin?t={}'.format(random.random())
print url
retry=3
for _ in range(retry):
text=getWebContent(url)
if not text:
continue
time.sleep(random.random())

if not text:
print 'failed to get web content'
return None

return map(lambda x:x.upper(),eval(text).keys())

def find_fake():
df=getCoinList()
coinegglist=set(coinegg_coins())
# print coinegglist
fakecoin=set(df['currency-symbol'].values)
print coinegglist & fakecoin
def main():
# datastore()
# print getBtcPrice()
# coinegg_coins()
find_fake()

if __name__ == '__main__':
main()

 
运行后,得到的结果是:
['TSL', 'QBT', 'AIDOC', 'EOS', 'TRX', 'PLC', 'INK', 'WIC']
所以就应该远离上面的那8种币。(君子不立于危墙,虽然都是投机,但最好都是要选择概率天平倾向于自己的那一边)
继续阅读 »
通过上一篇文章: 10分钟发行虚拟币 ,那些tokens发行的币最好不要去碰。 tokens的币可以到这里取找:https://coinmarketcap.com/tokens/views/all/
 
那么coinegg中哪些币是用了tokens发行的呢? 把两个网站的币都爬下来,然后做个交集就可以了。
 
#-*-coding=utf-8-*-
import requests,datetime
from lxml import etree
import pandas as pd
from sqlalchemy import create_engine
import random,time

user_agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.120 Chrome/37.0.2062.120 Safari/537.36'
headers={'User-Agent':user_agent}

def getWebContent(url):
# url=url.format(kind)
r=requests.get(url,headers=headers)

if r.status_code==200:
return r.text
else:
return None

def getCoinList():
content=getWebContent(url='https://coinmarketcap.com/tokens/views/all/'
)
tree=etree.HTML(content)
# table=tree.xpath()
# if not table:
# reutrn None
df=pd.DataFrame()

# for coin in table:
df['currency-symbol']=tree.xpath('//tbody/tr//span[@class="currency-symbol"]/a/text()')
df['currency-name']=tree.xpath('//tbody/tr//a[@class="currency-name-container"]/text()')
df['platformsymbol']=tree.xpath('//tbody/tr/@data-platformsymbol')
df['platform-name']=tree.xpath('//tbody/tr//td[@class="no-wrap platform-name"]/a/text()')

df['price(->bct)']=tree.xpath('//tbody/tr//td[@class="no-wrap text-right"]/a/@data-btc')
df['datetime']=datetime.datetime.now()
return df

def getBtcPrice():
btc_p_url='https://www.coinegg.com/index/pricebtc'
try:
r=requests.get(url=btc_p_url,headers=headers)
except Exception,e:
print e
return None

return r.json().get('data').get('cny')


def coinegg_coins():
url='https://www.coinegg.com/coin/btc/allcoin?t={}'.format(random.random())
print url
retry=3
for _ in range(retry):
text=getWebContent(url)
if not text:
continue
time.sleep(random.random())

if not text:
print 'failed to get web content'
return None

return map(lambda x:x.upper(),eval(text).keys())

def find_fake():
df=getCoinList()
coinegglist=set(coinegg_coins())
# print coinegglist
fakecoin=set(df['currency-symbol'].values)
print coinegglist & fakecoin
def main():
# datastore()
# print getBtcPrice()
# coinegg_coins()
find_fake()

if __name__ == '__main__':
main()

 
运行后,得到的结果是:
['TSL', 'QBT', 'AIDOC', 'EOS', 'TRX', 'PLC', 'INK', 'WIC']
所以就应该远离上面的那8种币。(君子不立于危墙,虽然都是投机,但最好都是要选择概率天平倾向于自己的那一边) 收起阅读 »

10分钟发行虚拟币

刘易杰
3 天前
 
我本来是不想写这个的,昨天看了曹政的文章《不要试图挑战人性》,感触挺深的,曹大说他2018绝不碰ICO,我恰恰相反,不但要碰我还要带你们一起碰。ICO现在简直是太火了,我平均每星期收到1-2篇whitepaper,绝大多数,可以说是100%都是忽悠人的,我不当韭菜也会有别人被收割,莫不如我今天就给你们指条路——干嘛参与别人的ICO啊?你可以自己搞啊!

废话不说,首先去以太坊下载一个钱包。Ethereum Project

下载完了安装,你的界面应该是这样的:





官方的这个钱包bug非常多!经常打不开,而且和网络sync区块链的时候经常会有各种各样的问题……不过,如果你能侥幸安装成功并且同步成功。

恭喜你,你已经成功克服了你ICO道路上最大的技术难关,胜利在望,会所嫩模在向你招手!





好,打开钱包,界面应该是下面这样:


看到右上角那个“CONTRACTS"按钮了吗?轻轻点一下:


再点这个Deploy New Contract:


然后,打开这个网站:Create a cryptocurrency contract in Ethereum

不懂英文?没问题

看不懂代码?无所谓


看到THE CODE了吗?

把下面的代码copy下来,然后粘贴到你的以太坊钱包里,再右边下来菜单里面选那个Token ERC 20 ,你会看到的界面大概是这个样子:

这个时候系统会让你输入三个参数:

Initial Supply:你要发行多少个币呢? 我填了2100万个,致敬比特币嘛!

Token Name:咱发行的币叫什么名字呢?我本来想叫刘易杰币……后来一想这太不中本聪了……不忘初衷,ICO骗钱为的就是会所嫩模,就叫嫩模币吧!

Token synbol:就是币的符号,比如比特币是BTC,以太坊是ETH,咱们嫩模币当然是NMB了!


然后下面有个蓝色的deploy,点了这个deploy,嫩模币就正式发布了————这里有个条件,就是钱包里要有少量的ETH,作为执行合约的Gas,大概是0.00几个ETH就够了,也就几美元到几十美元的事儿。


好了。

完成了。

如果你完成了如上所说的步骤的话,那么你成功的在这个世界上,基于以太坊网络,创造了一种新的加密货币————如果这破玩意儿能称为加密货币的话……


我大概解释一下啊这玩意儿是啥:以太坊网络和只能合约,支持一个use case就是用户可以通过以太坊来发行自己的"Token", Token是什么呢?
你可以理解为现实生活当中的“积分”,对,比如加油站洗车店会员卡积分,
楼下发廊Tony老师让你办的冲2000送1000的美发会员卡,奶茶点送你的盖满10个张送一杯的集戳卡,幼儿园老师给小朋友的小红花……



这一切的一切,都是可以在以太坊用很简单的只能合约代码搞成一个"token",然后Token可以通过以太坊网络转账, 转账的时候消耗少量的以太坊ETH做Gas。Token也不需要钱包——使用以太坊钱包就好,钱包地址也是以太坊的地址,钱包秘钥也是以太坊的秘钥,区块链用的就是以太坊的区块链……

说了这么多,就是想让你明白,Token这破玩意儿如此简单,发行如此容易,没有成本,完全是基于以太坊网络,没有任何自己的底层技术,基本上20分钟就能搞出来一个,供应量随便填。


我要说的是:现在有好多所谓的ICO,就是把这Token拿来当币卖……


如上所说创造出来的Token,跟比特币,以太坊,瑞波这些真的“加密货币"完全不是一个东西——我不是要给比特币以太坊这些数字货币站台——我一开始以为,要搞ICO,起码要像比特币那种,自己有区块链,有底层技术,分布账本,钱包,nodes都自己实现吧——虽然这也不是什么难事儿,毕竟都是开源的,但起码这还是有一定成本和壁垒的,结果,这帮骗钱骗疯了的,连这都不搞,直接像我上面发布嫩模币那样,利用小白韭菜们的无知,把Token拿来当成币卖……


打开 All Tokens | CoinMarketCap看看哪些你以为和比特币,以太坊一样的加密货币,其实是和嫩模币NMB一样的Token呢?

有没有很眼熟啊?有没有很心慌啊?你看Platform,就是平台,多数都是以太坊平台,估值……50多亿美金?80多亿美金?

你们觉得嫩模币NMB估值应该多少啊?这么搞下去会不会币太多了,嫩模都不够用了啊……

好,现在币有了,接下来就是ICO难度最大的部分了:


写白皮书啊!

有没有发现现在白皮书天马星空,包罗万象,无所不能?为啥?本质上这玩意儿就是”积分“,能用的上”积分“的地方都能给套进去啊!机械制造,生物制药,航天科技,基因工程,物流运输,文化创作,阴阳五行,一带一路……反正你想怎么写怎么写,这部分就非常考验ICO团队的吹牛逼功力,白皮书写的不好,给观众的想象空间不够,基本可以判断,这个团队平时缺乏诈骗经验……


有了币,有了白皮书,就可以拿去忽悠人了,基本上就是说ICO前期,让对方给你打以太坊ETH,然后你给他发你的嫩模币NMB……他给你以太坊,你给他嫩模币,他给你ETH,你给他NMB……他的以太坊得是1000美金一个真金白银买的,你的NMB可是上面随手填出来的。过不过瘾?爽不爽?


这玩意儿,薄利多销,骗到50算50,骗到100算100,团队别露脸,白皮书上不写名,写名也别写自己名,找两个外国人做adviser,反正韭菜们也不会去验证。核心团队叫基金会,比如咱们负责操作嫩模币的基金会,可以起名叫NMB FOUNDATION。收到ETH直接变现分钱走人,或者另起炉灶,NMB ICO成功完成了,再搞下一个呗,市场需要细分,嫩模有的丑有的俏,针对丑嫩模搞一个丑嫩模币CNMB,俏嫩模的叫QNMB,或者叫嫩模2.0币NM2B,听上去就有互联网时代感……


区块链确实是个好技术,有很多潜力和空间,但究竟有没有好到颠覆世界,有没有好到随便发个tokn就能值十亿八亿的美金,有没有好到能让人打着”区块链“,”智能合约“,”加密货币“的幌子搞诈骗和非法集资能逃脱法律责任,有没有好到能让你买一个Token就赚个几百几千倍。大家自己判断。


*上面说的NMB合约我没deploy,所以你们不用找我要NMB了,不给你们。

**可以把这篇文章转给身边哪些被ICO忽悠的人,或者下次有人拿白皮书来忽悠你,你可以反杀他:你那个币不行,还是来投我的NMB吧!
 
【手把手教程】空投币怎么领取,以ShiBZilla为例
 
腾讯云 centos 门罗币 XMR 挖矿 教程 附代码
继续阅读 »
刘易杰
3 天前
 
我本来是不想写这个的,昨天看了曹政的文章《不要试图挑战人性》,感触挺深的,曹大说他2018绝不碰ICO,我恰恰相反,不但要碰我还要带你们一起碰。ICO现在简直是太火了,我平均每星期收到1-2篇whitepaper,绝大多数,可以说是100%都是忽悠人的,我不当韭菜也会有别人被收割,莫不如我今天就给你们指条路——干嘛参与别人的ICO啊?你可以自己搞啊!

废话不说,首先去以太坊下载一个钱包。Ethereum Project

下载完了安装,你的界面应该是这样的:





官方的这个钱包bug非常多!经常打不开,而且和网络sync区块链的时候经常会有各种各样的问题……不过,如果你能侥幸安装成功并且同步成功。

恭喜你,你已经成功克服了你ICO道路上最大的技术难关,胜利在望,会所嫩模在向你招手!





好,打开钱包,界面应该是下面这样:


看到右上角那个“CONTRACTS"按钮了吗?轻轻点一下:


再点这个Deploy New Contract:


然后,打开这个网站:Create a cryptocurrency contract in Ethereum

不懂英文?没问题

看不懂代码?无所谓


看到THE CODE了吗?

把下面的代码copy下来,然后粘贴到你的以太坊钱包里,再右边下来菜单里面选那个Token ERC 20 ,你会看到的界面大概是这个样子:

这个时候系统会让你输入三个参数:

Initial Supply:你要发行多少个币呢? 我填了2100万个,致敬比特币嘛!

Token Name:咱发行的币叫什么名字呢?我本来想叫刘易杰币……后来一想这太不中本聪了……不忘初衷,ICO骗钱为的就是会所嫩模,就叫嫩模币吧!

Token synbol:就是币的符号,比如比特币是BTC,以太坊是ETH,咱们嫩模币当然是NMB了!


然后下面有个蓝色的deploy,点了这个deploy,嫩模币就正式发布了————这里有个条件,就是钱包里要有少量的ETH,作为执行合约的Gas,大概是0.00几个ETH就够了,也就几美元到几十美元的事儿。


好了。

完成了。

如果你完成了如上所说的步骤的话,那么你成功的在这个世界上,基于以太坊网络,创造了一种新的加密货币————如果这破玩意儿能称为加密货币的话……


我大概解释一下啊这玩意儿是啥:以太坊网络和只能合约,支持一个use case就是用户可以通过以太坊来发行自己的"Token", Token是什么呢?
你可以理解为现实生活当中的“积分”,对,比如加油站洗车店会员卡积分,
楼下发廊Tony老师让你办的冲2000送1000的美发会员卡,奶茶点送你的盖满10个张送一杯的集戳卡,幼儿园老师给小朋友的小红花……



这一切的一切,都是可以在以太坊用很简单的只能合约代码搞成一个"token",然后Token可以通过以太坊网络转账, 转账的时候消耗少量的以太坊ETH做Gas。Token也不需要钱包——使用以太坊钱包就好,钱包地址也是以太坊的地址,钱包秘钥也是以太坊的秘钥,区块链用的就是以太坊的区块链……

说了这么多,就是想让你明白,Token这破玩意儿如此简单,发行如此容易,没有成本,完全是基于以太坊网络,没有任何自己的底层技术,基本上20分钟就能搞出来一个,供应量随便填。


我要说的是:现在有好多所谓的ICO,就是把这Token拿来当币卖……


如上所说创造出来的Token,跟比特币,以太坊,瑞波这些真的“加密货币"完全不是一个东西——我不是要给比特币以太坊这些数字货币站台——我一开始以为,要搞ICO,起码要像比特币那种,自己有区块链,有底层技术,分布账本,钱包,nodes都自己实现吧——虽然这也不是什么难事儿,毕竟都是开源的,但起码这还是有一定成本和壁垒的,结果,这帮骗钱骗疯了的,连这都不搞,直接像我上面发布嫩模币那样,利用小白韭菜们的无知,把Token拿来当成币卖……


打开 All Tokens | CoinMarketCap看看哪些你以为和比特币,以太坊一样的加密货币,其实是和嫩模币NMB一样的Token呢?

有没有很眼熟啊?有没有很心慌啊?你看Platform,就是平台,多数都是以太坊平台,估值……50多亿美金?80多亿美金?

你们觉得嫩模币NMB估值应该多少啊?这么搞下去会不会币太多了,嫩模都不够用了啊……

好,现在币有了,接下来就是ICO难度最大的部分了:


写白皮书啊!

有没有发现现在白皮书天马星空,包罗万象,无所不能?为啥?本质上这玩意儿就是”积分“,能用的上”积分“的地方都能给套进去啊!机械制造,生物制药,航天科技,基因工程,物流运输,文化创作,阴阳五行,一带一路……反正你想怎么写怎么写,这部分就非常考验ICO团队的吹牛逼功力,白皮书写的不好,给观众的想象空间不够,基本可以判断,这个团队平时缺乏诈骗经验……


有了币,有了白皮书,就可以拿去忽悠人了,基本上就是说ICO前期,让对方给你打以太坊ETH,然后你给他发你的嫩模币NMB……他给你以太坊,你给他嫩模币,他给你ETH,你给他NMB……他的以太坊得是1000美金一个真金白银买的,你的NMB可是上面随手填出来的。过不过瘾?爽不爽?


这玩意儿,薄利多销,骗到50算50,骗到100算100,团队别露脸,白皮书上不写名,写名也别写自己名,找两个外国人做adviser,反正韭菜们也不会去验证。核心团队叫基金会,比如咱们负责操作嫩模币的基金会,可以起名叫NMB FOUNDATION。收到ETH直接变现分钱走人,或者另起炉灶,NMB ICO成功完成了,再搞下一个呗,市场需要细分,嫩模有的丑有的俏,针对丑嫩模搞一个丑嫩模币CNMB,俏嫩模的叫QNMB,或者叫嫩模2.0币NM2B,听上去就有互联网时代感……


区块链确实是个好技术,有很多潜力和空间,但究竟有没有好到颠覆世界,有没有好到随便发个tokn就能值十亿八亿的美金,有没有好到能让人打着”区块链“,”智能合约“,”加密货币“的幌子搞诈骗和非法集资能逃脱法律责任,有没有好到能让你买一个Token就赚个几百几千倍。大家自己判断。


*上面说的NMB合约我没deploy,所以你们不用找我要NMB了,不给你们。

**可以把这篇文章转给身边哪些被ICO忽悠的人,或者下次有人拿白皮书来忽悠你,你可以反杀他:你那个币不行,还是来投我的NMB吧!
 
【手把手教程】空投币怎么领取,以ShiBZilla为例
 
腾讯云 centos 门罗币 XMR 挖矿 教程 附代码 收起阅读 »

python模拟登录vexx.pro 获取你的总资产/币值和其他个人信息

因为每次登录vexx.pro,第一次输入正常的验证码都会说你是错误的,搞得每次都要输入2次验证码,所以为了节省点时间,就写了个模拟登录来自动获取自己的账户信息的python程序。
 
snipaste_20180110_031813.png
# -*-coding=utf-8-*-

import requests
session = requests.Session()
user = ''
password = ''

def getCode():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
url = 'http://vexx.pro/verify/code.html'
s = session.get(url=url, headers=headers)

with open('code.png', 'wb') as f:
f.write(s.content)

code = raw_input('input the code: ')
print 'code is ', code

login_url = 'http://vexx.pro/login/up_login.html'
post_data = {
'moble': user,
'mobles': '+86',
'password': password,
'verify': code,
'login_token': ''}

login_s = session.post(url=login_url, headers=header, data=post_data)
print login_s.status_code

zzc_url = 'http://vexx.pro/ajax/check_zzc/'
zzc_s = session.get(url=zzc_url, headers=headers)
print zzc_s.text

def main():
getCode()

if __name__ == '__main__':
main()



把自己的用户名和密码填上去,中途输入一次验证码。
可以把session保存到本地,然后下一次就可以不用再输入密码。 
 
后记: 经过几个月后,这个网站被证实是一个圈钱跑路的网站,目前已经无法正常登陆了。希望大家不要再上当了
原创地址:http://30daydo.com/article/263
转载请注明出处。
继续阅读 »
因为每次登录vexx.pro,第一次输入正常的验证码都会说你是错误的,搞得每次都要输入2次验证码,所以为了节省点时间,就写了个模拟登录来自动获取自己的账户信息的python程序。
 
snipaste_20180110_031813.png
# -*-coding=utf-8-*-

import requests
session = requests.Session()
user = ''
password = ''

def getCode():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
url = 'http://vexx.pro/verify/code.html'
s = session.get(url=url, headers=headers)

with open('code.png', 'wb') as f:
f.write(s.content)

code = raw_input('input the code: ')
print 'code is ', code

login_url = 'http://vexx.pro/login/up_login.html'
post_data = {
'moble': user,
'mobles': '+86',
'password': password,
'verify': code,
'login_token': ''}

login_s = session.post(url=login_url, headers=header, data=post_data)
print login_s.status_code

zzc_url = 'http://vexx.pro/ajax/check_zzc/'
zzc_s = session.get(url=zzc_url, headers=headers)
print zzc_s.text

def main():
getCode()

if __name__ == '__main__':
main()



把自己的用户名和密码填上去,中途输入一次验证码。
可以把session保存到本地,然后下一次就可以不用再输入密码。 
 
后记: 经过几个月后,这个网站被证实是一个圈钱跑路的网站,目前已经无法正常登陆了。希望大家不要再上当了
原创地址:http://30daydo.com/article/263
转载请注明出处。 收起阅读 »

python获取A股上市公司的盈利能力

利用tushare库,可以很方便的获取A股上市公司的基本面信息。
比如企业的盈利能力。
 
import tushare as ts
#获取2017年第3季度的盈利能力数据
ts.get_profit_data(2017,3)
返回的结果:
 
按年度、季度获取盈利能力数据,结果返回的数据属性说明如下:
code,代码 
name,名称 
roe,净资产收益率(%)
 net_profit_ratio,净利率(%) 
gross_profit_rate,毛利率(%) 
net_profits,净利润(百万元)  #这里的官网信息有误,单位应该是百万
esp,每股收益 
business_income,营业收入(百万元) 
bips,每股主营业务收入(元)
 
例如返回如下结果:
 
    code   name    roe  net_profit_ratio  gross_profit_rate  net_profits  \
  000717   韶钢松山  79.22              9.44            14.1042    1750.2624
  600793   宜宾纸业  65.40             13.31             7.9084     100.6484
  600306    商业城  63.19             18.55            17.8601     114.9175
  000526  *ST紫学  61.03              2.78            31.1212      63.6477
  600768   宁波富邦  57.83             14.95             2.7349      88.3171
 
原创,转载请注明:
http://30daydo.com/article/260
 
继续阅读 »
利用tushare库,可以很方便的获取A股上市公司的基本面信息。
比如企业的盈利能力。
 
import tushare as ts
#获取2017年第3季度的盈利能力数据
ts.get_profit_data(2017,3)
返回的结果:
 
按年度、季度获取盈利能力数据,结果返回的数据属性说明如下:
code,代码 
name,名称 
roe,净资产收益率(%)
 net_profit_ratio,净利率(%) 
gross_profit_rate,毛利率(%) 
net_profits,净利润(百万元)  #这里的官网信息有误,单位应该是百万
esp,每股收益 
business_income,营业收入(百万元) 
bips,每股主营业务收入(元)
 
例如返回如下结果:
 
    code   name    roe  net_profit_ratio  gross_profit_rate  net_profits  \
  000717   韶钢松山  79.22              9.44            14.1042    1750.2624
  600793   宜宾纸业  65.40             13.31             7.9084     100.6484
  600306    商业城  63.19             18.55            17.8601     114.9175
  000526  *ST紫学  61.03              2.78            31.1212      63.6477
  600768   宁波富邦  57.83             14.95             2.7349      88.3171
 
原创,转载请注明:
http://30daydo.com/article/260
  收起阅读 »

scipy.misc.lena AttributeError: 'module' object has no attribute 'lena'

在数据可视化的那本书上看到的demo,不过运行不通过,然后出现上面的那个错误,lena函数看起来被移除了。
 
	import scipy.misc
lena=scipy.misc.lena()
plt.gray()
plt.imshow(lena)
plt.colorbar()
plt.show()

Error:
lena=scipy.misc.lena()
AttributeError: 'module' object has no attribute 'lena'
  
定位到scipy包的位置
/usr/local/lib/python2.7/dist-packages/scipy/misc
然后根据文本查找一下: find -name '*.py' | xargs grep 'lena'
 
果然,没有返回相关的字段。 看样子在scipy 1.0.0版本上已经移除了lena图的数据了。 
 
不过替换了一张其他的图片。 在misc目录下看到一个叫ascent的data, 替换这个函数后: 
scipy.misc.ascent()
后,显示一个楼梯的图片。只能凑合着用吧。 lena图自己上网找一张然后数字化就好了。
 
 
继续阅读 »
在数据可视化的那本书上看到的demo,不过运行不通过,然后出现上面的那个错误,lena函数看起来被移除了。
 
	import scipy.misc
lena=scipy.misc.lena()
plt.gray()
plt.imshow(lena)
plt.colorbar()
plt.show()

Error:
lena=scipy.misc.lena()
AttributeError: 'module' object has no attribute 'lena'
  
定位到scipy包的位置
/usr/local/lib/python2.7/dist-packages/scipy/misc
然后根据文本查找一下: find -name '*.py' | xargs grep 'lena'
 
果然,没有返回相关的字段。 看样子在scipy 1.0.0版本上已经移除了lena图的数据了。 
 
不过替换了一张其他的图片。 在misc目录下看到一个叫ascent的data, 替换这个函数后: 
scipy.misc.ascent()
后,显示一个楼梯的图片。只能凑合着用吧。 lena图自己上网找一张然后数字化就好了。
 
  收起阅读 »

python获取股票年涨跌幅排名

2017还剩一天就结束了,而A股在昨天已经收官了。 对于大部分投资者来说,这一年能跑赢指数已经很厉害的了,因为指数被权重股拉的失真了,上证指数的分时白线和黄线经常出现张开的大口,白线在上,黄线在下。
 
作为年终回顾,首先看看A股市场2017的总体涨跌幅排名。
 
下面函数是用来获取个股某个时间段的涨跌幅。code是股票代码,start为开始时间段,end为结束时间段。
def profit(code,start,end):
try:
df=ts.get_k_data(code,start=start,end=end)
except Exception,e:
print e
return None
try:
p=(df['close'].iloc[-1]-df['close'].iloc[0])/df['close'].iloc[0]*100.00
except Exception,e:
print e
return None
return round(p,2)

如果要获取华大基因的2017年涨幅,可以使用
profit('300678','2016-12-31','2017-12-31')

需要注意的是,需要添加一个except的异常处理,因为部分个股停牌时间超过一年,所以该股的收盘价都是空的,这种情况就返回一个None值,在dataframe里就是NaN。
 
剩下了的就是枚举所有A股的个股代码了,然后把遍历所有代码,调用profit函数即可。
def price_change():
basic=ts.get_stock_basics()
pro=

for code in basic.index.values:
print code
p=profit(code,'2016-12-31','2017-12-31')
pro.append(p)
basic['price_change']=pro
basic.to_csv('2017_all_price_change.xls',encoding='gbk')
df=pd.read_csv('2017_all_price_change.xls',encoding='gbk')
df.to_excel('2017_all_price_change.xls',encoding='gbk')

结果保存到2017_all_price_change.xls中,里面有个股的基本信息,还追加了一列2017年的涨跌幅,price_change
 
最后我们把price_change按照从高到低进行排序。 看看哪些个股排名靠前。
def analysis():
df=pd.read_excel('2017_all_price_change.xls',encoding='gbk')
df=df.sort_values(by='price_change',ascending=False)
df.to_excel('2017-year.xls',encoding='gbk')

最终保存的文件为2017-year.xls,当然你也可以保存到mysql的数据库当中。
engine=get_engine('stock')
df.to_sql('2017years',engine)

其中get_engine() 函数如下定义:
def get_engine(db):
engine = create_engine('mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, db))
return engine

只需要把你的mysql数据库的用户名密码等变量加上去就可以了。
 
最终的结果如下:


2017-stock_副本.png

点击查看大图 

附件是导出来的excel格式的数据,你们可以拿去参考。

下一篇我们来学习统计个股的信息,比如哪类股涨得好,哪类股具有相关性,哪类股和大盘走向类似等等。
 
原文链接:http://30daydo.com/article/258
转载请注明出处
 
附件

 
继续阅读 »
2017还剩一天就结束了,而A股在昨天已经收官了。 对于大部分投资者来说,这一年能跑赢指数已经很厉害的了,因为指数被权重股拉的失真了,上证指数的分时白线和黄线经常出现张开的大口,白线在上,黄线在下。
 
作为年终回顾,首先看看A股市场2017的总体涨跌幅排名。
 
下面函数是用来获取个股某个时间段的涨跌幅。code是股票代码,start为开始时间段,end为结束时间段。
def profit(code,start,end):
try:
df=ts.get_k_data(code,start=start,end=end)
except Exception,e:
print e
return None
try:
p=(df['close'].iloc[-1]-df['close'].iloc[0])/df['close'].iloc[0]*100.00
except Exception,e:
print e
return None
return round(p,2)

如果要获取华大基因的2017年涨幅,可以使用
profit('300678','2016-12-31','2017-12-31')

需要注意的是,需要添加一个except的异常处理,因为部分个股停牌时间超过一年,所以该股的收盘价都是空的,这种情况就返回一个None值,在dataframe里就是NaN。
 
剩下了的就是枚举所有A股的个股代码了,然后把遍历所有代码,调用profit函数即可。
def price_change():
basic=ts.get_stock_basics()
pro=

for code in basic.index.values:
print code
p=profit(code,'2016-12-31','2017-12-31')
pro.append(p)
basic['price_change']=pro
basic.to_csv('2017_all_price_change.xls',encoding='gbk')
df=pd.read_csv('2017_all_price_change.xls',encoding='gbk')
df.to_excel('2017_all_price_change.xls',encoding='gbk')

结果保存到2017_all_price_change.xls中,里面有个股的基本信息,还追加了一列2017年的涨跌幅,price_change
 
最后我们把price_change按照从高到低进行排序。 看看哪些个股排名靠前。
def analysis():
df=pd.read_excel('2017_all_price_change.xls',encoding='gbk')
df=df.sort_values(by='price_change',ascending=False)
df.to_excel('2017-year.xls',encoding='gbk')

最终保存的文件为2017-year.xls,当然你也可以保存到mysql的数据库当中。
engine=get_engine('stock')
df.to_sql('2017years',engine)

其中get_engine() 函数如下定义:
def get_engine(db):
engine = create_engine('mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8'.format(MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, db))
return engine

只需要把你的mysql数据库的用户名密码等变量加上去就可以了。
 
最终的结果如下:


2017-stock_副本.png

点击查看大图 

附件是导出来的excel格式的数据,你们可以拿去参考。

下一篇我们来学习统计个股的信息,比如哪类股涨得好,哪类股具有相关性,哪类股和大盘走向类似等等。
 
原文链接:http://30daydo.com/article/258
转载请注明出处
 
附件

  收起阅读 »

dataframe reindex和reset_index区别

reset_index的作用是重新设置dataframe的index,范围为0~len(df)。
    df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50]})
df2 = pd.DataFrame({'A': [6], 'B': [60]})
print('df', df)
print('df2', df2)

df_x = [df, df2]
result = pd.concat(df_x)
print('first result ', result)
 
上面代码把df和df2合并为一个result,但是result的index是乱的。

df4.PNG

 
那么执行
result2= result.reset_index()

得到如下的result2: (默认只是返回一个copy,原来的result没有发生改变,所以需要副本赋值给result2)

df5.PNG

可以看到,原来的一列index现在变成了columns之一,新的index为[0,1,2,3,4,5]
如果添加参数 reset_index(drop=True) 那么原index会被丢弃,不会显示为一个新列。
result2 = result.reset_index(drop=True)
df6.PNG

 
reindex的作用是按照原有的列进行重新生成一个新的df。
 
还是使用上面的代码
result目前是df和df2的合并序列。
如下:
df7.PNG

 
可以看到index为[0,1,2,3,4,0]
执行 
result3 = result.reindex(columns=['A','C'])

df8.PNG

 
可以看到,原index并没有发生改变,而列变成了A和C,因为C是不存在的,所以使用了NaB填充,这个值的内容可以自己填充,可以改为默认填充0或者任意你想要的数据。reindex(columns=..)的作用类似于重新把列的顺序整理一遍, 而使用reindex(index=....) 则按照行重新整理一遍。

原文链接:http://30daydo.com/article/257 
欢迎转载,注明出处
 
继续阅读 »
reset_index的作用是重新设置dataframe的index,范围为0~len(df)。
    df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50]})
df2 = pd.DataFrame({'A': [6], 'B': [60]})
print('df', df)
print('df2', df2)

df_x = [df, df2]
result = pd.concat(df_x)
print('first result ', result)
 
上面代码把df和df2合并为一个result,但是result的index是乱的。

df4.PNG

 
那么执行
result2= result.reset_index()

得到如下的result2: (默认只是返回一个copy,原来的result没有发生改变,所以需要副本赋值给result2)

df5.PNG

可以看到,原来的一列index现在变成了columns之一,新的index为[0,1,2,3,4,5]
如果添加参数 reset_index(drop=True) 那么原index会被丢弃,不会显示为一个新列。
result2 = result.reset_index(drop=True)
df6.PNG

 
reindex的作用是按照原有的列进行重新生成一个新的df。
 
还是使用上面的代码
result目前是df和df2的合并序列。
如下:
df7.PNG

 
可以看到index为[0,1,2,3,4,0]
执行 
result3 = result.reindex(columns=['A','C'])

df8.PNG

 
可以看到,原index并没有发生改变,而列变成了A和C,因为C是不存在的,所以使用了NaB填充,这个值的内容可以自己填充,可以改为默认填充0或者任意你想要的数据。reindex(columns=..)的作用类似于重新把列的顺序整理一遍, 而使用reindex(index=....) 则按照行重新整理一遍。

原文链接:http://30daydo.com/article/257 
欢迎转载,注明出处
  收起阅读 »

dataframe的index索引是否可以重复

答案是肯定的。
 
    df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50]})
df2 = pd.DataFrame({'A': [6], 'B': [60]})
print 'df\n', df
print 'df2\n', df2
输出如下:
df1
df.PNG


df2
df2.PNG

 
然后进行合并:
    df_x = [df, df2]
result = pd.concat(df_x)
print 'first result\n', result

合并后的结果:

dfx.PNG

 
合并后的index是[0,1,2,3,4,0] 所以index集合是一个类似list的结构,而非set结构,允许重复数据的存在。
 
原文链接:http://30daydo.com/article/256 
转载请注明
 
 
继续阅读 »
答案是肯定的。
 
    df = pd.DataFrame({'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50]})
df2 = pd.DataFrame({'A': [6], 'B': [60]})
print 'df\n', df
print 'df2\n', df2
输出如下:
df1
df.PNG


df2
df2.PNG

 
然后进行合并:
    df_x = [df, df2]
result = pd.concat(df_x)
print 'first result\n', result

合并后的结果:

dfx.PNG

 
合并后的index是[0,1,2,3,4,0] 所以index集合是一个类似list的结构,而非set结构,允许重复数据的存在。
 
原文链接:http://30daydo.com/article/256 
转载请注明
 
  收起阅读 »

tushare使用get_stock_basic()保存为excel会因为乱码出错而无法保存

代码如下:
    basic=ts.get_stock_basics()

print basic.info()
print basic.head(10)

basic.to_excel('basic2017.xls',encoding='gbk')

运行后会出错:

'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
 
很明显的是编问题。 
 
然后尝试使用解决编码的步骤。
1. reload(sys) 设置default为utf-8: 失败
2. to_excel('stock.xls',encoding='gbk') : 失败,encoding参数换了几个都是失败,utf-8,gb2312,cp1252
 
最后解决的办法是,先把df保存为csv,然后再从csv从读取出来,然后再存储为excel。 整个过程的encoding参数都是用'gbk'.
    basic.to_csv('2017_all_price_change.xls',encoding='gbk')
df=pd.read_csv('2017_all_price_change.xls',encoding='gbk')
df.to_excel('2017_all_price_change.xls',encoding='gbk')

 
继续阅读 »
代码如下:
    basic=ts.get_stock_basics()

print basic.info()
print basic.head(10)

basic.to_excel('basic2017.xls',encoding='gbk')

运行后会出错:

'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
 
很明显的是编问题。 
 
然后尝试使用解决编码的步骤。
1. reload(sys) 设置default为utf-8: 失败
2. to_excel('stock.xls',encoding='gbk') : 失败,encoding参数换了几个都是失败,utf-8,gb2312,cp1252
 
最后解决的办法是,先把df保存为csv,然后再从csv从读取出来,然后再存储为excel。 整个过程的encoding参数都是用'gbk'.
    basic.to_csv('2017_all_price_change.xls',encoding='gbk')
df=pd.read_csv('2017_all_price_change.xls',encoding='gbk')
df.to_excel('2017_all_price_change.xls',encoding='gbk')

  收起阅读 »

pandas to_excel函数参数中的文件名需要为.xls

例如 df.to_excel('2017-analysis')
会报错。
ValueError: No engine for filetype: ''

需要把文件名也命名为'2017-analysis.xls' 才能过正常运行。
 
不同于其他本文格式,可以随意命名后缀,然后生成文件后再修改后缀。
 
继续阅读 »
例如 df.to_excel('2017-analysis')
会报错。
ValueError: No engine for filetype: ''

需要把文件名也命名为'2017-analysis.xls' 才能过正常运行。
 
不同于其他本文格式,可以随意命名后缀,然后生成文件后再修改后缀。
  收起阅读 »

Dataframe中的plot函数绘图会把日期index自动补全

代码如下:
	df=pd.read_excel('600050.xls',dtype={'datetime':np.datetime64})
df=df.set_index('datetime')
df['close'].plot(use_index=True,grid=True)
plt.show()

df为中国联通的日线数据,跨度为2016年到2017年底,中间有过一段时间的停牌。 用上面的代码绘制出来的曲线图,回发现,横坐标是日期,可是图中居然会把停牌的日子也插进去,这样导致了图形中间出现了一条长长的折线。
因为停牌后,股价是是不会变化的。 
 
继续阅读 »
代码如下:
	df=pd.read_excel('600050.xls',dtype={'datetime':np.datetime64})
df=df.set_index('datetime')
df['close'].plot(use_index=True,grid=True)
plt.show()

df为中国联通的日线数据,跨度为2016年到2017年底,中间有过一段时间的停牌。 用上面的代码绘制出来的曲线图,回发现,横坐标是日期,可是图中居然会把停牌的日子也插进去,这样导致了图形中间出现了一条长长的折线。
因为停牌后,股价是是不会变化的。 
  收起阅读 »

pandas dataframe read_excel读取的列设置为日期类型datetime

比如excel中有一列是日期:

timg.jpg

 
如果使用函数 pd.read_excel('xxx.xls') 读入,那么日期列实际会被认为是一个non-null object 类型,虽然可以后期对这个格式进行转换,但其实可以加入一个参数dtype, 就可以在读excel的时候就指定某列的数据类型。
 
pd.read_excel('xxx.xls',dtype={'出生日期':np.datetime64}
 
注意np中的datetime类型是datetime64.
继续阅读 »
比如excel中有一列是日期:

timg.jpg

 
如果使用函数 pd.read_excel('xxx.xls') 读入,那么日期列实际会被认为是一个non-null object 类型,虽然可以后期对这个格式进行转换,但其实可以加入一个参数dtype, 就可以在读excel的时候就指定某列的数据类型。
 
pd.read_excel('xxx.xls',dtype={'出生日期':np.datetime64}
 
注意np中的datetime类型是datetime64. 收起阅读 »

ubuntu python matplotlib绘图不显示图形

版本信息: ubuntu16
python 2.7
matplotlib (最新,通过pip安装的)
 
绘制任何图形都会输出下面的错误:
TypeError: Couldn't find foreign struct converter for 'cairo.Context'
 
cairo这个依赖库我已经通过apt安装的了。
 
通过调试,最后发现需要安装这个库: 
    sudo apt-get install python-gi-cairo
 
安装后就可以看到图像能够正常显示了。(不然会显示一片空白,其实如果你选择保存的话,然后打开图像,是可以看到绘制出来的图像的)
继续阅读 »
版本信息: ubuntu16
python 2.7
matplotlib (最新,通过pip安装的)
 
绘制任何图形都会输出下面的错误:
TypeError: Couldn't find foreign struct converter for 'cairo.Context'
 
cairo这个依赖库我已经通过apt安装的了。
 
通过调试,最后发现需要安装这个库: 
    sudo apt-get install python-gi-cairo
 
安装后就可以看到图像能够正常显示了。(不然会显示一片空白,其实如果你选择保存的话,然后打开图像,是可以看到绘制出来的图像的) 收起阅读 »

vmware虚拟机在i7 4核8线程的电脑上为什么会很卡

配置如下:

pc.png

 
cpu性能算很猛的了,虽然内存只有4GB,但怎么也不至于开一个vmware,里面运行ubuntu,会卡成翔。
电脑是32位的win7。CPU的虚拟化被禁止了。
 
后面经过不断的调整参数,发现问题出现在虚拟机的CPU核心数的设置上。 默认选择了2个CPU核心,当时认为虚拟机占用的CPU核心越少,那么主机host就会不那么卡。 结果发现不是这么一回事。 把CPU数目设置为4后,发现主机host的一点也不卡了。
继续阅读 »
配置如下:

pc.png

 
cpu性能算很猛的了,虽然内存只有4GB,但怎么也不至于开一个vmware,里面运行ubuntu,会卡成翔。
电脑是32位的win7。CPU的虚拟化被禁止了。
 
后面经过不断的调整参数,发现问题出现在虚拟机的CPU核心数的设置上。 默认选择了2个CPU核心,当时认为虚拟机占用的CPU核心越少,那么主机host就会不那么卡。 结果发现不是这么一回事。 把CPU数目设置为4后,发现主机host的一点也不卡了。 收起阅读 »

微信 支付宝都无法在wp8.1上登录了

今天打开尘封的lumia手机,发现微信和支付宝都无法登录了。
sign,WP系统算是彻底完蛋了吧。
今天打开尘封的lumia手机,发现微信和支付宝都无法登录了。
sign,WP系统算是彻底完蛋了吧。

树莓派安装mongodb服务器

树莓派的自带的源就自带了mongodb-server的安装包,所以只需要使用命令:sudo apt-get install mongodb-server 就可以安装了。
 
不过安装的是32bit 的mongodb,数据库的大小会被限制在2GB。
树莓派启动mongodb
修改/etc/mongodb.config,
把里面的bind=127.0.0.1 注释掉,前面加一个#即可,因为这样其他主机也可以访问这台树莓派的mongodb服务器。
修改dbpath和dblog的路径,因为默认的路径你需要root权限

然后运行 mongod --config /etc/mongodb.config , 然后远程使用mongo ip地址就可以远程连接了。
继续阅读 »
树莓派的自带的源就自带了mongodb-server的安装包,所以只需要使用命令:sudo apt-get install mongodb-server 就可以安装了。
 
不过安装的是32bit 的mongodb,数据库的大小会被限制在2GB。
树莓派启动mongodb
修改/etc/mongodb.config,
把里面的bind=127.0.0.1 注释掉,前面加一个#即可,因为这样其他主机也可以访问这台树莓派的mongodb服务器。
修改dbpath和dblog的路径,因为默认的路径你需要root权限

然后运行 mongod --config /etc/mongodb.config , 然后远程使用mongo ip地址就可以远程连接了。 收起阅读 »

使用官网下载的mongodb,如何设置远程连接mongodb服务器

在linux到官网下载mongodb,选择64位版本。
解压后在mongo的bin目录下运行 mongod --dbpath ~/mongo/db
可以看到mongodb服务被正常启动了。
 
在局域网其他电脑上使用mongodb客户端尝试连接这个mongo服务器,发现无法连接上。
因为官网下载的mongo问价解压后并没有mongo.conf配置文件。
 
在本机运行命令: mongo
可以看到输出:
 
Server has startup warnings: 
2017-12-17T22:56:19.702+0800 I STORAGE [initandlisten]
2017-12-17T22:56:19.702+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-12-17T22:56:19.702+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core ... ystem
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten]
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten]
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** WARNING: This server is bound to localhost.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** Remote systems will be unable to connect to this server.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** Start the server with --bind_ip <address> to specify which IP
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** addresses it should serve responses from, or with --bind_ip_all to
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** bind to all interfaces. If this behavior is desired, start the
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** server with --bind_ip 127.0.0.1 to disable this warning.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten]
2017-12-17T22:56:20.601+0800 I CONTROL [initandlisten]
2017-12-17T22:56:20.601+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-12-17T22:56:20.601+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-12-17T22:56:20.601+0800 I CONTROL [initandlisten]

从上面的信息可以看到,如果需要远程的机子连接到本机,需要添加一个选项: --bind_ip_all
运行下面命令后:
mongod --dbpath ~/mongo/db --bind_ip_all
 
远程的机子就能够连上mongo服务器了。
 
原文地址:http://30daydo.com/article/247
转载请注明出处
继续阅读 »
在linux到官网下载mongodb,选择64位版本。
解压后在mongo的bin目录下运行 mongod --dbpath ~/mongo/db
可以看到mongodb服务被正常启动了。
 
在局域网其他电脑上使用mongodb客户端尝试连接这个mongo服务器,发现无法连接上。
因为官网下载的mongo问价解压后并没有mongo.conf配置文件。
 
在本机运行命令: mongo
可以看到输出:
 
Server has startup warnings: 
2017-12-17T22:56:19.702+0800 I STORAGE [initandlisten]
2017-12-17T22:56:19.702+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2017-12-17T22:56:19.702+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core ... ystem
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten]
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten]
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** WARNING: This server is bound to localhost.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** Remote systems will be unable to connect to this server.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** Start the server with --bind_ip <address> to specify which IP
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** addresses it should serve responses from, or with --bind_ip_all to
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** bind to all interfaces. If this behavior is desired, start the
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten] ** server with --bind_ip 127.0.0.1 to disable this warning.
2017-12-17T22:56:20.600+0800 I CONTROL [initandlisten]
2017-12-17T22:56:20.601+0800 I CONTROL [initandlisten]
2017-12-17T22:56:20.601+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2017-12-17T22:56:20.601+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2017-12-17T22:56:20.601+0800 I CONTROL [initandlisten]

从上面的信息可以看到,如果需要远程的机子连接到本机,需要添加一个选项: --bind_ip_all
运行下面命令后:
mongod --dbpath ~/mongo/db --bind_ip_all
 
远程的机子就能够连上mongo服务器了。
 
原文地址:http://30daydo.com/article/247
转载请注明出处 收起阅读 »

python多线程出现错误 thread.error: can't start new thread

原因是线程数太多,没有退出,导致正在运行的线程数超过系统的限制。(win7 64bit貌似支持1000多个python线程同时运行)。
 
解决办法就是加锁或者合理退出一些占用资源的线程。
原因是线程数太多,没有退出,导致正在运行的线程数超过系统的限制。(win7 64bit貌似支持1000多个python线程同时运行)。
 
解决办法就是加锁或者合理退出一些占用资源的线程。

[scrapy]修改爬虫默认user agent的多种方法

1. 创建scrapy项目:
scrapy startproject headerchange
2. 创建爬虫文件
scrapy genspider headervalidation helloacm.com

3. 目标站点:

https://helloacm.com/api/user-agent/

这一个站点直接返回用户的User-Agent, 这样你就可以直接查看你的User-Agent是否设置成功。
尝试用浏览器打开网址 
https://helloacm.com/api/user-agent/,

网站直接返回:  
"Mozilla\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/62.0.3202.94 Safari\/537.36"
 
3. 配置scrapy
在spider文件夹的headervalidation.py 修改为一下内容。
class HeadervalidationSpider(scrapy.Spider):
name = 'headervalidation'
allowed_domains = ['helloacm.com']
start_urls = ['http://helloacm.com/api/user-agent/']

def parse(self, response):
print '*'*20
print response.body
print '*'*20

项目只是打印出response的body,也就是打印出访问的User-Agent信息。
 
运行:
scrapy crawl headervalidation
会发现返回的是503。 接下来,我们修改scrapy的User-Agent
 
方法1:
修改setting.py中的User-Agent
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Hello World'

然后重新运行
scrapy crawl headervalidation

这个时候,能够看到正常的scrapy输出了。
2017-12-14 16:17:35 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2017-12-14 16:17:35 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://helloacm.com/api/us
er-agent/> from <GET http://helloacm.com/api/user-agent/>
2017-12-14 16:17:36 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://helloacm.com/api/user-agent/> (referer: None)

[b]********************
"Hello World"
********************
[/b]2017-12-14 16:17:37 [scrapy.core.engine] INFO: Closing spider (finished)
2017-12-14 16:17:37 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 406,
'downloader/request_count': 2,
'downloader/request_method_count/GET': 2,
'downloader/response_bytes': 796,
'downloader/response_count': 2,
'downloader/response_status_count/200': 1,
'downloader/response_status_count/301': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2017, 12, 14, 8, 17, 37, 29000),
'log_count/DEBUG': 3,
'log_count/INFO': 7,
'response_received_count': 1,
'scheduler/dequeued': 2,
'scheduler/dequeued/memory': 2,
'scheduler/enqueued': 2,
'scheduler/enqueued/memory': 2,
'start_time': datetime.datetime(2017, 12, 14, 8, 17, 35, 137000)}
2017-12-14 16:17:37 [scrapy.core.engine] INFO: Spider closed (finished)

 
正确设置了User-Agent
 
方法2.
修改setting中的
DEFAULT_REQUEST_HEADERS
# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent':'Hello World'
}

运行后也能够看到上面的输出。
 
 
方法3.
在代码中修改。
class HeadervalidationSpider(scrapy.Spider):
name = 'headervalidation'
allowed_domains = ['helloacm.com']


def start_requests(self):
header={'User-Agent':'Hello World'}
yield scrapy.Request(url='http://helloacm.com/api/user-agent/',headers=header)

def parse(self, response):
print '*'*20
print response.body
print '*'*20

运行后也能够看到下面的输出。
2017-12-14 16:17:35 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2017-12-14 16:17:35 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://helloacm.com/api/us
er-agent/> from <GET http://helloacm.com/api/user-agent/>
2017-12-14 16:17:36 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://helloacm.com/api/user-agent/> (referer: None)

********************
"Hello World"
********************
2017-12-14 16:17:37 [scrapy.core.engine] INFO: Closing spider (finished)
2017-12-14 16:17:37 [scrapy.statscollectors] INFO: Dumping Scrapy stats:

 
方法4.
在中间件中自定义Header
 
在项目目录下添加一个目录:
customerMiddleware,在目录中新建一个自定义的中间件文件:
文件名随意为 customMiddleware.py
 
文件内容为修改request User-Agent
#-*-coding=utf-8-*-
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware

class CustomerUserAgent(UserAgentMiddleware):
def process_request(self, request, spider):
ua='HELLO World?????????'
request.headers.setdefault('User-Agent',ua)

 
在setting中添加下面一句,以便使中间件生效。
DOWNLOADER_MIDDLEWARES = {
'headerchange.customerMiddleware.customMiddleware.CustomerUserAgent':10
# 'headerchange.middlewares.MyCustomDownloaderMiddleware': 543,
}

然后重新运行,同样能够得到一样的效果。
 
原创文章,转载请注明:http://30daydo.com/article/245 

附上github的源码:https://github.com/Rockyzsu/base_function/tree/master/scrapy_demo/headerchange 
欢迎star和点赞。


mm_facetoface_collect_qrcode_1513241363991_副本1_副本_副本.png


如果你觉得文章对你有用,可以视乎你心情来打赏,以支持小站的服务器网络费用。
你的支持是我最大的动力!
 
PS:谢谢下面朋友的打赏
A Keung
阿贾克斯
白驹过隙
Che Long
继续阅读 »
1. 创建scrapy项目:
scrapy startproject headerchange
2. 创建爬虫文件
scrapy genspider headervalidation helloacm.com

3. 目标站点:

https://helloacm.com/api/user-agent/

这一个站点直接返回用户的User-Agent, 这样你就可以直接查看你的User-Agent是否设置成功。
尝试用浏览器打开网址 
https://helloacm.com/api/user-agent/,

网站直接返回:  
"Mozilla\/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/62.0.3202.94 Safari\/537.36"
 
3. 配置scrapy
在spider文件夹的headervalidation.py 修改为一下内容。
class HeadervalidationSpider(scrapy.Spider):
name = 'headervalidation'
allowed_domains = ['helloacm.com']
start_urls = ['http://helloacm.com/api/user-agent/']

def parse(self, response):
print '*'*20
print response.body
print '*'*20

项目只是打印出response的body,也就是打印出访问的User-Agent信息。
 
运行:
scrapy crawl headervalidation
会发现返回的是503。 接下来,我们修改scrapy的User-Agent
 
方法1:
修改setting.py中的User-Agent
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Hello World'

然后重新运行
scrapy crawl headervalidation

这个时候,能够看到正常的scrapy输出了。
2017-12-14 16:17:35 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2017-12-14 16:17:35 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://helloacm.com/api/us
er-agent/> from <GET http://helloacm.com/api/user-agent/>
2017-12-14 16:17:36 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://helloacm.com/api/user-agent/> (referer: None)

[b]********************
"Hello World"
********************
[/b]2017-12-14 16:17:37 [scrapy.core.engine] INFO: Closing spider (finished)
2017-12-14 16:17:37 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 406,
'downloader/request_count': 2,
'downloader/request_method_count/GET': 2,
'downloader/response_bytes': 796,
'downloader/response_count': 2,
'downloader/response_status_count/200': 1,
'downloader/response_status_count/301': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2017, 12, 14, 8, 17, 37, 29000),
'log_count/DEBUG': 3,
'log_count/INFO': 7,
'response_received_count': 1,
'scheduler/dequeued': 2,
'scheduler/dequeued/memory': 2,
'scheduler/enqueued': 2,
'scheduler/enqueued/memory': 2,
'start_time': datetime.datetime(2017, 12, 14, 8, 17, 35, 137000)}
2017-12-14 16:17:37 [scrapy.core.engine] INFO: Spider closed (finished)

 
正确设置了User-Agent
 
方法2.
修改setting中的
DEFAULT_REQUEST_HEADERS
# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
'User-Agent':'Hello World'
}

运行后也能够看到上面的输出。
 
 
方法3.
在代码中修改。
class HeadervalidationSpider(scrapy.Spider):
name = 'headervalidation'
allowed_domains = ['helloacm.com']


def start_requests(self):
header={'User-Agent':'Hello World'}
yield scrapy.Request(url='http://helloacm.com/api/user-agent/',headers=header)

def parse(self, response):
print '*'*20
print response.body
print '*'*20

运行后也能够看到下面的输出。
2017-12-14 16:17:35 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2017-12-14 16:17:35 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://helloacm.com/api/us
er-agent/> from <GET http://helloacm.com/api/user-agent/>
2017-12-14 16:17:36 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://helloacm.com/api/user-agent/> (referer: None)

********************
"Hello World"
********************
2017-12-14 16:17:37 [scrapy.core.engine] INFO: Closing spider (finished)
2017-12-14 16:17:37 [scrapy.statscollectors] INFO: Dumping Scrapy stats:

 
方法4.
在中间件中自定义Header
 
在项目目录下添加一个目录:
customerMiddleware,在目录中新建一个自定义的中间件文件:
文件名随意为 customMiddleware.py
 
文件内容为修改request User-Agent
#-*-coding=utf-8-*-
from scrapy.contrib.downloadermiddleware.useragent import UserAgentMiddleware

class CustomerUserAgent(UserAgentMiddleware):
def process_request(self, request, spider):
ua='HELLO World?????????'
request.headers.setdefault('User-Agent',ua)

 
在setting中添加下面一句,以便使中间件生效。
DOWNLOADER_MIDDLEWARES = {
'headerchange.customerMiddleware.customMiddleware.CustomerUserAgent':10
# 'headerchange.middlewares.MyCustomDownloaderMiddleware': 543,
}

然后重新运行,同样能够得到一样的效果。
 
原创文章,转载请注明:http://30daydo.com/article/245 

附上github的源码:https://github.com/Rockyzsu/base_function/tree/master/scrapy_demo/headerchange 
欢迎star和点赞。


mm_facetoface_collect_qrcode_1513241363991_副本1_副本_副本.png


如果你觉得文章对你有用,可以视乎你心情来打赏,以支持小站的服务器网络费用。
你的支持是我最大的动力!
 
PS:谢谢下面朋友的打赏
A Keung
阿贾克斯
白驹过隙
Che Long 收起阅读 »

[读后笔记] python网络爬虫实战 (李松涛)

Python网络爬虫实战_thunbnail.jpg

用了大概一个早上的时间,就把这本书看完了。 
前面4章是基础的python知识,有基础的同学可以略过。
scrapy爬虫部分,用了实例给大家说明scrapy的用法,不过如果之前没用过scrapy的话,需要慢慢上机敲打代码。
其实书中的例子都是很简单的例子,基本没什么反爬的限制,书中一句话说的非常赞同,用scrapy写爬虫,就是做填空题,而用urllib2写爬虫,就是作文题,可以自由发挥。
 
书中没有用更为方便的requests库。 内容搜索用的最多的是beatifulsoup, 对于xpah或者lxml介绍的比较少。 因为scrapy自带的response就是可以直接用xpath,更为方便。
 
对于scrapy的中间和pipeline的使用了一个例子,也是比较简单的例子。
 
书中没有对验证码,分布式等流行的反爬进行讲解,应该适合爬虫入门的同学去看吧。
 
书中一点很好的就是代码都非常规范,而且即使是写作文的使用urllib2,也有意模仿scrapy的框架去写, 需要抓取的数据 独立一个类,类似于scrapy的item,数据处理用的也是叫pipleline的方法。
这样写的好处就是, 每个模块的功能都一目了然,看完第一个例子的类和函数定义,后面的例子都是大同小异,可以加快读者的阅读速度,非常赞。(这一点以后自己要学习,增加代码的可复用性)
 
 很多页面url现在已经过期了,再次运行作者的源码会返回很多404的结果。
失效的项目:
金逸影城
天气预报
获取代理:http://proxy360.com 

 
本书的一些错误的地方:
1. 获取金逸影城的spider中,所有关于movie的拼写都拼错为moive了。这个属于英语错误。
2. 在testProxy.py 代码中, 由于在同一个类中,一直在产生线程,最后导致线程过多,不能再产生线程。程序会中途退出。
  File "C:\Python27\lib\threading.py", line 736, in start
_start_new_thread(self.__bootstrap, ())
thread.error: can't start new thread

可以修改成独立函数的形式,而不是类函数。
 

待续。
继续阅读 »
Python网络爬虫实战_thunbnail.jpg

用了大概一个早上的时间,就把这本书看完了。 
前面4章是基础的python知识,有基础的同学可以略过。
scrapy爬虫部分,用了实例给大家说明scrapy的用法,不过如果之前没用过scrapy的话,需要慢慢上机敲打代码。
其实书中的例子都是很简单的例子,基本没什么反爬的限制,书中一句话说的非常赞同,用scrapy写爬虫,就是做填空题,而用urllib2写爬虫,就是作文题,可以自由发挥。
 
书中没有用更为方便的requests库。 内容搜索用的最多的是beatifulsoup, 对于xpah或者lxml介绍的比较少。 因为scrapy自带的response就是可以直接用xpath,更为方便。
 
对于scrapy的中间和pipeline的使用了一个例子,也是比较简单的例子。
 
书中没有对验证码,分布式等流行的反爬进行讲解,应该适合爬虫入门的同学去看吧。
 
书中一点很好的就是代码都非常规范,而且即使是写作文的使用urllib2,也有意模仿scrapy的框架去写, 需要抓取的数据 独立一个类,类似于scrapy的item,数据处理用的也是叫pipleline的方法。
这样写的好处就是, 每个模块的功能都一目了然,看完第一个例子的类和函数定义,后面的例子都是大同小异,可以加快读者的阅读速度,非常赞。(这一点以后自己要学习,增加代码的可复用性)
 
 很多页面url现在已经过期了,再次运行作者的源码会返回很多404的结果。
失效的项目:
金逸影城
天气预报
获取代理:http://proxy360.com 

 
本书的一些错误的地方:
1. 获取金逸影城的spider中,所有关于movie的拼写都拼错为moive了。这个属于英语错误。
2. 在testProxy.py 代码中, 由于在同一个类中,一直在产生线程,最后导致线程过多,不能再产生线程。程序会中途退出。
  File "C:\Python27\lib\threading.py", line 736, in start
_start_new_thread(self.__bootstrap, ())
thread.error: can't start new thread

可以修改成独立函数的形式,而不是类函数。
 

待续。 收起阅读 »