python 下使用beautifulsoup还是lxml ?

刚开始接触爬虫是从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节点解析的速度之快。
 
  
继续阅读 »
刚开始接触爬虫是从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 批量获取色影无忌 获奖图片

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

 

色影无忌_副本.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)
继续阅读 »
色影无忌上的图片很多都可以直接拿来做壁纸的,而且发布面不会太广,基本不会和市面上大部分的壁纸或者图片素材重复。 关键还没有水印。 这么良心的图片服务商哪里找呀~~
 

 

色影无忌_副本.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提供了内置的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 收起阅读 »

房事一谈

《》
《》

换手率 你未必懂的地方

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

中国核建.PNG

 
换手率为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个涨停板左右。
 
 
 
  收起阅读 »

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


留欧_副本.png

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

1.JPG


2.JPG


3.JPG


4.JPG

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

留欧_副本.png

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

1.JPG


2.JPG


3.JPG


4.JPG

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

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

延华智能的概念:

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

延华智能.png

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

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

延华智能.png

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

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

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

首先确定安装了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文件

git
默认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就可以了。 收起阅读 »

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

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

 

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

 

 
https://www.sourcetreeapp.com/download/ 收起阅读 »

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

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

6.21雪人_.JPG

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

6.21雪人_.JPG

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

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

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

柳青.PNG


 
百度百科的资料
 
柳青

 

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

 编辑柳青, 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]  。 收起阅读 »

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


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

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

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

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

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



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

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


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

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


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


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


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

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

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

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

MEMS传感器这题材如何?

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


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

龙头股领跌的时候



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

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


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

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


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

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


    
 
继续阅读 »

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

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

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

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

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



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

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


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

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


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


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


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

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

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

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

MEMS传感器这题材如何?

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


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

龙头股领跌的时候



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

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


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

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


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

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


    
  收起阅读 »

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

雪人20日增持完毕,股价接近涨停。 
QQ图片20160621082846.png

而最近大宗交易频繁。
 

QQ图片20160621082534.png

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

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

以后主力应该就是福州五一路。
 
继续阅读 »
雪人20日增持完毕,股价接近涨停。 
QQ图片20160621082846.png

而最近大宗交易频繁。
 

QQ图片20160621082534.png

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

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

以后主力应该就是福州五一路。
  收起阅读 »

ubuntu git 彩色显示

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,在学到字典时,出现了一个疑问,见下两个算例:
算例一:
>>> 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() 函数的返回值相同,表示是对同一个对象的引用。


  收起阅读 »

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

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

6c0b8441b3db187142cb2c.jpg


6c0b8441b3db187142d32e.jpg

 

6c0b8441b3db187142d831.jpg

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

6c0b8441b3db187142cb2c.jpg


6c0b8441b3db187142d32e.jpg

 

6c0b8441b3db187142d831.jpg

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

linux目录跳转利器 z.sh

使用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
收起阅读 »

Useful Link

JSON Viewer online: jsonviewer.stack.hu

如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据

亲测: ubuntu安装scrapy 避免了很多的依赖关系
http://www.cnblogs.com/FreeAqu ... .html
继续阅读 »
JSON Viewer online: jsonviewer.stack.hu

如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据

亲测: ubuntu安装scrapy 避免了很多的依赖关系
http://www.cnblogs.com/FreeAqu ... .html 收起阅读 »

ubuntu的一条高危命令:sudo apt-get install -f

sudo apt-get install -f
本来这一条
sudo apt-get install -f
本来这一条

Notepad

 
 2016.6.12 --Done

subprocess communicate
http://www.linuxidc.com/Linux/2013-02/79117.htm

使用文件替代:
http://www.aikaiyuan.com/4705.html
继续阅读 »
 
 2016.6.12 --Done

subprocess communicate
http://www.linuxidc.com/Linux/2013-02/79117.htm

使用文件替代:
http://www.aikaiyuan.com/4705.html 收起阅读 »

subprocess popen 使用PIPE 阻塞进程,导致程序无法继续运行

 
subprocess用于在python内部创建一个子进程,比如调用shell脚本等。

举例:
p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, shell = True)
p.wait()
// hang here
print "finished"


在python的官方文档中对这个进行了解释:http://docs.python.org/2/library/subprocess.html

原因是stdout产生的内容太多,超过了系统的buffer

解决方法是使用communicate()方法。
p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, shell = True)
stdout, stderr = p.communicate()
p.wait()
print "Finsih"
继续阅读 »
 
subprocess用于在python内部创建一个子进程,比如调用shell脚本等。

举例:
p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, shell = True)
p.wait()
// hang here
print "finished"


在python的官方文档中对这个进行了解释:http://docs.python.org/2/library/subprocess.html

原因是stdout产生的内容太多,超过了系统的buffer

解决方法是使用communicate()方法。
p = subprocess.Popen(cmd, stdout = subprocess.PIPE, stdin = subprocess.PIPE, shell = True)
stdout, stderr = p.communicate()
p.wait()
print "Finsih"
收起阅读 »

抓取 知乎日报 中的 大误 系类文章,生成电子书推送到kindle

无意中看了知乎日报的大误系列的一篇文章,之后就停不下来了,大误是虚构故事,知乎上神人虚构故事的功力要高于网络上的很多写手啊!! 看的欲罢不能,不过还是那句,手机屏幕太小,连续看几个小时很疲劳,而且每次都要联网去看。 
 
所以写了下面的python脚本,一劳永逸。 脚本抓取大误从开始到现在的所有文章,并推送到你自己的kindle账号。
 

大误.JPG
# -*- coding=utf-8 -*-
__author__ = 'rocky @ www.30daydo.com'
import urllib2, re, os, codecs,sys,datetime
from bs4 import BeautifulSoup
# example https://zhhrb.sinaapp.com/index.php?date=20160610
from mail_template import MailAtt
reload(sys)
sys.setdefaultencoding('utf-8')

def save2file(filename, content):
filename = filename + ".txt"
f = codecs.open(filename, 'a', encoding='utf-8')
f.write(content)
f.close()


def getPost(date_time, filter_p):
url = 'https://zhhrb.sinaapp.com/index.php?date=' + date_time
user_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
header = {"User-Agent": user_agent}
req = urllib2.Request(url, headers=header)
resp = urllib2.urlopen(req)
content = resp.read()
p = re.compile('<h2 class="question-title">(.*)</h2></br></a>')
result = re.findall(p, content)
count = -1
row = -1
for i in result:
#print i
return_content = re.findall(filter_p, i)

if return_content:
row = count
break
#print return_content[0]
count = count + 1
#print row
if row == -1:
return 0
link_p = re.compile('<a href="(.*)" target="_blank" rel="nofollow">')
link_result = re.findall(link_p, content)[row + 1]
print link_result
result_req = urllib2.Request(link_result, headers=header)
result_resp = urllib2.urlopen(result_req)
#result_content= result_resp.read()
#print result_content

bs = BeautifulSoup(result_resp, "html.parser")
title = bs.title.string.strip()
#print title
filename = re.sub('[\/:*?"<>|]', '-', title)
print filename
print date_time
save2file(filename, title)
save2file(filename, "\n\n\n\n--------------------%s Detail----------------------\n\n" %date_time)

detail_content = bs.find_all('div', class_='content')

for i in detail_content:
#print i
save2file(filename,"\n\n-------------------------answer -------------------------\n\n")
for j in i.strings:

save2file(filename, j)

smtp_server = 'smtp.126.com'
from_mail = sys.argv[1]
password = sys.argv[2]
to_mail = 'xxxxx@kindle.cn'
send_kindle = MailAtt(smtp_server, from_mail, password, to_mail)
send_kindle.send_txt(filename)


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)


date_time = '20160611'
filter_p = re.compile('大误.*')
ori_day=datetime.date(datetime.date.today().year,01,01)
t=datetime.date(datetime.date.today().year,datetime.date.today().month,datetime.date.today().day)
delta=(t-ori_day).days
print delta
for i in range(delta):
day=datetime.date(datetime.date.today().year,01,01)+datetime.timedelta(i)
getPost(day.strftime("%Y%m%d"),filter_p)
#getPost(date_time, filter_p)

if __name__ == "__main__":
main()





github: https://github.com/Rockyzsu/zhihu_daily__kindle
 
上面的代码可以稍作修改,就可以抓取瞎扯或者深夜食堂的系列文章。
 
附福利:
http://pan.baidu.com/s/1kVewz59
所有的知乎日报的大误文章。(截止2016/6/12日)
继续阅读 »
无意中看了知乎日报的大误系列的一篇文章,之后就停不下来了,大误是虚构故事,知乎上神人虚构故事的功力要高于网络上的很多写手啊!! 看的欲罢不能,不过还是那句,手机屏幕太小,连续看几个小时很疲劳,而且每次都要联网去看。 
 
所以写了下面的python脚本,一劳永逸。 脚本抓取大误从开始到现在的所有文章,并推送到你自己的kindle账号。
 

大误.JPG
# -*- coding=utf-8 -*-
__author__ = 'rocky @ www.30daydo.com'
import urllib2, re, os, codecs,sys,datetime
from bs4 import BeautifulSoup
# example https://zhhrb.sinaapp.com/index.php?date=20160610
from mail_template import MailAtt
reload(sys)
sys.setdefaultencoding('utf-8')

def save2file(filename, content):
filename = filename + ".txt"
f = codecs.open(filename, 'a', encoding='utf-8')
f.write(content)
f.close()


def getPost(date_time, filter_p):
url = 'https://zhhrb.sinaapp.com/index.php?date=' + date_time
user_agent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
header = {"User-Agent": user_agent}
req = urllib2.Request(url, headers=header)
resp = urllib2.urlopen(req)
content = resp.read()
p = re.compile('<h2 class="question-title">(.*)</h2></br></a>')
result = re.findall(p, content)
count = -1
row = -1
for i in result:
#print i
return_content = re.findall(filter_p, i)

if return_content:
row = count
break
#print return_content[0]
count = count + 1
#print row
if row == -1:
return 0
link_p = re.compile('<a href="(.*)" target="_blank" rel="nofollow">')
link_result = re.findall(link_p, content)[row + 1]
print link_result
result_req = urllib2.Request(link_result, headers=header)
result_resp = urllib2.urlopen(result_req)
#result_content= result_resp.read()
#print result_content

bs = BeautifulSoup(result_resp, "html.parser")
title = bs.title.string.strip()
#print title
filename = re.sub('[\/:*?"<>|]', '-', title)
print filename
print date_time
save2file(filename, title)
save2file(filename, "\n\n\n\n--------------------%s Detail----------------------\n\n" %date_time)

detail_content = bs.find_all('div', class_='content')

for i in detail_content:
#print i
save2file(filename,"\n\n-------------------------answer -------------------------\n\n")
for j in i.strings:

save2file(filename, j)

smtp_server = 'smtp.126.com'
from_mail = sys.argv[1]
password = sys.argv[2]
to_mail = 'xxxxx@kindle.cn'
send_kindle = MailAtt(smtp_server, from_mail, password, to_mail)
send_kindle.send_txt(filename)


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)


date_time = '20160611'
filter_p = re.compile('大误.*')
ori_day=datetime.date(datetime.date.today().year,01,01)
t=datetime.date(datetime.date.today().year,datetime.date.today().month,datetime.date.today().day)
delta=(t-ori_day).days
print delta
for i in range(delta):
day=datetime.date(datetime.date.today().year,01,01)+datetime.timedelta(i)
getPost(day.strftime("%Y%m%d"),filter_p)
#getPost(date_time, filter_p)

if __name__ == "__main__":
main()





github: https://github.com/Rockyzsu/zhihu_daily__kindle
 
上面的代码可以稍作修改,就可以抓取瞎扯或者深夜食堂的系列文章。
 
附福利:
http://pan.baidu.com/s/1kVewz59
所有的知乎日报的大误文章。(截止2016/6/12日) 收起阅读 »

金山快盘6月30日停止服务,论坛也被恶意被爆

快盘服务被关停,很多人都不舍得。
因为安装了快盘客户端,所以遇到有部分文件同步问题,所以今天上去快盘的论坛去查查是什么问题。
 
上到论坛吃了一惊,怎么这么多小姐服务广告? 满屏都是。
 

快盘被黑.JPG



快盘被黑4.JPG


快盘被黑3.JPG


 
而且发帖人居然还是版主 !!!
 
其实那些广告贴应该都是假的,因为里面的电话都是同一个人的, 不同地方服务电话都是用同一个人的? 很明显就是想黑电话的机主。(感觉该机主很可能是迅雷的某人,产品经理之类,电话机主是深圳联通用户,有兴趣的人可以继续深入去扒一扒)
 
继续阅读 »
快盘服务被关停,很多人都不舍得。
因为安装了快盘客户端,所以遇到有部分文件同步问题,所以今天上去快盘的论坛去查查是什么问题。
 
上到论坛吃了一惊,怎么这么多小姐服务广告? 满屏都是。
 

快盘被黑.JPG



快盘被黑4.JPG


快盘被黑3.JPG


 
而且发帖人居然还是版主 !!!
 
其实那些广告贴应该都是假的,因为里面的电话都是同一个人的, 不同地方服务电话都是用同一个人的? 很明显就是想黑电话的机主。(感觉该机主很可能是迅雷的某人,产品经理之类,电话机主是深圳联通用户,有兴趣的人可以继续深入去扒一扒)
  收起阅读 »

python 爆解zip压缩文件密码

出于对百度网盘的不信任,加上前阵子百度会把一些侵犯版权的文件清理掉或者一些百度认为的尺度过大的文件进行替换,留下一个4秒的教育视频。 为何不提前告诉用户? 擅自把用户的资料删除,以后用户哪敢随意把资料上传上去呢?
 
抱怨归抱怨,由于现在金山快盘,新浪尾盘都关闭了,速度稍微快点的就只有百度网盘了。 所以我会把文件事先压缩好,加个密码然后上传。
 
可是有时候下载下来却忘记了解压密码,实在蛋疼。 所以需要自己逐一验证密码。 所以就写了这个小脚本。 很简单,没啥技术含量。 
 

crash_zip.JPG

 
 
代码就用图片吧,大家可以上机自己敲敲代码也好。 ctrl+v 代码 其实会养成一种惰性。
 
github: https://github.com/Rockyzsu/zip_crash
 
继续阅读 »
出于对百度网盘的不信任,加上前阵子百度会把一些侵犯版权的文件清理掉或者一些百度认为的尺度过大的文件进行替换,留下一个4秒的教育视频。 为何不提前告诉用户? 擅自把用户的资料删除,以后用户哪敢随意把资料上传上去呢?
 
抱怨归抱怨,由于现在金山快盘,新浪尾盘都关闭了,速度稍微快点的就只有百度网盘了。 所以我会把文件事先压缩好,加个密码然后上传。
 
可是有时候下载下来却忘记了解压密码,实在蛋疼。 所以需要自己逐一验证密码。 所以就写了这个小脚本。 很简单,没啥技术含量。 
 

crash_zip.JPG

 
 
代码就用图片吧,大家可以上机自己敲敲代码也好。 ctrl+v 代码 其实会养成一种惰性。
 
github: https://github.com/Rockyzsu/zip_crash
  收起阅读 »

股市相关书籍

大部分技术分析的书籍我几乎不会拿来看,但是关于博弈,心理分析的书还是会让你颇有收获。
毕竟股市是人与人的博弈的产物。 是一个互道SB的市场。
 
推荐几本很不错的书,顺便附上电子书下载资源吧。
 
股市心理操控术
PDF 电子书
窥探市场上不同的交易心态,交易市场的本质。 所谓的庄家,不过是资金稍微大一点的散户罢了。
下载地址: http://pan.baidu.com/s/1slSUUk9 密码:ig63
继续阅读 »
大部分技术分析的书籍我几乎不会拿来看,但是关于博弈,心理分析的书还是会让你颇有收获。
毕竟股市是人与人的博弈的产物。 是一个互道SB的市场。
 
推荐几本很不错的书,顺便附上电子书下载资源吧。
 
股市心理操控术
PDF 电子书
窥探市场上不同的交易心态,交易市场的本质。 所谓的庄家,不过是资金稍微大一点的散户罢了。
下载地址: http://pan.baidu.com/s/1slSUUk9 密码:ig63 收起阅读 »

批量删除某个目录下所有子目录的指定后缀的文件

平时硬盘中下载了大量的image文件,用做刷机。 下载的文件是tgz格式,刷机前需要用 tar zxvf  xxx.tgz 解压。
日积月累,硬盘空间告急,所以写了下面的脚本用来删除指定的解压文件,但是源解压文件不能够删除,因为后续可能会要继续用这个tgz文件的时候(需要再解压然后刷机)。 如果手动去操作,需要进入每一个文件夹,然后选中tgz,然后反选,然后删除。 很费劲。
 
import os

def isContain(des_str,ori_str):
for i in des_str:
if ori_str == i:
return True
return False


path=os.getcwd()
print path
des_str=['img','cfg','bct','bin','sh','dtb','txt','mk','pem','mk','pk8','xml','lib','pl','blob','dat']
for fpath,dirs,fname in os.walk(path):
#print fname

if fname:
for i in fname:
#print i
name=i.split('.')
if len(name)>=2:
#print name[1]
if isContain(des_str,name[1]):
filepath=os.path.join(fpath,i)
print "delete file %s" %filepath
os.remove(filepath)

github: https://github.com/Rockyzsu/RmFile
 
继续阅读 »
平时硬盘中下载了大量的image文件,用做刷机。 下载的文件是tgz格式,刷机前需要用 tar zxvf  xxx.tgz 解压。
日积月累,硬盘空间告急,所以写了下面的脚本用来删除指定的解压文件,但是源解压文件不能够删除,因为后续可能会要继续用这个tgz文件的时候(需要再解压然后刷机)。 如果手动去操作,需要进入每一个文件夹,然后选中tgz,然后反选,然后删除。 很费劲。
 
import os

def isContain(des_str,ori_str):
for i in des_str:
if ori_str == i:
return True
return False


path=os.getcwd()
print path
des_str=['img','cfg','bct','bin','sh','dtb','txt','mk','pem','mk','pk8','xml','lib','pl','blob','dat']
for fpath,dirs,fname in os.walk(path):
#print fname

if fname:
for i in fname:
#print i
name=i.split('.')
if len(name)>=2:
#print name[1]
if isContain(des_str,name[1]):
filepath=os.path.join(fpath,i)
print "delete file %s" %filepath
os.remove(filepath)

github: https://github.com/Rockyzsu/RmFile
  收起阅读 »

买强势股永远是最有效的赚钱绝招

什么是强势股?凡是上升通道良好,股价一直沿着5、10、20日均线上行的个股就是强势股。只要这种股没有大幅拉升过,没有出巨大的涨幅,很难跌破过30日均线(一般只会跌破20日均线),盘子不大,股价不高,那么,这种股票就值得我们积极跟踪。在股价跌到20日均线时,就可大胆买入,捂上一段时间,很容易获利30%。这种股最明显的特点的就是,如果大盘不好,它也会跌破30日,但大盘好转时,很快天就能很快收复失地(一般是3天左右)。

 

跟进强势股需要勇气

 

很多强势股在涨了50%甚至100%以后,大部分投资者都以为应该调整了,可是它却一直上涨,根本没有掉头向下的打算,甚至在达到了200%的涨幅后,还敢向300%迈进!。因此,介入这样的强势股需要足够的勇气和胆量。当然介入有一个前提,即强势股在涨到一定程度时,没有出现放巨量的情况。上涨过程中放巨量说明机构在出货,它不管涨了多少,从来都没有出现过巨量的情况。所以,当我们介入一只强势股后,只要没有放出巨量,就可以一直持有。

 

强势股上涨大致有两种形态:一、沿着5日均线往上爬升;二、沿着10均线或20日、30日均线往上爬升。根据我沪深股市实战经验,原来沿着5日均线上升的股票,大幅上涨后,又跌破5日均线,或原来沿着10日、20日、30日均线上升的股票,大幅上涨后。又跌破10日20日、30日均线的股票,后市大都不妙。下跌和再次上涨的比例为3:1,而且这类强势股下跌并不一定要放量。下跌时不放量,是因为庄家在前期股价拉升时,边拉边撤,已经抛掉了很多筹码,等到下跌时,庄家留着这些筹码,主要也是为了砸盘之用,而跌时散户大多又不肯割肉。这就造成下跌时成交量不大或无量下跌的想象。

 

掐对强势股的七寸

 

对付强势庄家的办法:原来沿着5日均线上升的股票(10日、30日均线也一样),只要5日均线不破就可以继续持股,一旦某天5日均线被击穿(收盘价售在5日均线下方,下影线不算),就不能再继续看多,第二日应减磅操作(至少抛掉一半以上筹码),如果日后几天股价重心下移,就全部抛空离场。
继续阅读 »
什么是强势股?凡是上升通道良好,股价一直沿着5、10、20日均线上行的个股就是强势股。只要这种股没有大幅拉升过,没有出巨大的涨幅,很难跌破过30日均线(一般只会跌破20日均线),盘子不大,股价不高,那么,这种股票就值得我们积极跟踪。在股价跌到20日均线时,就可大胆买入,捂上一段时间,很容易获利30%。这种股最明显的特点的就是,如果大盘不好,它也会跌破30日,但大盘好转时,很快天就能很快收复失地(一般是3天左右)。

 

跟进强势股需要勇气

 

很多强势股在涨了50%甚至100%以后,大部分投资者都以为应该调整了,可是它却一直上涨,根本没有掉头向下的打算,甚至在达到了200%的涨幅后,还敢向300%迈进!。因此,介入这样的强势股需要足够的勇气和胆量。当然介入有一个前提,即强势股在涨到一定程度时,没有出现放巨量的情况。上涨过程中放巨量说明机构在出货,它不管涨了多少,从来都没有出现过巨量的情况。所以,当我们介入一只强势股后,只要没有放出巨量,就可以一直持有。

 

强势股上涨大致有两种形态:一、沿着5日均线往上爬升;二、沿着10均线或20日、30日均线往上爬升。根据我沪深股市实战经验,原来沿着5日均线上升的股票,大幅上涨后,又跌破5日均线,或原来沿着10日、20日、30日均线上升的股票,大幅上涨后。又跌破10日20日、30日均线的股票,后市大都不妙。下跌和再次上涨的比例为3:1,而且这类强势股下跌并不一定要放量。下跌时不放量,是因为庄家在前期股价拉升时,边拉边撤,已经抛掉了很多筹码,等到下跌时,庄家留着这些筹码,主要也是为了砸盘之用,而跌时散户大多又不肯割肉。这就造成下跌时成交量不大或无量下跌的想象。

 

掐对强势股的七寸

 

对付强势庄家的办法:原来沿着5日均线上升的股票(10日、30日均线也一样),只要5日均线不破就可以继续持股,一旦某天5日均线被击穿(收盘价售在5日均线下方,下影线不算),就不能再继续看多,第二日应减磅操作(至少抛掉一半以上筹码),如果日后几天股价重心下移,就全部抛空离场。 收起阅读 »