判断网页内容是否经过gzip压缩 python代码

python李魔佛 发表了文章 • 0 个评论 • 3758 次浏览 • 2016-07-09 15:10 • 来自相关话题

同一个网页某些页面会通过gzip压缩网页内容,给正常的爬虫造成一定的错误干扰。
 
那么可以在代码中添加一个判断,判断网页内容是否经过gzip压缩,是的话多一个处理就可以了。
 





 
同一个网页某些页面会通过gzip压缩网页内容,给正常的爬虫造成一定的错误干扰。
 
那么可以在代码中添加一个判断,判断网页内容是否经过gzip压缩,是的话多一个处理就可以了。
 

gzip.PNG

 

深港通标的个股 -- 年内定会开通

股票李魔佛 发表了文章 • 0 个评论 • 2701 次浏览 • 2016-07-07 12:03 • 来自相关话题

为什么谈论这个? 因为最近盘中会发现不断有大单进入这些个股。 属于个股异动,但是股价确没有跟着大单上涨。 所以个人感觉后续会有一波好行情。
 





 
为什么谈论这个? 因为最近盘中会发现不断有大单进入这些个股。 属于个股异动,但是股价确没有跟着大单上涨。 所以个人感觉后续会有一波好行情。
 

深港通.PNG

 

linux locate 搜索挂载的分区文件

Linux李魔佛 发表了文章 • 0 个评论 • 2723 次浏览 • 2016-07-07 11:17 • 来自相关话题

一般linux的locate命令会忽略挂载分区的文件,所以即使你挂载分区后使用updatedb也没用。
可以修改updatedb的配置文件来修改sudo gedit /etc/updatedb.conf
把文件中的PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs"
/media 去掉就可以了。
这个参数是设置忽略哪些查找的路径。
  查看全部

一般linux的locate命令会忽略挂载分区的文件,所以即使你挂载分区后使用updatedb也没用。
可以修改updatedb的配置文件来修改
sudo gedit /etc/updatedb.conf

把文件中的
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs"

/media 去掉就可以了。
这个参数是设置忽略哪些查找的路径。
 

股市中的数学 (1)

股票李魔佛 发表了文章 • 0 个评论 • 2806 次浏览 • 2016-07-02 09:54 • 来自相关话题

数学源于生活,在股市中也处处用得着。 
 
股价连续n个涨停板后的涨幅是 = (1.1的n次方 -1 )
比如, 新股连续一周涨停板,那么一周的涨幅就是 1.1(**5)-1=61%
 
1 day's raise is 10.00
2 day's raise is 21.00
3 day's raise is 33.10
4 day's raise is 46.41
5 day's raise is 61.05
 
 
  查看全部
数学源于生活,在股市中也处处用得着。 
 
股价连续n个涨停板后的涨幅是 = (1.1的n次方 -1 )
比如, 新股连续一周涨停板,那么一周的涨幅就是 1.1(**5)-1=61%
 
1 day's raise is 10.00
2 day's raise is 21.00
3 day's raise is 33.10
4 day's raise is 46.41
5 day's raise is 61.05

 
 
 

定向增发与非公开发行

量化交易李魔佛 发表了文章 • 0 个评论 • 3281 次浏览 • 2016-07-01 23:14 • 来自相关话题

股市经常看公告,会有定向增发和非公开发行这样的字眼,解释如下:
定向增发与非公开发行目前已经是一个概念了。
定向增发是指上市公司向符合条件的少数特定投资者非公开发行股份的行为,规定要求发行对象不得超过10人,发行价不得低于公告前20个交易市价的90%,发行股份12个月内(认购后变成控股股东或拥有实际控制权的36个月内) 不得转让。

2006年证监会推出的《再融资管理办法》中,关于非公开发行,除了规定发行对象不得超过10人,发行价不得低于市价的90%,发行股份12个月内(大股东认购的为36个月)不得转让,以及募资用途需符合国家产业政策、上市公司及其高管不得有违规行为等外,没有其他条件。
 
感觉不公开的东西才是好东东~
 
非定向增发的估计都是没人要的。。 查看全部
股市经常看公告,会有定向增发和非公开发行这样的字眼,解释如下:
定向增发与非公开发行目前已经是一个概念了。
定向增发是指上市公司向符合条件的少数特定投资者非公开发行股份的行为,规定要求发行对象不得超过10人,发行价不得低于公告前20个交易市价的90%,发行股份12个月内(认购后变成控股股东或拥有实际控制权的36个月内) 不得转让。

2006年证监会推出的《再融资管理办法》中,关于非公开发行,除了规定发行对象不得超过10人,发行价不得低于市价的90%,发行股份12个月内(大股东认购的为36个月)不得转让,以及募资用途需符合国家产业政策、上市公司及其高管不得有违规行为等外,没有其他条件。
 
感觉不公开的东西才是好东东~
 
非定向增发的估计都是没人要的。。

python 编写火车票抢票软件

python李魔佛 发表了文章 • 2 个评论 • 13814 次浏览 • 2016-06-30 15:55 • 来自相关话题

项目:python 编写火车票抢票软件
实现日期:2016.7.30
项目:python 编写火车票抢票软件
实现日期:2016.7.30

python 获取 中国证券网 的公告

python爬虫李魔佛 发表了文章 • 11 个评论 • 20763 次浏览 • 2016-06-30 15:45 • 来自相关话题

中国证券网: http://ggjd.cnstock.com/
这个网站的公告会比同花顺东方财富的早一点,而且还出现过早上中国证券网已经发了公告,而东财却拿去做午间公告,以至于可以提前获取公告提前埋伏。
 
现在程序自动把抓取的公告存入本网站中:http://30daydo.com/news.php 
每天早上8:30更新一次。
 
生成的公告保存在stock/文件夹下,以日期命名。 下面脚本是循坏检测,如果有新的公告就会继续生成。
 
默认保存前3页的公告。(一次过太多页会被网站暂时屏蔽几分钟)。 代码以及使用了切换header来躲避网站的封杀。
 
修改
getInfo(3) 里面的数字就可以抓取前面某页数据
 
 




__author__ = 'rocchen'
# working v1.0
from bs4 import BeautifulSoup
import urllib2, datetime, time, codecs, cookielib, random, threading
import os,sys


def getInfo(max_index_user=5):
stock_news_site =
"http://ggjd.cnstock.com/gglist/search/ggkx/"

my_userAgent = [
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)']
index = 0
max_index = max_index_user
num = 1
temp_time = time.strftime("[%Y-%m-%d]-[%H-%M]", time.localtime())

store_filename = "StockNews-%s.log" % temp_time
fOpen = codecs.open(store_filename, 'w', 'utf-8')

while index < max_index:
user_agent = random.choice(my_userAgent)
# print user_agent
company_news_site = stock_news_site + str(index)
# content = urllib2.urlopen(company_news_site)
headers = {'User-Agent': user_agent, 'Host': "ggjd.cnstock.com", 'DNT': '1',
'Accept': 'text/html, application/xhtml+xml, */*', }
req = urllib2.Request(url=company_news_site, headers=headers)
resp = None
raw_content = ""
try:
resp = urllib2.urlopen(req, timeout=30)

except urllib2.HTTPError as e:
e.fp.read()
except urllib2.URLError as e:
if hasattr(e, 'code'):
print "error code %d" % e.code
elif hasattr(e, 'reason'):
print "error reason %s " % e.reason

finally:
if resp:
raw_content = resp.read()
time.sleep(2)
resp.close()

soup = BeautifulSoup(raw_content, "html.parser")
all_content = soup.find_all("span", "time")

for i in all_content:
news_time = i.string
node = i.next_sibling
str_temp = "No.%s \n%s\t%s\n---> %s \n\n" % (str(num), news_time, node['title'], node['href'])
#print "inside %d" %num
#print str_temp
fOpen.write(str_temp)
num = num + 1

#print "index %d" %index
index = index + 1

fOpen.close()


def execute_task(n=60):
period = int(n)
while True:
print datetime.datetime.now()
getInfo(3)

time.sleep(60 * period)



if __name__ == "__main__":

sub_folder = os.path.join(os.getcwd(), "stock")
if not os.path.exists(sub_folder):
os.mkdir(sub_folder)
os.chdir(sub_folder)
start_time = time.time() # user can change the max index number getInfo(10), by default is getInfo(5)
if len(sys.argv) <2:
n = raw_input("Input Period : ? mins to download every cycle")
else:
n=int(sys.argv[1])
execute_task(n)
end_time = time.time()
print "Total time: %s s." % str(round((end_time - start_time), 4))


 
github:https://github.com/Rockyzsu/cnstock
  查看全部
中国证券网: http://ggjd.cnstock.com/
这个网站的公告会比同花顺东方财富的早一点,而且还出现过早上中国证券网已经发了公告,而东财却拿去做午间公告,以至于可以提前获取公告提前埋伏。
 
现在程序自动把抓取的公告存入本网站中:http://30daydo.com/news.php 
每天早上8:30更新一次。
 
生成的公告保存在stock/文件夹下,以日期命名。 下面脚本是循坏检测,如果有新的公告就会继续生成。
 
默认保存前3页的公告。(一次过太多页会被网站暂时屏蔽几分钟)。 代码以及使用了切换header来躲避网站的封杀。
 
修改
getInfo(3) 里面的数字就可以抓取前面某页数据
 
 

公告.PNG
__author__ = 'rocchen'
# working v1.0
from bs4 import BeautifulSoup
import urllib2, datetime, time, codecs, cookielib, random, threading
import os,sys


def getInfo(max_index_user=5):
stock_news_site =
"http://ggjd.cnstock.com/gglist/search/ggkx/"

my_userAgent = [
'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)',
'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1',
'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)']
index = 0
max_index = max_index_user
num = 1
temp_time = time.strftime("[%Y-%m-%d]-[%H-%M]", time.localtime())

store_filename = "StockNews-%s.log" % temp_time
fOpen = codecs.open(store_filename, 'w', 'utf-8')

while index < max_index:
user_agent = random.choice(my_userAgent)
# print user_agent
company_news_site = stock_news_site + str(index)
# content = urllib2.urlopen(company_news_site)
headers = {'User-Agent': user_agent, 'Host': "ggjd.cnstock.com", 'DNT': '1',
'Accept': 'text/html, application/xhtml+xml, */*', }
req = urllib2.Request(url=company_news_site, headers=headers)
resp = None
raw_content = ""
try:
resp = urllib2.urlopen(req, timeout=30)

except urllib2.HTTPError as e:
e.fp.read()
except urllib2.URLError as e:
if hasattr(e, 'code'):
print "error code %d" % e.code
elif hasattr(e, 'reason'):
print "error reason %s " % e.reason

finally:
if resp:
raw_content = resp.read()
time.sleep(2)
resp.close()

soup = BeautifulSoup(raw_content, "html.parser")
all_content = soup.find_all("span", "time")

for i in all_content:
news_time = i.string
node = i.next_sibling
str_temp = "No.%s \n%s\t%s\n---> %s \n\n" % (str(num), news_time, node['title'], node['href'])
#print "inside %d" %num
#print str_temp
fOpen.write(str_temp)
num = num + 1

#print "index %d" %index
index = index + 1

fOpen.close()


def execute_task(n=60):
period = int(n)
while True:
print datetime.datetime.now()
getInfo(3)

time.sleep(60 * period)



if __name__ == "__main__":

sub_folder = os.path.join(os.getcwd(), "stock")
if not os.path.exists(sub_folder):
os.mkdir(sub_folder)
os.chdir(sub_folder)
start_time = time.time() # user can change the max index number getInfo(10), by default is getInfo(5)
if len(sys.argv) <2:
n = raw_input("Input Period : ? mins to download every cycle")
else:
n=int(sys.argv[1])
execute_task(n)
end_time = time.time()
print "Total time: %s s." % str(round((end_time - start_time), 4))


 
github:https://github.com/Rockyzsu/cnstock
 

雪人股份 后续分析 6月30日

股票李魔佛 发表了文章 • 0 个评论 • 2573 次浏览 • 2016-06-30 09:05 • 来自相关话题

继上一篇 文章 《雪人股份 后续分析 6月22日》  后,雪人又有一个涨停(27日),然后进入调整。 
 
从27日的龙虎榜信息来看





 
卖出方并没有出现福州五一路,说明该营业部进行了锁仓。 而从最近2天的调整的套路来看,成交量减少了一半,主力不可能在2天缩量的时候把货出掉,所以判断是锁仓。。 分时上看,一旦股价下跌到最低点(下图中的红圈),就有大单涌进来吸货。 从而并未造成股价大幅下跌。
 





 
如果庄家跑路,那么股价就会随自由落体,价格波动幅度会很大。
 
所有雪人后续还会有一批,建议目前小仓位建仓,等股价拉起来可以继续加仓。 
 
雪人股份 分析贴:
雪人股份 后续分析 6月22日​
雪人股份 大宗交易分析 寻找主力痕迹
 
  查看全部
继上一篇 文章 《雪人股份 后续分析 6月22日》  后,雪人又有一个涨停(27日),然后进入调整。 
 
从27日的龙虎榜信息来看

雪人27.PNG

 
卖出方并没有出现福州五一路,说明该营业部进行了锁仓。 而从最近2天的调整的套路来看,成交量减少了一半,主力不可能在2天缩量的时候把货出掉,所以判断是锁仓。。 分时上看,一旦股价下跌到最低点(下图中的红圈),就有大单涌进来吸货。 从而并未造成股价大幅下跌。
 

雪人后续.PNG

 
如果庄家跑路,那么股价就会随自由落体,价格波动幅度会很大。
 
所有雪人后续还会有一批,建议目前小仓位建仓,等股价拉起来可以继续加仓。 
 
雪人股份 分析贴:
雪人股份 后续分析 6月22日​
雪人股份 大宗交易分析 寻找主力痕迹
 
 

为什么beautifulsoup的children不能用列表索引index去返回值 ?

回复

python李魔佛 回复了问题 • 1 人关注 • 1 个回复 • 6142 次浏览 • 2016-06-29 22:10 • 来自相关话题

python 下使用beautifulsoup还是lxml ?

python李魔佛 发表了文章 • 0 个评论 • 7328 次浏览 • 2016-06-29 18:29 • 来自相关话题

刚开始接触爬虫是从beautifulsoup开始的,觉得beautifulsoup很好用。 然后后面又因为使用scrapy的缘故,接触到lxml。 到底哪一个更加好用?
 
然后看了下beautifulsoup的源码,其实现原理使用的是正则表达式,而lxml使用的节点递归的技术。
 

Don't use BeautifulSoup, use lxml.soupparser then you're sitting on top of the power of lxml and can use the good bits of BeautifulSoup which is to deal with really broken and crappy HTML.
 
 
 
9down vote
In summary, lxml is positioned as a lightning-fast production-quality html and xml parser that, by the way, also includes a soupparser module to fall back on BeautifulSoup's functionality. BeautifulSoupis a one-person project, designed to save you time to quickly extract data out of poorly-formed html or xml.
lxml documentation says that both parsers have advantages and disadvantages. For this reason, lxml provides a soupparser so you can switch back and forth. Quoting,
[quote]
BeautifulSoup uses a different parsing approach. It is not a real HTML parser but uses regular expressions to dive through tag soup. It is therefore more forgiving in some cases and less good in others. It is not uncommon that lxml/libxml2 parses and fixes broken HTML better, but BeautifulSoup has superiour support for encoding detection. It very much depends on the input which parser works better.

In the end they are saying,

The downside of using this parser is that it is much slower than the HTML parser of lxml. So if performance matters, you might want to consider using soupparser only as a fallback for certain cases.

If I understand them correctly, it means that the soup parser is more robust --- it can deal with a "soup" of malformed tags by using regular expressions --- whereas lxml is more straightforward and just parses things and builds a tree as you would expect. I assume it also applies to BeautifulSoup itself, not just to the soupparser for lxml.
They also show how to benefit from BeautifulSoup's encoding detection, while still parsing quickly with lxml:[code]>>> from BeautifulSoup import UnicodeDammit

>>> def decode_html(html_string):
... converted = UnicodeDammit(html_string, isHTML=True)
... if not converted.unicode:
... raise UnicodeDecodeError(
... "Failed to detect encoding, tried [%s]",
... ', '.join(converted.triedEncodings))
... # print converted.originalEncoding
... return converted.unicode

>>> root = lxml.html.fromstring(decode_html(tag_soup))[/code]
(Same source: http://lxml.de/elementsoup.html).
In words of BeautifulSoup's creator,

That's it! Have fun! I wrote Beautiful Soup to save everybody time. Once you get used to it, you should be able to wrangle data out of poorly-designed websites in just a few minutes. Send me email if you have any comments, run into problems, or want me to know about your project that uses Beautiful Soup.[code] --Leonard[/code]

Quoted from the Beautiful Soup documentation.
I hope this is now clear. The soup is a brilliant one-person project designed to save you time to extract data out of poorly-designed websites. The goal is to save you time right now, to get the job done, not necessarily to save you time in the long term, and definitely not to optimize the performance of your software.
Also, from the lxml website,

lxml has been downloaded from the Python Package Index more than two million times and is also available directly in many package distributions, e.g. for Linux or MacOS-X.

And, from Why lxml?,

The C libraries libxml2 and libxslt have huge benefits:... Standards-compliant... Full-featured... fast. fast! FAST! ... lxml is a new Python binding for libxml2 and libxslt...

[/quote]
意思大概就是 不要用Beautifulsoup,使用lxml, lxml才能让你提要到让你体会到html节点解析的速度之快。
 
   查看全部
刚开始接触爬虫是从beautifulsoup开始的,觉得beautifulsoup很好用。 然后后面又因为使用scrapy的缘故,接触到lxml。 到底哪一个更加好用?
 
然后看了下beautifulsoup的源码,其实现原理使用的是正则表达式,而lxml使用的节点递归的技术。
 


Don't use BeautifulSoup, use lxml.soupparser then you're sitting on top of the power of lxml and can use the good bits of BeautifulSoup which is to deal with really broken and crappy HTML.
 
 
 
9down vote
In summary, 

lxml
 is positioned as a lightning-fast production-quality html and xml parser that, by the way, also includes a 
soupparser
 module to fall back on BeautifulSoup's functionality. 
BeautifulSoup
is a one-person project, designed to save you time to quickly extract data out of poorly-formed html or xml.
lxml documentation says that both parsers have advantages and disadvantages. For this reason, 
lxml
 provides a 
soupparser
 so you can switch back and forth. Quoting,
[quote]
BeautifulSoup uses a different parsing approach. It is not a real HTML parser but uses regular expressions to dive through tag soup. It is therefore more forgiving in some cases and less good in others. It is not uncommon that lxml/libxml2 parses and fixes broken HTML better, but BeautifulSoup has superiour support for encoding detection. It very much depends on the input which parser works better.


In the end they are saying,


The downside of using this parser is that it is much slower than the HTML parser of lxml. So if performance matters, you might want to consider using soupparser only as a fallback for certain cases.


If I understand them correctly, it means that the soup parser is more robust --- it can deal with a "soup" of malformed tags by using regular expressions --- whereas 
lxml
 is more straightforward and just parses things and builds a tree as you would expect. I assume it also applies to 
BeautifulSoup
 itself, not just to the 
soupparser
 for 
lxml
.
They also show how to benefit from 
BeautifulSoup
's encoding detection, while still parsing quickly with 
lxml
:
[code]>>> from BeautifulSoup import UnicodeDammit

>>> def decode_html(html_string):
... converted = UnicodeDammit(html_string, isHTML=True)
... if not converted.unicode:
... raise UnicodeDecodeError(
... "Failed to detect encoding, tried [%s]",
... ', '.join(converted.triedEncodings))
... # print converted.originalEncoding
... return converted.unicode

>>> root = lxml.html.fromstring(decode_html(tag_soup))
[/code]
(Same source: http://lxml.de/elementsoup.html).
In words of 
BeautifulSoup
's creator,


That's it! Have fun! I wrote Beautiful Soup to save everybody time. Once you get used to it, you should be able to wrangle data out of poorly-designed websites in just a few minutes. Send me email if you have any comments, run into problems, or want me to know about your project that uses Beautiful Soup.

[code] --Leonard
[/code]


Quoted from the Beautiful Soup documentation.
I hope this is now clear. The soup is a brilliant one-person project designed to save you time to extract data out of poorly-designed websites. The goal is to save you time right now, to get the job done, not necessarily to save you time in the long term, and definitely not to optimize the performance of your software.
Also, from the lxml website,


lxml has been downloaded from the Python Package Index more than two million times and is also available directly in many package distributions, e.g. for Linux or MacOS-X.


And, from Why lxml?,


The C libraries libxml2 and libxslt have huge benefits:... Standards-compliant... Full-featured... fast. fast! FAST! ... lxml is a new Python binding for libxml2 and libxslt...


[/quote]
意思大概就是 不要用Beautifulsoup,使用lxml, lxml才能让你提要到让你体会到html节点解析的速度之快。
 
  

python 批量获取色影无忌 获奖图片

python爬虫李魔佛 发表了文章 • 6 个评论 • 15994 次浏览 • 2016-06-29 16:41 • 来自相关话题

色影无忌上的图片很多都可以直接拿来做壁纸的,而且发布面不会太广,基本不会和市面上大部分的壁纸或者图片素材重复。 关键还没有水印。 这么良心的图片服务商哪里找呀~~
 

 





 
不多说,直接来代码:#-*-coding=utf-8-*-
__author__ = 'rocky chen'
from bs4 import BeautifulSoup
import urllib2,sys,StringIO,gzip,time,random,re,urllib,os
reload(sys)
sys.setdefaultencoding('utf-8')
class Xitek():
    def __init__(self):
        self.url="http://photo.xitek.com/"
        user_agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
        self.headers={"User-Agent":user_agent}
        self.last_page=self.__get_last_page()


    def __get_last_page(self):
        html=self.__getContentAuto(self.url)
        bs=BeautifulSoup(html,"html.parser")
        page=bs.find_all('a',class_="blast")
        last_page=page[0]['href'].split('/')[-1]
        return int(last_page)


    def __getContentAuto(self,url):
        req=urllib2.Request(url,headers=self.headers)
        resp=urllib2.urlopen(req)
        #time.sleep(2*random.random())
        content=resp.read()
        info=resp.info().get("Content-Encoding")
        if info==None:
            return content
        else:
            t=StringIO.StringIO(content)
            gziper=gzip.GzipFile(fileobj=t)
            html = gziper.read()
            return html

    #def __getFileName(self,stream):


    def __download(self,url):
        p=re.compile(r'href="(/photoid/\d+)"')
        #html=self.__getContentNoZip(url)

        html=self.__getContentAuto(url)

        content = p.findall(html)
        for i in content:
            print i

            photoid=self.__getContentAuto(self.url+i)
            bs=BeautifulSoup(photoid,"html.parser")
            final_link=bs.find('img',class_="mimg")['src']
            print final_link
            #pic_stream=self.__getContentAuto(final_link)
            title=bs.title.string.strip()
            filename = re.sub('[\/:*?"<>|]', '-', title)
            filename=filename+'.jpg'
            urllib.urlretrieve(final_link,filename)
            #f=open(filename,'w')
            #f.write(pic_stream)
            #f.close()
        #print html
        #bs=BeautifulSoup(html,"html.parser")
        #content=bs.find_all(p)
        #for i in content:
        #    print i
        '''
        print bs.title
        element_link=bs.find_all('div',class_="element")
        print len(element_link)
        k=1
        for href in element_link:

            #print type(href)
            #print href.tag
        '''
        '''
            if href.children[0]:
                print href.children[0]
        '''
        '''
            t=0

            for i in href.children:
                #if i.a:
                if t==0:
                    #print k
                    if i['href']
                    print link

                        if p.findall(link):
                            full_path=self.url[0:len(self.url)-1]+link
                            sub_html=self.__getContent(full_path)
                            bs=BeautifulSoup(sub_html,"html.parser")
                            final_link=bs.find('img',class_="mimg")['src']
                            #time.sleep(2*random.random())
                            print final_link
                    #k=k+1
                #print type(i)
                #print i.tag
                #if hasattr(i,"href"):
                    #print i['href']
                #print i.tag
                t=t+1
                #print "*"

        '''

        '''
            if href:
                if href.children:
                    print href.children[0]
        '''
            #print "one element link"



    def getPhoto(self):

        start=0
        #use style/0
        photo_url="http://photo.xitek.com/style/0/p/"
        for i in range(start,self.last_page+1):
            url=photo_url+str(i)
            print url
            #time.sleep(1)
            self.__download(url)

        '''
        url="http://photo.xitek.com/style/0/p/10"
        self.__download(url)
        '''
        #url="http://photo.xitek.com/style/0/p/0"
        #html=self.__getContent(url)
        #url="http://photo.xitek.com/"
        #html=self.__getContentNoZip(url)
        #print html
        #'''
def main():
    sub_folder = os.path.join(os.getcwd(), "content")
    if not os.path.exists(sub_folder):
        os.mkdir(sub_folder)
    os.chdir(sub_folder)
    obj=Xitek()
    obj.getPhoto()


if __name__=="__main__":
    main()








下载后在content文件夹下会自动抓取所有图片。 (色影无忌的服务器没有做任何的屏蔽处理,所以脚本不能跑那么快,可以适当调用sleep函数,不要让服务器压力那么大)
 
已经下载好的图片:





 
 
github: https://github.com/Rockyzsu/fetchXitek   (欢迎前来star) 查看全部
色影无忌上的图片很多都可以直接拿来做壁纸的,而且发布面不会太广,基本不会和市面上大部分的壁纸或者图片素材重复。 关键还没有水印。 这么良心的图片服务商哪里找呀~~
 

 

色影无忌_副本.png

 
不多说,直接来代码:
#-*-coding=utf-8-*-
__author__ = 'rocky chen'
from bs4 import BeautifulSoup
import urllib2,sys,StringIO,gzip,time,random,re,urllib,os
reload(sys)
sys.setdefaultencoding('utf-8')
class Xitek():
    def __init__(self):
        self.url="http://photo.xitek.com/"
        user_agent="Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
        self.headers={"User-Agent":user_agent}
        self.last_page=self.__get_last_page()


    def __get_last_page(self):
        html=self.__getContentAuto(self.url)
        bs=BeautifulSoup(html,"html.parser")
        page=bs.find_all('a',class_="blast")
        last_page=page[0]['href'].split('/')[-1]
        return int(last_page)


    def __getContentAuto(self,url):
        req=urllib2.Request(url,headers=self.headers)
        resp=urllib2.urlopen(req)
        #time.sleep(2*random.random())
        content=resp.read()
        info=resp.info().get("Content-Encoding")
        if info==None:
            return content
        else:
            t=StringIO.StringIO(content)
            gziper=gzip.GzipFile(fileobj=t)
            html = gziper.read()
            return html

    #def __getFileName(self,stream):


    def __download(self,url):
        p=re.compile(r'href="(/photoid/\d+)"')
        #html=self.__getContentNoZip(url)

        html=self.__getContentAuto(url)

        content = p.findall(html)
        for i in content:
            print i

            photoid=self.__getContentAuto(self.url+i)
            bs=BeautifulSoup(photoid,"html.parser")
            final_link=bs.find('img',class_="mimg")['src']
            print final_link
            #pic_stream=self.__getContentAuto(final_link)
            title=bs.title.string.strip()
            filename = re.sub('[\/:*?"<>|]', '-', title)
            filename=filename+'.jpg'
            urllib.urlretrieve(final_link,filename)
            #f=open(filename,'w')
            #f.write(pic_stream)
            #f.close()
        #print html
        #bs=BeautifulSoup(html,"html.parser")
        #content=bs.find_all(p)
        #for i in content:
        #    print i
        '''
        print bs.title
        element_link=bs.find_all('div',class_="element")
        print len(element_link)
        k=1
        for href in element_link:

            #print type(href)
            #print href.tag
        '''
        '''
            if href.children[0]:
                print href.children[0]
        '''
        '''
            t=0

            for i in href.children:
                #if i.a:
                if t==0:
                    #print k
                    if i['href']
                    print link

                        if p.findall(link):
                            full_path=self.url[0:len(self.url)-1]+link
                            sub_html=self.__getContent(full_path)
                            bs=BeautifulSoup(sub_html,"html.parser")
                            final_link=bs.find('img',class_="mimg")['src']
                            #time.sleep(2*random.random())
                            print final_link
                    #k=k+1
                #print type(i)
                #print i.tag
                #if hasattr(i,"href"):
                    #print i['href']
                #print i.tag
                t=t+1
                #print "*"

        '''

        '''
            if href:
                if href.children:
                    print href.children[0]
        '''
            #print "one element link"



    def getPhoto(self):

        start=0
        #use style/0
        photo_url="http://photo.xitek.com/style/0/p/"
        for i in range(start,self.last_page+1):
            url=photo_url+str(i)
            print url
            #time.sleep(1)
            self.__download(url)

        '''
        url="http://photo.xitek.com/style/0/p/10"
        self.__download(url)
        '''
        #url="http://photo.xitek.com/style/0/p/0"
        #html=self.__getContent(url)
        #url="http://photo.xitek.com/"
        #html=self.__getContentNoZip(url)
        #print html
        #'''
def main():
    sub_folder = os.path.join(os.getcwd(), "content")
    if not os.path.exists(sub_folder):
        os.mkdir(sub_folder)
    os.chdir(sub_folder)
    obj=Xitek()
    obj.getPhoto()


if __name__=="__main__":
    main()








下载后在content文件夹下会自动抓取所有图片。 (色影无忌的服务器没有做任何的屏蔽处理,所以脚本不能跑那么快,可以适当调用sleep函数,不要让服务器压力那么大)
 
已经下载好的图片:

色影无忌2_副本1.png

 
 
github: https://github.com/Rockyzsu/fetchXitek   (欢迎前来star)

python获取列表中的最大值

python李魔佛 发表了文章 • 0 个评论 • 4745 次浏览 • 2016-06-29 16:35 • 来自相关话题

其实python提供了内置的max函数,直接调用即可。
 
list=[1,2,3,5,4,6,434,2323,333,99999]
print "max of list is ",
print max(list)
输出 99999 查看全部
其实python提供了内置的max函数,直接调用即可。
 
    list=[1,2,3,5,4,6,434,2323,333,99999]
print "max of list is ",
print max(list)

输出 99999

房事一谈

量化交易李魔佛 发表了文章 • 0 个评论 • 2659 次浏览 • 2016-06-29 15:39 • 来自相关话题

《》
《》

换手率 你未必懂的地方

股票李魔佛 发表了文章 • 0 个评论 • 2377 次浏览 • 2016-06-24 18:21 • 来自相关话题

2016.6.29 更新
 
很多人都知道换手率代表一个股票的活跃程度,不过里面还是有一些不为人知的地方。
 
比如: 近期的新股 中国核建 





 
换手率为0.52%, 看起来很低吧。
 
可是很多人忽略了一个地方,换手率的公式= 当天成交股票股数/流通股本, 而对于很多新股来说,会有很大部分的禁售股, 中国核建总股本26亿,而流通股才5亿多,超过20亿股本是暂时无法流通的,所以目前在市场上活跃的股本才5亿, 也就是真正的换手率 为 = 当日成交股票股数/流通股本 , 对于中国核建来说,它的实际换手率为 = 2.73万*100/5.25亿 * 100% = 0.52%
 
而对于新股来说,一般如果换手超过2%,下一天很可能就会开板。对于次新股来说,还可以接到1~2个涨停板左右。
 
 
 
  查看全部
2016.6.29 更新
 
很多人都知道换手率代表一个股票的活跃程度,不过里面还是有一些不为人知的地方。
 
比如: 近期的新股 中国核建 

中国核建.PNG

 
换手率为0.52%, 看起来很低吧。
 
可是很多人忽略了一个地方,换手率的公式= 当天成交股票股数/流通股本, 而对于很多新股来说,会有很大部分的禁售股, 中国核建总股本26亿,而流通股才5亿多,超过20亿股本是暂时无法流通的,所以目前在市场上活跃的股本才5亿, 也就是真正的换手率 为 = 当日成交股票股数/流通股本 , 对于中国核建来说,它的实际换手率为 = 2.73万*100/5.25亿 * 100% = 0.52%
 
而对于新股来说,一般如果换手超过2%,下一天很可能就会开板。对于次新股来说,还可以接到1~2个涨停板左右。
 
 
 
 

同花顺好像很想英国脱欧呀!!!

股票李魔佛 发表了文章 • 0 个评论 • 2799 次浏览 • 2016-06-24 08:34 • 来自相关话题

同花顺这个无良媒体,他想股市跌,就专门报道片面的新闻让大家割肉交易。 
 
自己去BBC官网看看? 就拿一个地区数据来说话,要炒股赢钱,千万不能看一个扭曲事实的同花顺。
 




















 
黄色的remain是留,蓝色的leave是离。 
 
炒股最忌讳的就是用他人的二手过滤过的数据,尤其是用户群巨大的网站社区。 一个有偏颇的数据会引起巨大的涟漪。
 
 
 
  查看全部

留欧_副本.png

同花顺这个无良媒体,他想股市跌,就专门报道片面的新闻让大家割肉交易。 
 
自己去BBC官网看看? 就拿一个地区数据来说话,要炒股赢钱,千万不能看一个扭曲事实的同花顺。
 

1.JPG


2.JPG


3.JPG


4.JPG

 
黄色的remain是留,蓝色的leave是离。 
 
炒股最忌讳的就是用他人的二手过滤过的数据,尤其是用户群巨大的网站社区。 一个有偏颇的数据会引起巨大的涟漪。
 
 
 
 

物联网 标的个股 --延华智能

股票李魔佛 发表了文章 • 0 个评论 • 2833 次浏览 • 2016-06-23 23:33 • 来自相关话题

延华智能的概念:

智慧城市, 建筑节能, 智能医疗,养老概念
 
今天放量进入龙虎榜单。 涨停原因就是物联网题材的兴起。
 
先看看延华智能的龙虎榜





 
买一到买四清一色的机构席位。
而卖出的四个都是游资。
关键还是看看卖出买入占比, 前5买入占了30%,而卖出前5才占17%,差的太多了。
说明买入的是超大单,集中度高; 而卖出的是游资掺杂着很多的散户。而且不少实在涨停板上卖出的,从分价表上可以看出来。
 
所以上面的4个机构很可能是家机构,明天冲高不能追加。 要看最高后回落情况,如果承接的好,那么说明后面还有肉。 不然冲高就应该减仓。
 
  查看全部
延华智能的概念:

智慧城市, 建筑节能, 智能医疗,养老概念
 
今天放量进入龙虎榜单。 涨停原因就是物联网题材的兴起。
 
先看看延华智能的龙虎榜

延华智能.png

 
买一到买四清一色的机构席位。
而卖出的四个都是游资。
关键还是看看卖出买入占比, 前5买入占了30%,而卖出前5才占17%,差的太多了。
说明买入的是超大单,集中度高; 而卖出的是游资掺杂着很多的散户。而且不少实在涨停板上卖出的,从分价表上可以看出来。
 
所以上面的4个机构很可能是家机构,明天冲高不能追加。 要看最高后回落情况,如果承接的好,那么说明后面还有肉。 不然冲高就应该减仓。
 
 

阻挡黑客的最原始最暴力的方法 ---用胶带粘住你的摄像头

网络安全李魔佛 发表了文章 • 0 个评论 • 3789 次浏览 • 2016-06-23 22:15 • 来自相关话题

Facebook 的 CEO 扎克伯格经常喜欢发发照片跟网友互动什么的。最近他在 Facebook 个人账号上面发了一条消息,照片中的他扛着一个镜框庆祝 Instagram 的月活用户数突破了 5 亿大关。但是眼尖的用户却注意到了其他的细节—似乎扎克的笔记本摄像头和麦克风插口都是用胶带蒙住的(题图红色箭头所指)。

扎克为什么要把摄像头蒙住呢?这得先说一下 Ratting(Remote Access Trojan)这种行为。所谓的 Ratting,是指黑客通过植入木马远程控制受害用户设备的行为,而进行这种行为的黑客一般叫做 ratter。除了窃取设备的敏感数据以外,激活用户摄像头和麦克风偷拍视频也是 ratter 常干的事情。

不过扎克伯格这么专业的人也把摄像头蒙起来究竟是偏执狂还是好做法呢?安全专家认为是后者,原因有三:

一是扎克伯格是一个高价值的攻击目标。无论是情报机构还是为了罪犯无疑都会对扎克伯格的资料虎视眈眈,而对于那些为了证明自己黑客功力的人来说,扎克也是一个很理想的目标。所以采取预防措施是很自然的事情。

二是把采集音视频的入口盖住是一种成本低廉且基本的安全防护办法。如果想窃听安全会议,有经验的黑客一般都会先数数哪些设备没有遮住摄像头然后再确定下手的目标。

三是扎克未必就不会被攻破。事实上本月初就爆出了黑客袭击扎克伯格部分社交网络,盗取了他的 Twitter、Pinterest、LinkedIn 帐号的消息。把这两件事联系在一起,更容易解释他的那台 Macbook 上面的胶带。

事实上,采取这种做法的人并不止扎克一个。就连 FBI 局长 James Comey 也把自己的笔记本摄像头蒙上了胶带—原因很简单,因为他看到一个比他更聪明的人也这么干。所以你要不要也蒙上呢? 查看全部
Facebook 的 CEO 扎克伯格经常喜欢发发照片跟网友互动什么的。最近他在 Facebook 个人账号上面发了一条消息,照片中的他扛着一个镜框庆祝 Instagram 的月活用户数突破了 5 亿大关。但是眼尖的用户却注意到了其他的细节—似乎扎克的笔记本摄像头和麦克风插口都是用胶带蒙住的(题图红色箭头所指)。

扎克为什么要把摄像头蒙住呢?这得先说一下 Ratting(Remote Access Trojan)这种行为。所谓的 Ratting,是指黑客通过植入木马远程控制受害用户设备的行为,而进行这种行为的黑客一般叫做 ratter。除了窃取设备的敏感数据以外,激活用户摄像头和麦克风偷拍视频也是 ratter 常干的事情。

不过扎克伯格这么专业的人也把摄像头蒙起来究竟是偏执狂还是好做法呢?安全专家认为是后者,原因有三:

一是扎克伯格是一个高价值的攻击目标。无论是情报机构还是为了罪犯无疑都会对扎克伯格的资料虎视眈眈,而对于那些为了证明自己黑客功力的人来说,扎克也是一个很理想的目标。所以采取预防措施是很自然的事情。

二是把采集音视频的入口盖住是一种成本低廉且基本的安全防护办法。如果想窃听安全会议,有经验的黑客一般都会先数数哪些设备没有遮住摄像头然后再确定下手的目标。

三是扎克未必就不会被攻破。事实上本月初就爆出了黑客袭击扎克伯格部分社交网络,盗取了他的 Twitter、Pinterest、LinkedIn 帐号的消息。把这两件事联系在一起,更容易解释他的那台 Macbook 上面的胶带。

事实上,采取这种做法的人并不止扎克一个。就连 FBI 局长 James Comey 也把自己的笔记本摄像头蒙上了胶带—原因很简单,因为他看到一个比他更聪明的人也这么干。所以你要不要也蒙上呢?

python使用lxml加载 html---xpath

python李魔佛 发表了文章 • 0 个评论 • 2688 次浏览 • 2016-06-23 22:09 • 来自相关话题

首先确定安装了lxml。
然后按照以下代码去使用
 
#-*-coding=utf-8-*-
__author__ = 'rocchen'
from lxml import html
from lxml import etree
import urllib2

def lxml_test():
url="http://www.caixunzz.com"
req=urllib2.Request(url=url)
resp=urllib2.urlopen(req)
#print resp.read()

tree=etree.HTML(resp.read())
href=tree.xpath('//a[@class="label"]/@href')
#print href.tag
for i in href:
#print html.tostring(i)
#print type(i)
print i

print type(href)

lxml_test()

使用urllib2读取了网页内容,然后导入到lxml,为的就是使用xpath这个方便的函数。 比单纯使用beautifulsoup要方便的多。(个人认为) 查看全部
首先确定安装了lxml。
然后按照以下代码去使用
 
#-*-coding=utf-8-*-
__author__ = 'rocchen'
from lxml import html
from lxml import etree
import urllib2

def lxml_test():
url="http://www.caixunzz.com"
req=urllib2.Request(url=url)
resp=urllib2.urlopen(req)
#print resp.read()

tree=etree.HTML(resp.read())
href=tree.xpath('//a[@class="label"]/@href')
#print href.tag
for i in href:
#print html.tostring(i)
#print type(i)
print i

print type(href)

lxml_test()

使用urllib2读取了网页内容,然后导入到lxml,为的就是使用xpath这个方便的函数。 比单纯使用beautifulsoup要方便的多。(个人认为)

win7下 设置 sourcetree full/fetch github文件

Linux李魔佛 发表了文章 • 0 个评论 • 3241 次浏览 • 2016-06-23 16:48 • 来自相关话题

默认sourcetree使用putty的priva key来和github通讯。 
因为之前win7系统安装的github使用的openssh来管理github的文件推送,所以在sourcetree中修改成openssh就可以了。
 
在Tool-> option, 在菜单下,把ssh key改成 openssh就可以了。 查看全部
默认sourcetree使用putty的priva key来和github通讯。 
因为之前win7系统安装的github使用的openssh来管理github的文件推送,所以在sourcetree中修改成openssh就可以了。
 
在Tool-> option, 在菜单下,把ssh key改成 openssh就可以了。

社会上的很多事业单位,企业,部门都是店大欺客的原罪

30天新尝试李魔佛 发表了文章 • 0 个评论 • 2144 次浏览 • 2016-06-23 16:09 • 来自相关话题

<>
<>

mac os x 下 git gui 好用的图形工具

Linux李魔佛 发表了文章 • 0 个评论 • 4839 次浏览 • 2016-06-22 17:10 • 来自相关话题

在GUI下,对分支管理更加地直观。
 
试了几个工具,最好用的还是sourcetree。 跨平台,win和mac都可以用,而且注册账号后还可以在云上同步。
 

 

 
https://www.sourcetreeapp.com/download/ 查看全部
在GUI下,对分支管理更加地直观。
 
试了几个工具,最好用的还是sourcetree。 跨平台,win和mac都可以用,而且注册账号后还可以在云上同步。
 

 

 
https://www.sourcetreeapp.com/download/

雪人股份 后续分析 6月22日

股票李魔佛 发表了文章 • 0 个评论 • 2966 次浏览 • 2016-06-22 12:38 • 来自相关话题

雪人股份 6月21日上了龙虎榜。
 
在上一篇 文章中,雪人股份 大宗交易分析 寻找主力痕迹  我们找到了该股接盘的营业部----福州五一路。
 
今天龙虎榜上:





 
没有出现任何的福州的营业部,所以该游资对雪人股份进行了锁仓处理。 而且 溧阳路 还进来了,所以后来会有一波洗盘以及拉升。 (鉴于溧阳路的风格)
 
  查看全部
雪人股份 6月21日上了龙虎榜。
 
在上一篇 文章中,雪人股份 大宗交易分析 寻找主力痕迹  我们找到了该股接盘的营业部----福州五一路。
 
今天龙虎榜上:

6.21雪人_.JPG

 
没有出现任何的福州的营业部,所以该游资对雪人股份进行了锁仓处理。 而且 溧阳路 还进来了,所以后来会有一波洗盘以及拉升。 (鉴于溧阳路的风格)
 
 

浙江世宝的十大股东之一,柳青

股票李魔佛 发表了文章 • 0 个评论 • 2875 次浏览 • 2016-06-21 23:39 • 来自相关话题

最近翻看浙江世宝的十大流通股东,无意中看到了柳青,因为浙江世宝也是做汽车行业的A股上市公司。
所以这里的柳青很有可能是柳传志之女柳青,滴滴公司的总裁。
 






 
百度百科的资料
 
柳青

 

(柳传志之女,滴滴出行总裁)

 编辑柳青, 1978年出生于北京,毕业于北京大学和哈佛大学,现任滴滴出行总裁。
2000年,柳青毕业于北京大学计算机系毕业,随后进入哈佛大学学习。2002年获哈佛大学硕士学位,同年入职高盛(亚洲)有限责任公司。2008年晋升为高盛(亚洲)有限责任公司执行董事,凭借努力,逐步晋升为高盛亚洲区董事总经理,成为这家百年投行历史上最年轻的董事总经理。
2014年,柳青加盟滴滴出任首席运营官,2015年2月升任滴滴总裁。柳青与程维成为搭档后,主导了滴滴打车与快的打车的合并[1]  。2015年柳青与滴滴出行董事长程维同时登上财富全球四十精英榜榜首[2]  。同年,世界经济论坛也授予柳青“全球青年领袖”称号[3]  。2015 年柳青入选财富“中国最具影响力的 25 位商界女性” [4]  ;2013和2014年,两次被《中国企业家》评选为“中国最有影响力商界女性” [5]  。柳青是北京青联委员、哈佛大学研究生院校友会理事[6]  ,壹基金理事会理事[7]  。 查看全部
最近翻看浙江世宝的十大流通股东,无意中看到了柳青,因为浙江世宝也是做汽车行业的A股上市公司。
所以这里的柳青很有可能是柳传志之女柳青,滴滴公司的总裁。
 

柳青.PNG


 
百度百科的资料
 
柳青

 

(柳传志之女,滴滴出行总裁)

 编辑柳青, 1978年出生于北京,毕业于北京大学和哈佛大学,现任滴滴出行总裁。
2000年,柳青毕业于北京大学计算机系毕业,随后进入哈佛大学学习。2002年获哈佛大学硕士学位,同年入职高盛(亚洲)有限责任公司。2008年晋升为高盛(亚洲)有限责任公司执行董事,凭借努力,逐步晋升为高盛亚洲区董事总经理,成为这家百年投行历史上最年轻的董事总经理。
2014年,柳青加盟滴滴出任首席运营官,2015年2月升任滴滴总裁。柳青与程维成为搭档后,主导了滴滴打车与快的打车的合并[1]  。2015年柳青与滴滴出行董事长程维同时登上财富全球四十精英榜榜首[2]  。同年,世界经济论坛也授予柳青“全球青年领袖”称号[3]  。2015 年柳青入选财富“中国最具影响力的 25 位商界女性” [4]  ;2013和2014年,两次被《中国企业家》评选为“中国最有影响力商界女性” [5]  。柳青是北京青联委员、哈佛大学研究生院校友会理事[6]  ,壹基金理事会理事[7]  。

爆裂之股的雪球访谈的一问一答 合集

股票李魔佛 发表了文章 • 0 个评论 • 2754 次浏览 • 2016-06-21 18:31 • 来自相关话题

次新股强势就代表大盘弱势,次新股都跳水,大盘就跳水了

如何判断某个题材即将爆发,判定依据是?

首选你要明白,大资金的想法,他建仓后肯定需要高位派发才能赚钱,这个时候就需要风口配合,风口如何来呢?首选是行业面的变化,比如这次物联网,是因为一个标准的建立,使这个行业面产生变化。而聪明的产业资金会悄悄潜伏,而跟风的游资也会看到券商研报的第二天竞价抢筹。而大部分散户都是复盘后,才明白是怎么回事后,导致第二天激情追高。我觉得像这种大题材,肯定会有第二波,大家耐心布局第二波就好,缩量低吸,放量加仓,净量大绿等待,净量翻红建仓,反正你的买点的落脚点一定那个转折点,不确定是否转折时,买几手玩玩就好。

 您平时经常关注哪些网站和软件发的消息呢?

查个股研报,有很多种途径,比如雪球,同花顺app,东方财富app,查某个券商的研报去东方财富官网就好。资讯就太多了,主流资讯比如四大证券报,新闻联播,财经纪新闻都是影响比较大的公众媒体。还有腾讯新闻这种的科技数码板块都是可以看的



如何用比较短的时间来熟悉个股的基本面呢?有时都不知道那个股是什么来的。还有就是上车的时间,有时看好是热点,上车的时间不对一直横盘,当你走了他就开始拉升。

我觉得选股应该自上而下的选股,单独看一只个股无意义的,游资是否拉他,要么他是龙头,要么就是跟风龙头。这个时候你要判断板块的热度,理清个股的关系。这个关系分的越细致越好。很多时候,个股的龙头也会因事件性而改变。比如和而泰跟东软载波,都是智能家居,但是和而泰因事件性的高送转,变成了龙一,所以东软就成了跟风。买股,死也要死在龙一上面,这是大概率原则,靠强势你才能赚钱,所以买强势股反抽胜算要你买弱势股超跌还好。


如果该概念板块大涨,其中某个股当日涨停,从哪些方面来判断明日是否要买进呢?也就是说如何判断是上车还是陷阱呢?

如果你确定这个题材是中线题材,那么劝你不要激情追涨,因为一只股成妖,主力肯定有个建仓的过程,不经过洗盘的股肯定走不长远。所以主力没有建仓完毕,肯定不会连续拉升让散户跟着吃肉。这个时候我们耐心布局第二波就好。这里面布局的时候有个原则,观察量,观察分时走势,主力介入的是否深入,通过放量与净量的关系,可以大致判断。还有就是低吸,尽量选在尾盘收盘前几分钟,这样当日很难吃亏,你赌的第二日继续强势。


说如何把握题材股的第二波上车机会,老司机,带带吧:


盯着第一波龙头的调整情况,他调整完毕,就会带起第二波高潮,通常第二波高潮需要一些消息面的配合。比如,这波的宜通,耐心等他缩量再放量转折点介入就好,最好有净量翻红的配合。消息面呢,据说这月底标准定稿,所以关注消息面的变化。还有就是关注产业消息,有无NB-IOT芯片上市等,成品也需要关注,比如三川的NB-IOT标准的智能水表啥时候上市。


您好!请问如何通过盘面,来发现市场选择的风口呢?

板块指数,板块内龙头个股的表现,板块内涨停个股的数量,这些都是判断市场选择板块热度的方法。板块越热买上龙头最安全,板块越弱,买上跟风最危险。

新能源版块和半导体版块的行情是不是接近尾声了?
下一个风口会在哪里?

新能源的产业链太大了,而且也是包罗万象,比如光伏,核电也是新能源。而通常大家说的新能源汽车,目前并未普及,所以行情远未结束,你至少等公路上跑的汽车至少一半啥是电动车时再考虑行情结束的问题。如果你觉得锂电池太高,不敢买,可以买一些下游的整车,或者零配件的细分细分龙头。总之汽车电子也好,消费电子也好,大发展都需要集成电路半导体大发展,所以这一块还有很长的路要走。

MEMS传感器这题材如何?

这是物联网,消费电子的基础,不过这个板块大涨,最好是有卓越的产品量产,有业绩预期才更好,就怕市场创新不足,没有量产的东西、业绩也就无法爆发了。


炒风口,啥时候就该撤了,看图大阴线?

龙头股领跌的时候



下一个热点是什么,工业4.0会吗

继续看好物联网,OLED,集成电路半导体。


请问用什么软件看版块指数,通达信的版块指数太杂,噪音太多,而且很多股票特别是新概念的版块划分也不准确

我用同花顺看板块,他的概念板块更新很快,交易目前切换到东方财富了,因为服务器比较快


 如果接下来有中级反弹,你认为现在应该潜伏布局哪个板块?谢谢

锂电池为什么会成为大盘的结构性灵魂,因为业绩。很多板块,为什么没有持续表现被证伪了,还是因为业绩。所以我们就关注哪个板块业绩爆发,我们就布局哪个板块。马上中报密集披露了,关注一下业绩大增的是哪些板块。


    
  查看全部

次新股强势就代表大盘弱势,次新股都跳水,大盘就跳水了

如何判断某个题材即将爆发,判定依据是?

首选你要明白,大资金的想法,他建仓后肯定需要高位派发才能赚钱,这个时候就需要风口配合,风口如何来呢?首选是行业面的变化,比如这次物联网,是因为一个标准的建立,使这个行业面产生变化。而聪明的产业资金会悄悄潜伏,而跟风的游资也会看到券商研报的第二天竞价抢筹。而大部分散户都是复盘后,才明白是怎么回事后,导致第二天激情追高。我觉得像这种大题材,肯定会有第二波,大家耐心布局第二波就好,缩量低吸,放量加仓,净量大绿等待,净量翻红建仓,反正你的买点的落脚点一定那个转折点,不确定是否转折时,买几手玩玩就好。

 您平时经常关注哪些网站和软件发的消息呢?

查个股研报,有很多种途径,比如雪球,同花顺app,东方财富app,查某个券商的研报去东方财富官网就好。资讯就太多了,主流资讯比如四大证券报,新闻联播,财经纪新闻都是影响比较大的公众媒体。还有腾讯新闻这种的科技数码板块都是可以看的



如何用比较短的时间来熟悉个股的基本面呢?有时都不知道那个股是什么来的。还有就是上车的时间,有时看好是热点,上车的时间不对一直横盘,当你走了他就开始拉升。

我觉得选股应该自上而下的选股,单独看一只个股无意义的,游资是否拉他,要么他是龙头,要么就是跟风龙头。这个时候你要判断板块的热度,理清个股的关系。这个关系分的越细致越好。很多时候,个股的龙头也会因事件性而改变。比如和而泰跟东软载波,都是智能家居,但是和而泰因事件性的高送转,变成了龙一,所以东软就成了跟风。买股,死也要死在龙一上面,这是大概率原则,靠强势你才能赚钱,所以买强势股反抽胜算要你买弱势股超跌还好。


如果该概念板块大涨,其中某个股当日涨停,从哪些方面来判断明日是否要买进呢?也就是说如何判断是上车还是陷阱呢?

如果你确定这个题材是中线题材,那么劝你不要激情追涨,因为一只股成妖,主力肯定有个建仓的过程,不经过洗盘的股肯定走不长远。所以主力没有建仓完毕,肯定不会连续拉升让散户跟着吃肉。这个时候我们耐心布局第二波就好。这里面布局的时候有个原则,观察量,观察分时走势,主力介入的是否深入,通过放量与净量的关系,可以大致判断。还有就是低吸,尽量选在尾盘收盘前几分钟,这样当日很难吃亏,你赌的第二日继续强势。


说如何把握题材股的第二波上车机会,老司机,带带吧:


盯着第一波龙头的调整情况,他调整完毕,就会带起第二波高潮,通常第二波高潮需要一些消息面的配合。比如,这波的宜通,耐心等他缩量再放量转折点介入就好,最好有净量翻红的配合。消息面呢,据说这月底标准定稿,所以关注消息面的变化。还有就是关注产业消息,有无NB-IOT芯片上市等,成品也需要关注,比如三川的NB-IOT标准的智能水表啥时候上市。


您好!请问如何通过盘面,来发现市场选择的风口呢?

板块指数,板块内龙头个股的表现,板块内涨停个股的数量,这些都是判断市场选择板块热度的方法。板块越热买上龙头最安全,板块越弱,买上跟风最危险。

新能源版块和半导体版块的行情是不是接近尾声了?
下一个风口会在哪里?

新能源的产业链太大了,而且也是包罗万象,比如光伏,核电也是新能源。而通常大家说的新能源汽车,目前并未普及,所以行情远未结束,你至少等公路上跑的汽车至少一半啥是电动车时再考虑行情结束的问题。如果你觉得锂电池太高,不敢买,可以买一些下游的整车,或者零配件的细分细分龙头。总之汽车电子也好,消费电子也好,大发展都需要集成电路半导体大发展,所以这一块还有很长的路要走。

MEMS传感器这题材如何?

这是物联网,消费电子的基础,不过这个板块大涨,最好是有卓越的产品量产,有业绩预期才更好,就怕市场创新不足,没有量产的东西、业绩也就无法爆发了。


炒风口,啥时候就该撤了,看图大阴线?

龙头股领跌的时候



下一个热点是什么,工业4.0会吗

继续看好物联网,OLED,集成电路半导体。


请问用什么软件看版块指数,通达信的版块指数太杂,噪音太多,而且很多股票特别是新概念的版块划分也不准确

我用同花顺看板块,他的概念板块更新很快,交易目前切换到东方财富了,因为服务器比较快


 如果接下来有中级反弹,你认为现在应该潜伏布局哪个板块?谢谢

锂电池为什么会成为大盘的结构性灵魂,因为业绩。很多板块,为什么没有持续表现被证伪了,还是因为业绩。所以我们就关注哪个板块业绩爆发,我们就布局哪个板块。马上中报密集披露了,关注一下业绩大增的是哪些板块。


    
 

雪人股份 大宗交易分析 寻找主力痕迹

股票李魔佛 发表了文章 • 0 个评论 • 3158 次浏览 • 2016-06-21 08:57 • 来自相关话题

雪人20日增持完毕,股价接近涨停。 




而最近大宗交易频繁。
 





 
在6.6日大股东进行减持,接盘的是 东北证券股份有限公司福州五一中路证券营业部 和 长城国瑞证券有限公司福州五一北路证券营业部,中信建投证券股份有限公司北京太阳宫中路证券营业部
买入了约1.5亿。

前两者都是福州五一路。而今天公告说员工计划持股完毕,大宗交易里头再次出现 了福州五一路,可是卖出方里也是福州五一路。 但是成交价却比6.6日的还低,说明6.20日雪人股份进行了对倒。 大宗交易上看明显就是同一伙人在左手倒右手。

以后主力应该就是福州五一路。
  查看全部
雪人20日增持完毕,股价接近涨停。 
QQ图片20160621082846.png

而最近大宗交易频繁。
 

QQ图片20160621082534.png

 
在6.6日大股东进行减持,接盘的是 东北证券股份有限公司福州五一中路证券营业部 和 长城国瑞证券有限公司福州五一北路证券营业部,中信建投证券股份有限公司北京太阳宫中路证券营业部
买入了约1.5亿。

前两者都是福州五一路。而今天公告说员工计划持股完毕,大宗交易里头再次出现 了福州五一路,可是卖出方里也是福州五一路。 但是成交价却比6.6日的还低,说明6.20日雪人股份进行了对倒。 大宗交易上看明显就是同一伙人在左手倒右手。

以后主力应该就是福州五一路。
 

scrapy 爬虫执行之前 如何运行自定义的函数来初始化一些数据?

回复

python低调的哥哥 回复了问题 • 2 人关注 • 1 个回复 • 9049 次浏览 • 2016-06-20 18:25 • 来自相关话题

ubuntu git 彩色显示

Linux李魔佛 发表了文章 • 0 个评论 • 3373 次浏览 • 2016-06-20 11:01 • 来自相关话题

ubuntu下需要手动配置一下的
可以在终端里敲入以下命令

alec@PC$ git config --global color.status auto
alec@PC$ git config --global color.diff auto
alec@PC$ git config --global color.branch auto
alec@PC$ git config --global color.interactive auto 查看全部
ubuntu下需要手动配置一下的
可以在终端里敲入以下命令

alec@PC$ git config --global color.status auto
alec@PC$ git config --global color.diff auto
alec@PC$ git config --global color.branch auto
alec@PC$ git config --global color.interactive auto

python中字典赋值常见错误

python李魔佛 发表了文章 • 0 个评论 • 3471 次浏览 • 2016-06-19 11:39 • 来自相关话题

初学Python,在学到字典时,出现了一个疑问,见下两个算例:
算例一:>>> x = { }
>>> y = x
>>> x = { 'a' : 'b' }
>>> y
>>> { }
算例二:>>> x = { }
>>> y = x
>>> x['a'] = 'b'
>>> y
>>> { 'a' : 'b' }

疑问:为什么算例一中,给x赋值后,y没变(还是空字典),而算例二中,对x进行添加项的操作后,y就会同步变化。
 
 
解答:

y = x 那么x,y 是对同一个对象的引用。
算例一
中x = { 'a' : 'b' } x引用了一个新的字典对象
所以出现你说的情况。
算例二:修改y,x 引用的同一字典,所以出现你说的情况。

可以加id(x), id(y) ,如果id() 函数的返回值相同,表示是对同一个对象的引用。


  查看全部
初学Python,在学到字典时,出现了一个疑问,见下两个算例:
算例一:
>>> x = { }
>>> y = x
>>> x = { 'a' : 'b' }
>>> y
>>> { }

算例二:
>>> x = { }
>>> y = x
>>> x['a'] = 'b'
>>> y
>>> { 'a' : 'b' }


疑问:为什么算例一中,给x赋值后,y没变(还是空字典),而算例二中,对x进行添加项的操作后,y就会同步变化。
 
 
解答:

y = x 那么x,y 是对同一个对象的引用。
算例一
中x = { 'a' : 'b' } x引用了一个新的字典对象
所以出现你说的情况。
算例二:修改y,x 引用的同一字典,所以出现你说的情况。

可以加id(x), id(y) ,如果id() 函数的返回值相同,表示是对同一个对象的引用。


 

深圳是一个移民城市,且是一个排外的移民城市

量化交易李魔佛 发表了文章 • 0 个评论 • 4664 次浏览 • 2016-06-18 07:53 • 来自相关话题

医疗体系1.广东省内实施的省内医保即时结算,就是你拿着你的医保卡可以到指定的医院去看病,直接可以刷医保卡。
目前省内已经有71家医院支持这一政策。
 










 





 
一线城市的深圳,只有可怜的一家,而且还是一家在龙岗的医院,关外的偏远地方的某家名不经传的医院。
 
 
 
2. 摇号
大量的混动车,丰田的,雷克萨斯的,统统被限制了,只能BYD的混动才能上,真的日了狗了了。 查看全部
医疗体系1.广东省内实施的省内医保即时结算,就是你拿着你的医保卡可以到指定的医院去看病,直接可以刷医保卡。
目前省内已经有71家医院支持这一政策。
 

6c0b8441b3db187142cb2c.jpg


6c0b8441b3db187142d32e.jpg

 

6c0b8441b3db187142d831.jpg

 
一线城市的深圳,只有可怜的一家,而且还是一家在龙岗的医院,关外的偏远地方的某家名不经传的医院。
 
 
 
2. 摇号
大量的混动车,丰田的,雷克萨斯的,统统被限制了,只能BYD的混动才能上,真的日了狗了了。

linux目录跳转利器 z.sh

Linux李魔佛 发表了文章 • 0 个评论 • 6584 次浏览 • 2016-06-17 17:32 • 来自相关话题

使用linux的朋友,经常要在命令下面运行命令,并且频繁地在不同的目录切换, 不断的cd ..,cd ../../../../../../bin,或者cd ../../../../../../../../../, 或者cd ~/Download/bin/
 
浪费时间且效率低下。
 
推荐大家使用一个小脚本,可以快速切换目录,不需要经常cd了。
 
拷贝下面的代码,保存为z.sh,放在用户目录下,/home/xxxx, xxx为用户名, 然后 给予 777权限, chmod 777 z.sh
 
然后 修改 .bashrc 文件, vim ~/.bashrc
 
在文件的最后添加一句 source ~/z.sh
 
然后保存.bashrc
 
然后运行 source ~./bashrc , 然后就马上生效了。
 
然后你进入到某一个目录,比如 /home/user/build/data/bin/hello/, 运行 z
 
系统会纪录你的hello目录一次,
 
下一次在其他目录比如在/etc/apt/,如果要跳转到 /home/user/build/data/bin/hello/,
直接运行 z hello 就可以了。# Copyright (c) 2009 rupa deadwyler under the WTFPL license

# maintains a jump-list of the directories you actually use
#
# INSTALL:
# * put something like this in your .bashrc/.zshrc:
# . /path/to/z.sh
# * cd around for a while to build up the db
# * PROFIT!!
# * optionally:
# set $_Z_CMD in .bashrc/.zshrc to change the command (default z).
# set $_Z_DATA in .bashrc/.zshrc to change the datafile (default ~/.z).
# set $_Z_NO_RESOLVE_SYMLINKS to prevent symlink resolution.
# set $_Z_NO_PROMPT_COMMAND if you're handling PROMPT_COMMAND yourself.
# set $_Z_EXCLUDE_DIRS to an array of directories to exclude.
# set $_Z_OWNER to your username if you want use z while sudo with $HOME kept
#
# USE:
# * z foo # cd to most frecent dir matching foo
# * z foo bar # cd to most frecent dir matching foo and bar
# * z -r foo # cd to highest ranked dir matching foo
# * z -t foo # cd to most recently accessed dir matching foo
# * z -l foo # list matches instead of cd
# * z -c foo # restrict matches to subdirs of $PWD

[ -d "${_Z_DATA:-$HOME/.z}" ] && {
echo "ERROR: z.sh's datafile (${_Z_DATA:-$HOME/.z}) is a directory."
}

_z() {

local datafile="${_Z_DATA:-$HOME/.z}"

# bail if we don't own ~/.z and $_Z_OWNER not set
[ -z "$_Z_OWNER" -a -f "$datafile" -a ! -O "$datafile" ] && return

# add entries
if [ "$1" = "--add" ]; then
shift

# $HOME isn't worth matching
[ "$*" = "$HOME" ] && return

# don't track excluded directory trees
local exclude
for exclude in "${_Z_EXCLUDE_DIRS[@]}"; do
case "$*" in "$exclude*") return;; esac
done

# maintain the data file
local tempfile="$datafile.$RANDOM"
while read line; do
# only count directories
[ -d "${line%%\|*}" ] && echo $line
done < "$datafile" | awk -v path="$*" -v now="$(date +%s)" -F"|" '
BEGIN {
rank[path] = 1
time[path] = now
}
$2 >= 1 {
# drop ranks below 1
if( $1 == path ) {
rank[$1] = $2 + 1
time[$1] = now
} else {
rank[$1] = $2
time[$1] = $3
}
count += $2
}
END {
if( count > 9000 ) {
# aging
for( x in rank ) print x "|" 0.99*rank[x] "|" time[x]
} else for( x in rank ) print x "|" rank[x] "|" time[x]
}
' 2>/dev/null >| "$tempfile"
# do our best to avoid clobbering the datafile in a race condition
if [ $? -ne 0 -a -f "$datafile" ]; then
env rm -f "$tempfile"
else
[ "$_Z_OWNER" ] && chown $_Z_OWNER:$(id -ng $_Z_OWNER) "$tempfile"
env mv -f "$tempfile" "$datafile" || env rm -f "$tempfile"
fi

# tab completion
elif [ "$1" = "--complete" -a -s "$datafile" ]; then
while read line; do
[ -d "${line%%\|*}" ] && echo $line
done < "$datafile" | awk -v q="$2" -F"|" '
BEGIN {
if( q == tolower(q) ) imatch = 1
q = substr(q, 3)
gsub(" ", ".*", q)
}
{
if( imatch ) {
if( tolower($1) ~ tolower(q) ) print $1
} else if( $1 ~ q ) print $1
}
' 2>/dev/null

else
# list/go
while [ "$1" ]; do case "$1" in
--) while [ "$1" ]; do shift; local fnd="$fnd${fnd:+ }$1";done;;
-*) local opt=${1:1}; while [ "$opt" ]; do case ${opt:0:1} in
c) local fnd="^$PWD $fnd";;
h) echo "${_Z_CMD:-z} [-chlrtx] args" >&2; return;;
x) sed -i -e "\:^${PWD}|.*:d" "$datafile";;
l) local list=1;;
r) local typ="rank";;
t) local typ="recent";;
esac; opt=${opt:1}; done;;
*) local fnd="$fnd${fnd:+ }$1";;
esac; local last=$1; [ "$#" -gt 0 ] && shift; done
[ "$fnd" -a "$fnd" != "^$PWD " ] || local list=1

# if we hit enter on a completion just go there
case "$last" in
# completions will always start with /
/*) [ -z "$list" -a -d "$last" ] && cd "$last" && return;;
esac

# no file yet
[ -f "$datafile" ] || return

local cd
cd="$(while read line; do
[ -d "${line%%\|*}" ] && echo $line
done < "$datafile" | awk -v t="$(date +%s)" -v list="$list" -v typ="$typ" -v q="$fnd" -F"|" '
function frecent(rank, time) {
# relate frequency and time
dx = t - time
if( dx < 3600 ) return rank * 4
if( dx < 86400 ) return rank * 2
if( dx < 604800 ) return rank / 2
return rank / 4
}
function output(files, out, common) {
# list or return the desired directory
if( list ) {
cmd = "sort -n >&2"
for( x in files ) {
if( files[x] ) printf "%-10s %s\n", files[x], x | cmd
}
if( common ) {
printf "%-10s %s\n", "common:", common > "/dev/stderr"
}
} else {
if( common ) out = common
print out
}
}
function common(matches) {
# find the common root of a list of matches, if it exists
for( x in matches ) {
if( matches[x] && (!short || length(x) < length(short)) ) {
short = x
}
}
if( short == "/" ) return
# use a copy to escape special characters, as we want to return
# the original. yeah, this escaping is awful.
clean_short = short
gsub(/\[\(\)\[\]\|\]/, "\\\\&", clean_short)
for( x in matches ) if( matches[x] && x !~ clean_short ) return
return short
}
BEGIN {
gsub(" ", ".*", q)
hi_rank = ihi_rank = -9999999999
}
{
if( typ == "rank" ) {
rank = $2
} else if( typ == "recent" ) {
rank = $3 - t
} else rank = frecent($2, $3)
if( $1 ~ q ) {
matches[$1] = rank
} else if( tolower($1) ~ tolower(q) ) imatches[$1] = rank
if( matches[$1] && matches[$1] > hi_rank ) {
best_match = $1
hi_rank = matches[$1]
} else if( imatches[$1] && imatches[$1] > ihi_rank ) {
ibest_match = $1
ihi_rank = imatches[$1]
}
}
END {
# prefer case sensitive
if( best_match ) {
output(matches, best_match, common(matches))
} else if( ibest_match ) {
output(imatches, ibest_match, common(imatches))
}
}
')"
[ $? -gt 0 ] && return
[ "$cd" ] && cd "$cd"
fi
}

alias ${_Z_CMD:-z}='_z 2>&1'

[ "$_Z_NO_RESOLVE_SYMLINKS" ] || _Z_RESOLVE_SYMLINKS="-P"

if type compctl >/dev/null 2>&1; then
# zsh
[ "$_Z_NO_PROMPT_COMMAND" ] || {
# populate directory list, avoid clobbering any other precmds.
if [ "$_Z_NO_RESOLVE_SYMLINKS" ]; then
_z_precmd() {
_z --add "${PWD:a}"
}
else
_z_precmd() {
_z --add "${PWD:A}"
}
fi
[[ -n "${precmd_functions[(r)_z_precmd]}" ]] || {
precmd_functions[$(($#precmd_functions+1))]=_z_precmd
}
}
_z_zsh_tab_completion() {
# tab completion
local compl
read -l compl
reply=(${(f)"$(_z --complete "$compl")"})
}
compctl -U -K _z_zsh_tab_completion _z
elif type complete >/dev/null 2>&1; then
# bash
# tab completion
complete -o filenames -C '_z --complete "$COMP_LINE"' ${_Z_CMD:-z}
[ "$_Z_NO_PROMPT_COMMAND" ] || {
# populate directory list. avoid clobbering other PROMPT_COMMANDs.
grep "_z --add" <<< "$PROMPT_COMMAND" >/dev/null || {
PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''_z --add "$(command pwd '$_Z_RESOLVE_SYMLINKS' 2>/dev/null)" 2>/dev/null;'
}
}
fi 查看全部
使用linux的朋友,经常要在命令下面运行命令,并且频繁地在不同的目录切换, 不断的cd ..,cd ../../../../../../bin,或者cd ../../../../../../../../../, 或者cd ~/Download/bin/
 
浪费时间且效率低下。
 
推荐大家使用一个小脚本,可以快速切换目录,不需要经常cd了。
 
拷贝下面的代码,保存为z.sh,放在用户目录下,/home/xxxx, xxx为用户名, 然后 给予 777权限, chmod 777 z.sh
 
然后 修改 .bashrc 文件, vim ~/.bashrc
 
在文件的最后添加一句 source ~/z.sh
 
然后保存.bashrc
 
然后运行 source ~./bashrc , 然后就马上生效了。
 
然后你进入到某一个目录,比如 /home/user/build/data/bin/hello/, 运行 z
 
系统会纪录你的hello目录一次,
 
下一次在其他目录比如在/etc/apt/,如果要跳转到 /home/user/build/data/bin/hello/,
直接运行 z hello 就可以了。
# Copyright (c) 2009 rupa deadwyler under the WTFPL license

# maintains a jump-list of the directories you actually use
#
# INSTALL:
# * put something like this in your .bashrc/.zshrc:
# . /path/to/z.sh
# * cd around for a while to build up the db
# * PROFIT!!
# * optionally:
# set $_Z_CMD in .bashrc/.zshrc to change the command (default z).
# set $_Z_DATA in .bashrc/.zshrc to change the datafile (default ~/.z).
# set $_Z_NO_RESOLVE_SYMLINKS to prevent symlink resolution.
# set $_Z_NO_PROMPT_COMMAND if you're handling PROMPT_COMMAND yourself.
# set $_Z_EXCLUDE_DIRS to an array of directories to exclude.
# set $_Z_OWNER to your username if you want use z while sudo with $HOME kept
#
# USE:
# * z foo # cd to most frecent dir matching foo
# * z foo bar # cd to most frecent dir matching foo and bar
# * z -r foo # cd to highest ranked dir matching foo
# * z -t foo # cd to most recently accessed dir matching foo
# * z -l foo # list matches instead of cd
# * z -c foo # restrict matches to subdirs of $PWD

[ -d "${_Z_DATA:-$HOME/.z}" ] && {
echo "ERROR: z.sh's datafile (${_Z_DATA:-$HOME/.z}) is a directory."
}

_z() {

local datafile="${_Z_DATA:-$HOME/.z}"

# bail if we don't own ~/.z and $_Z_OWNER not set
[ -z "$_Z_OWNER" -a -f "$datafile" -a ! -O "$datafile" ] && return

# add entries
if [ "$1" = "--add" ]; then
shift

# $HOME isn't worth matching
[ "$*" = "$HOME" ] && return

# don't track excluded directory trees
local exclude
for exclude in "${_Z_EXCLUDE_DIRS[@]}"; do
case "$*" in "$exclude*") return;; esac
done

# maintain the data file
local tempfile="$datafile.$RANDOM"
while read line; do
# only count directories
[ -d "${line%%\|*}" ] && echo $line
done < "$datafile" | awk -v path="$*" -v now="$(date +%s)" -F"|" '
BEGIN {
rank[path] = 1
time[path] = now
}
$2 >= 1 {
# drop ranks below 1
if( $1 == path ) {
rank[$1] = $2 + 1
time[$1] = now
} else {
rank[$1] = $2
time[$1] = $3
}
count += $2
}
END {
if( count > 9000 ) {
# aging
for( x in rank ) print x "|" 0.99*rank[x] "|" time[x]
} else for( x in rank ) print x "|" rank[x] "|" time[x]
}
' 2>/dev/null >| "$tempfile"
# do our best to avoid clobbering the datafile in a race condition
if [ $? -ne 0 -a -f "$datafile" ]; then
env rm -f "$tempfile"
else
[ "$_Z_OWNER" ] && chown $_Z_OWNER:$(id -ng $_Z_OWNER) "$tempfile"
env mv -f "$tempfile" "$datafile" || env rm -f "$tempfile"
fi

# tab completion
elif [ "$1" = "--complete" -a -s "$datafile" ]; then
while read line; do
[ -d "${line%%\|*}" ] && echo $line
done < "$datafile" | awk -v q="$2" -F"|" '
BEGIN {
if( q == tolower(q) ) imatch = 1
q = substr(q, 3)
gsub(" ", ".*", q)
}
{
if( imatch ) {
if( tolower($1) ~ tolower(q) ) print $1
} else if( $1 ~ q ) print $1
}
' 2>/dev/null

else
# list/go
while [ "$1" ]; do case "$1" in
--) while [ "$1" ]; do shift; local fnd="$fnd${fnd:+ }$1";done;;
-*) local opt=${1:1}; while [ "$opt" ]; do case ${opt:0:1} in
c) local fnd="^$PWD $fnd";;
h) echo "${_Z_CMD:-z} [-chlrtx] args" >&2; return;;
x) sed -i -e "\:^${PWD}|.*:d" "$datafile";;
l) local list=1;;
r) local typ="rank";;
t) local typ="recent";;
esac; opt=${opt:1}; done;;
*) local fnd="$fnd${fnd:+ }$1";;
esac; local last=$1; [ "$#" -gt 0 ] && shift; done
[ "$fnd" -a "$fnd" != "^$PWD " ] || local list=1

# if we hit enter on a completion just go there
case "$last" in
# completions will always start with /
/*) [ -z "$list" -a -d "$last" ] && cd "$last" && return;;
esac

# no file yet
[ -f "$datafile" ] || return

local cd
cd="$(while read line; do
[ -d "${line%%\|*}" ] && echo $line
done < "$datafile" | awk -v t="$(date +%s)" -v list="$list" -v typ="$typ" -v q="$fnd" -F"|" '
function frecent(rank, time) {
# relate frequency and time
dx = t - time
if( dx < 3600 ) return rank * 4
if( dx < 86400 ) return rank * 2
if( dx < 604800 ) return rank / 2
return rank / 4
}
function output(files, out, common) {
# list or return the desired directory
if( list ) {
cmd = "sort -n >&2"
for( x in files ) {
if( files[x] ) printf "%-10s %s\n", files[x], x | cmd
}
if( common ) {
printf "%-10s %s\n", "common:", common > "/dev/stderr"
}
} else {
if( common ) out = common
print out
}
}
function common(matches) {
# find the common root of a list of matches, if it exists
for( x in matches ) {
if( matches[x] && (!short || length(x) < length(short)) ) {
short = x
}
}
if( short == "/" ) return
# use a copy to escape special characters, as we want to return
# the original. yeah, this escaping is awful.
clean_short = short
gsub(/\[\(\)\[\]\|\]/, "\\\\&", clean_short)
for( x in matches ) if( matches[x] && x !~ clean_short ) return
return short
}
BEGIN {
gsub(" ", ".*", q)
hi_rank = ihi_rank = -9999999999
}
{
if( typ == "rank" ) {
rank = $2
} else if( typ == "recent" ) {
rank = $3 - t
} else rank = frecent($2, $3)
if( $1 ~ q ) {
matches[$1] = rank
} else if( tolower($1) ~ tolower(q) ) imatches[$1] = rank
if( matches[$1] && matches[$1] > hi_rank ) {
best_match = $1
hi_rank = matches[$1]
} else if( imatches[$1] && imatches[$1] > ihi_rank ) {
ibest_match = $1
ihi_rank = imatches[$1]
}
}
END {
# prefer case sensitive
if( best_match ) {
output(matches, best_match, common(matches))
} else if( ibest_match ) {
output(imatches, ibest_match, common(imatches))
}
}
')"
[ $? -gt 0 ] && return
[ "$cd" ] && cd "$cd"
fi
}

alias ${_Z_CMD:-z}='_z 2>&1'

[ "$_Z_NO_RESOLVE_SYMLINKS" ] || _Z_RESOLVE_SYMLINKS="-P"

if type compctl >/dev/null 2>&1; then
# zsh
[ "$_Z_NO_PROMPT_COMMAND" ] || {
# populate directory list, avoid clobbering any other precmds.
if [ "$_Z_NO_RESOLVE_SYMLINKS" ]; then
_z_precmd() {
_z --add "${PWD:a}"
}
else
_z_precmd() {
_z --add "${PWD:A}"
}
fi
[[ -n "${precmd_functions[(r)_z_precmd]}" ]] || {
precmd_functions[$(($#precmd_functions+1))]=_z_precmd
}
}
_z_zsh_tab_completion() {
# tab completion
local compl
read -l compl
reply=(${(f)"$(_z --complete "$compl")"})
}
compctl -U -K _z_zsh_tab_completion _z
elif type complete >/dev/null 2>&1; then
# bash
# tab completion
complete -o filenames -C '_z --complete "$COMP_LINE"' ${_Z_CMD:-z}
[ "$_Z_NO_PROMPT_COMMAND" ] || {
# populate directory list. avoid clobbering other PROMPT_COMMANDs.
grep "_z --add" <<< "$PROMPT_COMMAND" >/dev/null || {
PROMPT_COMMAND="$PROMPT_COMMAND"$'\n''_z --add "$(command pwd '$_Z_RESOLVE_SYMLINKS' 2>/dev/null)" 2>/dev/null;'
}
}
fi