python实用小代码


栈的实现

#!/usr/bin/env python 
#coding=utf-8 
#python version 2.7.4
class stack:
    def __init__(self,list=None):
        self.contain = list 
        self.msize=100;
        self.top = 0;
    def getTop(self):
        if(self.top>0):
            return self.contain[self.top-1]
        else:
            return None
    def getLength(self):
        return len(contain);
    def push(self,str):
        if(self.top==self.msize):
            return -1
        self.contain.append(str)
        self.top=self.top +1
    def pop(self):
        try:
            res=self.contain.pop()
            return res;
        except IndexError:
            return None
        


li = [1,'51','15']
st = stack(li)
va='5'
print st.pop()
print st.pop()
st.push('fdef')
print st.pop()
print st.pop()


Python抓取oschina的最新博客列表

这个功能在oschina上有人写,但是个人感觉不怎么样,所以修改了一下,用栈进行匹配,即快也方便了很多,代码比较易理解

#!/usr/bin/env python 
#coding=utf-8 
#python version:2.7.4
#system:windows xp

import sys
import httplib2
import HTMLParser
def getPageContent(url):
    '''
    使用httplib2用编程的方式根据url获取网页内容
    将bytes形式的内容转换成utf-8的字符串
    '''
    #使用ie9的user-agent,如果不设置user-agent将会得到403禁止访问
    headers={'user-agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
            'cache-control':'no-cache'}
    if url:
         response,content = httplib2.Http().request(url,headers=headers)
         
         if response.status == 200 :
            return content

class stack:
    def __init__(self,size=100,list=None):
        self.contain=[]
        self.msize=size;
        self.top = 0;
    def getTop(self):
        if(self.top>0):
            return self.contain[self.top-1]
        else:
            return None
    def getLength(self):
        return len(self.contain);
    def push(self,data):
        if(self.top==self.msize):
            return -1
        self.contain.append(data)
        self.top=self.top +1
    def pop(self):
        try:
            res=self.contain.pop()
            if(self.top>0):
                self.top=self.top-1
            return res;
        except IndexError:
            return None
        

class ParserOschinaNew(HTMLParser.HTMLParser):
    def __init__(self):
        HTMLParser.HTMLParser.__init__(self)
        self.st=stack(size=1000)
        self.st.push('over')
        
    def handle_starttag(self,tag,attrs):
        stack_size = self.st.getLength()
        if stack_size==1 and tag=='ul':
            for name,value in attrs:
                if (name=='class' and value=='BlogList'):
                    self.st.push('ul')
                    break;
        if (stack_size==2 and tag=='li' ):
            self.st.push('li')
        if (stack_size==3 and tag=='h3' ):
            self.st.push('h3')
            text = '博客标题:'.decode('utf-8').encode('gb2312','ignore')
            print '%s'%text
        if (stack_size==3 and tag=='p' ):
            self.st.push('p')
            text = '正文部分:'.decode('utf-8').encode('gb2312','ignore')
            print '%s'%text

        if (stack_size==3 and tag=='div' ):
            for name,value in attrs:
                if (name=='class' and value=='date'):
                    self.st.push('div')
                    text = '作者:'.decode('utf-8').encode('gb2312','ignore')
                    print '%s'%text
                    
            
    def handle_data(self ,data):
        stack_size = self.st.getLength()
        if (stack_size==4):
            print data.decode('utf-8').encode('gb2312','ignore')  

    def handle_endtag(self,tag):
        stack_size = self.st.getLength()
        stack_tag = self.st.getTop()
        if ('h3'==tag and 'h3'==stack_tag):
            self.st.pop()
        if ('p'==tag and 'p'==stack_tag):
            self.st.pop()
        if ('div'==tag and 'div'==stack_tag):
            self.st.pop()
        
        if ('li'==tag and 'li'==stack_tag):
            self.st.pop()
        if ('ul'==tag and 'ul'==stack_tag):
            self.st.pop()
            if('over'==self.st.getTop()):          
                print "this is end!"
        


if __name__ == '__main__':
    pageC = getPageContent('http://www.oschina.net/blog/more?p=1')
 #   pageC = pageC.decode('utf-8').encode('gb2312','ignore')   
    my = ParserOschinaNew()
    my.feed(pageC)

 python写的一个邮件发生器

作者:AshlingR  
邮箱:[email protected]  
时间:2013.6.2  
  
#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
#导入smtplib和MIMEText  
import smtplib  
from email.mime.text import MIMEText  
  
#配置信息  
mail_to             ='[email protected]'  
mail_server         ='smtp.qq.com'#163:smtp.163.com  qq:smtp.qq.com  
mail_user_name      ='123456879'  
mail_user_passwd    ='123456'  
mail_postfix        ='qq.com'  
  
info_list = [ mail_server, mail_user_name,mail_user_passwd ,mail_postfix]  
  
''''' 
to_list:    目的邮件地址 
sub:        邮件的主题 
content:    邮件的内容 
'''  
def send_mail(list,to_list,sub,content):  
    #设置服务器,用户名、口令以及邮箱的后缀  
  
#    assert type(to_list) == list  
    mail_server=str(list[0])# 'smtp.stu.edu.cn'  
    mail_user_name=str(list[1])#'11lrao'  
    mail_user_passwd=str(list[2])## 'raoliang'  
    mail_postfix=str(list[3])#'stu.edu.cn'  
      
    print type(mail_server),mail_server  
       
    scr_addr='send machine'+'<'+mail_user_name+'@'+mail_postfix+'>'  
    msg = MIMEText(content,_subtype='text/plain',_charset='gb2312')  
    msg['Subject'] = sub  
    msg['From'] = scr_addr ;  
    msg['To'] = to_list  
    try:  
        s = smtplib.SMTP()  
        s.connect(mail_server)  
        s.login(mail_user_name,mail_user_passwd)  
        s.sendmail(scr_addr, to_list, msg.as_string())  
        s.close()  
        print '1'  
        return True  
    except Exception, e:  
        print 'mail error:'  
        print str(e)  
        return False  
if __name__ == '__main__':  
    if send_mail(info_list,mail_to,'titile0','content0'):  
        print 'send success'  
    else:  
        print 'send failed'  










你可能感兴趣的:(python实用小代码)