Python

开发工具:sublime text 编译:ctrl+b

#一、特点
简单:Python是一种代表简单主义思想的语言。
速度快:Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。
规范的代码:Python采用强制缩进的方式使得代码具有较好可读性。而Python语言写的程序不需要编译成二进制代码。
免费、开源、解释性、丰富的库
#二、应用
数学处理:NumPy扩展提供大量与许多标准数学库的接口。
文本处理:python提供的re模块能支持正则表达式。
网络编程:提供丰富的模块支持sockets编程。
#三、语法
控制语句
if语句、for语句、while语句、try语句、class语句、def语句、pass语句、in语句、raise语句、import语句、from import语句、import as语句。
表达式
Python使用and, or, not表示逻辑运算。is, is not用于比较两个变量是否是同一个对象。in, not in用于判断一个对象是否属于另外一个对象。Python使用lambda表示匿名函数。
类型
数字【int】、字符串str、列表list[ ]、元组tuple( )、字典dist{ }、文件file。
执行:Python在执行时,首先会将.py文件中的源代码编译成Python的byte code(字节码),然后再由Python Virtual Machine(Python虚拟机)来执行这些编译好的byte code。
#四、函数库
文本处理:包含文本格式化、正则表达式匹配、文本差异计算与合并、Unicode支持,二进制数据处理等功能
文件处理:包含文件操作、创建临时文件、文件压缩与归档、操作配置文件等功能
操作系统功能:包含线程与进程支持、IO复用、日期与时间处理、调用系统函数、写日记(logging)等功能
网络通信:包含网络套接字,SSL加密通信、异步网络通信等功能
网络协议:支持HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC等多种网络协议,并提供了编写网络服务器的框架
W3C格式支持:包含HTML,SGML,XML的处理。
其它功能:包括国际化支持、数学运算、HASH、Tkinter等。
常用第三方包:os、sys、urllib、urllib2、httplib、http….
#五、工具功能
MySQLdb:用于连接MySQL数据库。
PyOpenCL:OpenCL的Python接口,通过该模块可以使用GPU实现并行计算。
PyMedia:用于多媒体操作的python模块。
wxPython:GUI编程框架。
#六、Python模块/包
Python模块安装
1. 单文件模块:直接把文件拷贝到$python_dir/lib
2. 多文件模块,带setup.py python setup.py install
3. easy_install 方式
先下载ez_setup.py,运行python ez_setup 进行easy_install工具的安装,之后就可以使用easy_install进行安装package了。
easy_install packageName
easy_install package.egg
4. pip 方式
先进行pip工具的安裝:easy_install pip(pip 可以通过easy_install 安裝,而且也会装到 Scripts 文件夹下。)
安裝:pip install PackageName
更新:pip install -U PackageName
移除:pip uninstall PackageName
搜索:pip search PackageName
这里写图片描述
这里写图片描述

from package import module as mymodule 命令时,Python解释器会查找package这个包的module模块,并将该模块作为mymodule引入到当前的工作空间。

Python包管理:distutils/setuptools/pip
包组织
**#
七、例子**
1.抓取页面图片

import urllib
import re

def getHtml(url):
    return urllib.urlopen(url).read()

def getImg(html):
    reg = r'src="(http://imgsrc\.baidu\.com.+?.jpg)"'
    pattern = re.compile(reg)
    img_list = re.findall(pattern, html)
    return img_list

img_list = getImg(getHtml('http://tieba.baidu.com/p/3049733850'))
for i in range(0, 3):
    urllib.urlretrieve(img_list[i], str(i) + '.jpg')

2.操作浏览器

import time
import os
import webbrowser as web
import random
count =random.randint(1,2)
j=0
while j<count:
    i=0
    while i<5:
        web.open_new_tab('http://blog.sina.com.cn/s/blog_4900fe270102wdlo.html?tj=1')
        i=i+1
        time.sleep(1)
    else :
         os.system('taskkill /F /IM 360se.exe')
         print j,'times closed 360se'
    j=j+1
else :
    print 'ending'

3.BeautifulSoup

#coding:utf-8
import urllib
import os
import chardet
from bs4 import BeautifulSoup 
#url='http://www.163.com'
#url='http://blog.sina.com.cn/twocold'
url='http://tieba.baidu.com/p/2772656630'
html=urllib.urlopen(url)
#print html.read().decode("utf-8",'ignore').encode("gbk")
#print html.info()
#print html.getcode()

#Surllib.urlretrieve(url,'txt.txt',callback) 
con=html.read()
soup=BeautifulSoup(con)
txt=soup.find_all('img',class_="BDE_Image")
print len(txt)
for img in txt:
    print img['src']

4.urllib2

#coding:utf-8
#import urllib
url='http://www.csdn.net/article/2015-1106/2826137'
#html= urllib.urlopen(url).read()
#print html.getcode()
#urllib2:代理IP+虚构请求头
import urllib2
myheaders={
    'Host':'blog.csdn.net',
    'Referer':'http://blog.csdn.net/',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36',
    'GET':url
}
req=urllib2.Request(url,headers=myheaders)
html= urllib2.urlopen(req)
print html.read()

5.MySQLdb

import MySQLdb
conn=MySQLdb.connect(user='root',passwd='mysql',host='localhost')
cur=conn.cursor()
conn.select_db('python')
sql="insert into t_user(email,nickname,password,username)  value(%s,%s,%s,%s)"
cur.execute(sql,('111@a.com','nick','123','333'))
print cur.fetchmany(cur.execute("select * from t_user"))
conn.commit() 
print cur.fetchmany(cur.execute("select * from t_user"))
cur.close()
conn.close()

6.糗事百科

#coding:utf-8
import urllib
import urllib2
import re
import thread
import time
import sys
#糗事百科爬虫类
class QSBK:

    #初始化方法,定义一些变量
    def __init__(self):
        self.pageIndex = 1
        self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
        #初始化headers
        self.headers = { 'User-Agent' : self.user_agent }
        #存放段子的变量,每一个元素是每一页的段子们
        self.stories = []
        #存放程序是否继续运行的变量
        self.enable = False
    #传入某一页的索引获得页面代码
    def getPage(self,pageIndex):
        try:
            url = 'http://www.qiushibaike.com/hot/page/' + str(pageIndex)
            #构建请求的request
            request = urllib2.Request(url,headers = self.headers)
            #利用urlopen获取页面代码
            response = urllib2.urlopen(request)
            #将页面转化为UTF-8编码
            pageCode = response.read().decode('utf-8')
            return pageCode

        except urllib2.URLError, e:
            if hasattr(e,"reason"):
                print u"连接糗事百科失败,错误原因",e.reason
                return None

    #传入某一页代码,返回本页段子列表
    def getPageItems(self,pageIndex):
        pageCode = self.getPage(pageIndex)
        if not pageCode:
            print "页面加载失败...."
            return None
        #item[0]是一个段子的发布者,item[1]是内容,item[2]是图片,item[3]是点赞数
        pattern = re.compile('<div.*?class="author.*?>.*?<a.*?</a>.*?<a.*?title="(.*?)>.*?</a>.*?<div.*?class'+
                         '="content">(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)
#        pattern = re.compile('<div.*?class="author.*?>.*?<a.*?</a>.*?<a.*?>(.*?)</a>.*?<div.*?class'+
#                         '="content".*?title="(.*?)">(.*?)</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)
        items = re.findall(pattern,pageCode)
        #用来存储每页的段子们
        pageStories = []
        #遍历正则表达式匹配的信息
        for item in items:
            #是否含有图片
            haveImg = re.search("img",item[2])
            #如果不含有图片,把它加入list中
            if not haveImg:
                #item[0]是一个段子的发布者,item[1]是内容,item[2]是图片,item[3]是点赞数                
                pageStories.append([item[0].strip(),item[1].strip(),item[2].strip(),item[3].strip()])
            else:
                #print item[2]
                reg =r'src="(.*?\.jpg)" alt="(.*?)"'
                imgre=re.compile(reg)
                imglist=re.findall(imgre,item[2])
                #print imglist
                if imglist:
                    #print imglist[0][0],imglist[0][1]
                    name="D:\Python27\\test\qsbkimg\\"+imglist[0][1]+".jpg"
                    urllib.urlretrieve(imglist[0][0],name)
                    pageStories.append([item[0].strip(),item[1].strip(),imglist[0][1],item[3].strip()]) 
        f=file("qsbk.txt",'a+')
        x=1
        reload(sys)
        sys.setdefaultencoding('utf-8')
        for story in pageStories:

            con="条数:"+str(x)+"\n"+"作者:"+story[0]+"\n"+"内容:"+story[1]+"\n"+"图片:"+story[2]+"\n"+"点赞数:"+story[3]+"\n"
            f.write(con)
            x=x+1
        f.close()    
        return pageStories

    #加载并提取页面的内容,加入到列表中
    def loadPage(self):
        #如果当前未看的页数少于2页,则加载新一页
        if self.enable == True:
            if len(self.stories) < 2:
                #获取新一页
                pageStories = self.getPageItems(self.pageIndex)
                #将该页的段子存放到全局list中
                if pageStories:
                    self.stories.append(pageStories)
                    #获取完之后页码索引加一,表示下次读取下一页
                    self.pageIndex += 1

    #调用该方法,每次敲回车打印输出一个段子
    def getOneStory(self,pageStories,page):
        #遍历一页的段子
        for story in pageStories:
            #等待用户输入
            input = raw_input()
            #每当输入回车一次,判断一下是否要加载新页面
            self.loadPage()
            #如果输入Q则程序结束
            if input == "Q":
                self.enable = False
                return
            print u"第%d页\t发布人:%s\t发布内容:%s\n图片%s\n赞:%s\n" %(page,story[0],story[1],story[2],story[3])

    #开始方法
    def start(self):
        print u"正在读取糗事百科,按回车查看新段子,Q退出"
        #使变量为True,程序可以正常运行
        self.enable = True
        #先加载一页内容
        self.loadPage()
        #局部变量,控制当前读到了第几页
        global nowPage 
        nowPage = 0
        while self.enable:
            if len(self.stories)>0:
                #从全局list中获取一页的段子
                pageStories = self.stories[0]
                #当前读到的页数加一
                nowPage += 1
                #将全局list中第一个元素删除,因为已经取出
                del self.stories[0]
                #输出该页的段子
                self.getOneStory(pageStories,nowPage)

spider = QSBK()
spider.start()

7.代理IP

#coding:utf-8
import urllib2
import re
import sys
import threading
import time
#url="http://www.kuaidaili.com" 免费代理IP

def getproxy():
    p=re.compile(r'''<tr>
                <td>(.+?)</td>
                <td>(.+?)</td>
                <td>(.+?)</td>
                <td>(.+?)</td>
                <td>(.+?)</td>
                <td>(.+?)</td>
                <td>(.+?)</td>
                <td>(.+?)</td>
            </tr>''')
    global matchs
    for i in range(1,3):
        target =r'http://www.kuaidaili.com/proxylist/%d' %i
        print target
        req=urllib2.urlopen(target)
        res= req.read()
        matchs=p.findall(res)
        #print matchs

class ProxyCheck(threading.Thread):
    def __init__(self,proxylist,fname):
        threading.Thread.__init__(self)
        self.proxylist=proxylist
        self.timeout=5
        self.testurl='http://www.baidu.com/'
        self.teststr='030173'
        self.checkproxylist=[]
        self.fname=fname
    def checkProxy(self):

        cookies=urllib2.HTTPCookieProcessor()
        for proxy in self.proxylist:
            #print proxy
            hander=urllib2.ProxyHandler({"http":r'http://%s:%s'%(proxy[0],proxy[1]) })
            opener=urllib2.build_opener(cookies,hander)
            urllib2.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36')]
            t1=time.time()
            try:
                req=urllib2.urlopen(self.testurl,timeout=self.timeout)
                result=req.read()
                #print result
                timeused=time.time()-t1
                pos=result.find(self.testurl)
                if pos>1:
                    self.checkproxylist.append((proxy[0],proxy[1],proxy[2],proxy[3],timeused))
                else:
                    continue
            except Exception,e:
                print e.message
                continue
    def sort(self):
        sorted(self.checkproxylist,cmp=lambda x,y:cmp(x[4],y[4]))
    def save(self):
        f=open(self.fname,'w+')
        for proxy in self.checkproxylist:
            f.write("%s:%s\t%s\t%s\t%s\n"%((proxy[0],proxy[1],proxy[2],proxy[3],proxy[4])))
        f.close()   

    def run(self):
        self.checkProxy()
        self.sort()
        self.save()

if __name__ == '__main__':
    getproxy()
    t1=ProxyCheck(matchs,'t1.txt')
    t1.start() 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值