隨機數模塊。
php
import random arr = [1, 2, 3, 4] print random.random() #返回0.0~1.0的隨機數 print random.uniform(0.5, 0.8) #範圍內隨機數 print random.randint(1, 5) #範圍隨機整數 print random.choice(arr) #數組,元組中隨機一個數 print random.sample(arr, 2) #數組,元組中隨機兩個數 random.shuffle(arr) #打亂數組,不能用在元組上 print arr #result: 0.504674499914 0.79300720529 1 1 [1, 4] [3, 2, 4, 1]
2. 數據對象持久化。html
try: import pickle except: import CPickle as pickle # CPickle是pickle的c語言版,更快 arr = [123, [1, 2, 3], {'a':'A'}, (1, 2, 3)] pack = pickle.dumps(arr) unpack = pickle.loads(pack)
3. csv模塊。
python
import csv with open('a.csv', 'wb') as fp: writer = csv.writer(fp) for n in range(5): writer.writerow([str(n), str(n) * 2, str(n) * 3]) #每次寫一行 with open('b.csv', 'wb') as fp: writer = csv.writer(fp) writer.writerows([(1, 11, 111), (2, 22, 222)]) #一次寫多行 with open('a.csv', 'rb') as fp: data = csv.reader(fp) for line in data: print line
4. urlparse模塊。數組
# 格式化urlparse,獲取host,path,query等參數 import urlparse print urlparse.urlparse('http://www.iplaypython.com/module/urlparse.html')
5. urllib模塊緩存
import urllib bd = urllib.urlopen('www.baidu.com')
1 )、read(), readline(), readlines(), fileno(), close(),看到沒有與咱們操做文件的方法都是同樣的。
2 )、info() ,返回一個httplib.HTTPMessage這個python對象,能夠顯示你訪問的網絡資源服務器的HTTP頭部信息。
3 ) 、getcode() ,它的做用是返回http網頁狀態碼,200是成功訪問,404是未找到,還有其它301狀態碼等
4 )、geturl(),返回你請求的url地址。服務器
#下載文件 file = urllib.urlretrieve(url, filename) #臨時緩存文件 file = urllib.urlretrieve(url) #清除緩存 urllib.urlcleanup() #url編碼 url = 'http://www.baidu.com' urllib.quote(url) # urllib.unquote(url) 反向 #result: http%3A//www.baidu.com urllib.quote_plus(url) # urllib.unquote_plus(url) 反向 #result: http%3A%2F%2Fwww.baidu.com
url的GET提交和POST。
cookie
# GET方法 import urllib para = urllib.urlencode({'m':'aa', 'a': 'bb'}) fp = urllib.urlopen('http://www.1123123123.com/?%s' %para ) string = fp.read() #POST方法 fp = urllib.urlopen('http://www.1123123123.com' para) string = fp.read()
5.1 urllib2模塊。網絡
加頭部訪問dom
import urllib2 #加頭部訪問 request = urllib2.Request(url, urllib.urlencode(data), headers = {"User-Agent": "Mozilla-Firefox5.0"}) # 或者 request = urllib2.Request(url) request.add_header({"User-Agent": 'Mozilla-Firefox5.0'}) response = urllib2.urlopen(request) #或者 header={"User-Agent": "Mozilla-Firefox5.0"} urllib2.urlopen(url, urllib.urlencode(data), header)
超時設置ide
#設置超時 response = urllib2.urlopen('http://www.google.com', timeout=10)
傳遞cookie登陸
#傳遞cookie登陸 import urllib import urllib2 import cookielib #聲明一個MozillaCookieJar對象實例來保存cookie,以後寫入文件 cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) postdata = urllib.urlencode({ 'stuid':'201200131012', 'pwd':'23342321' }) #登陸教務系統的URL loginUrl = 'http://www.baidu.com/login.php' #模擬登陸,並把cookie保存到變量 result = opener.open(loginUrl,postdata) #利用cookie請求訪問另外一個網址,此網址是成績查詢網址 gradeUrl = 'http://www.baidu.com/info.php' #請求訪問成績查詢網址 result = opener.open(gradeUrl) print result.read()
Debug模式
#debug 模式 import urllib2 httpHandler = urllib2.HTTPHandler(debuglevel=1) httpsHandler = urllib2.HTTPSHandler(debuglevel=1) opener = urllib2.build_opener(httpHandler, httpsHandler) urllib2.install_opener(opener) response = urllib2.urlopen('http://www.123123123.com')
設置代理訪問
#設置代理訪問 import urllib2 enable_proxy=True proxy_handler=urllib2.ProxyHandler({‘http‘:‘http://some-proxy.com:8080‘}) null_proxy_handler = urllib2.ProxyHandler({}) if enable_proxy: opener = urllib2.build_opener(proxy_handler) else: opener = urllib2.build_opener(null_proxy_handler) urllib2.install_opener(opener)
urllib和urllib2的區別:
urllib提供urlencode方法用來GET查詢字符串的產生,而urllib2沒有。這是爲什麼urllib常和urllib2一塊兒使用的緣由。
urllib2模塊比較優點的地方是urlliburllib2.urlopen能夠接受Request對象做爲參數,從而能夠控制HTTP Request的header部。
可是urllib.urlretrieve函數以及urllib.quote等一系列quote和unquote功能沒有被加入urllib2中,所以有時也須要urllib的輔助。
7. resquests模塊的用法。是urllib和urllib2的加強版。
import requests #get 方式 html = requests.get(url, headers={'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}).content #post方式 html = requests.post(url, headers={'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'}, data={'a':'aa', 'b':'bb'}).content
6. robotparser,判斷robots.txt文件是否容許url被讀取
import robotparser import urlparse agent_name = 'IPLAYPYTHON' url_base = 'http://www.iplaypython.com/' parse = robotparser.RobotFileParser() parse.set_url(urlparse.urljoin(url_base, 'robots.txt')) parse.read() paths = ['/', '/tags/', '/admin/'] for path in paths: print '%6s: %s' %(parse.can_fetch(agent_name, path), path) url = urlparse.urljoin(url_base, path) print '%6s : %s' % (parse.can_fetch(agent_name, url), url)
7. base64編碼。
import base64 encode = base64.b64encode('我靠') print encode print base64.b64decode(encode)
8. smtplib模塊。
#正常的郵件 #!/usr/bin/python # coding:utf-8 # -*- coding: utf-8 -*- from email import encoders from email.header import Header from email.mime.text import MIMEText from email.utils import parseaddr, formataddr import smtplib def _format_addr(s): name, addr = parseaddr(s) return formataddr(( \ Header(name, 'utf-8').encode(), \ addr.encode('utf-8') if isinstance(addr, unicode) else addr)) from_addr = raw_input('From: ') # 發送方郵件帳戶,qwerty@163.com password = raw_input('Password: ') # 發送方密碼, 123123 , 這個密碼不是郵箱密碼,而是在郵箱設置裏面IMAP/#SMTP服務開啓後的設置密碼 to_addr = raw_input('To: ') # 12312321@qq.com smtp_server = raw_input('SMTP server: ') # smtp.163.com msg = MIMEText('hello, send by Python...', 'plain', 'utf-8') #郵件內容 #若是想發送html msg = MIMEText('<html><body><h1>Hello</h1>' + '<p>send by <a href="http://www.python.org">Python</a>...</p>' + '</body></html>', 'html', 'utf-8') msg['From'] = _format_addr(u'Python愛好者 <%s>' % from_addr) #郵件發送者的名稱 msg['To'] = _format_addr(u'管理員 <%s>' % to_addr) msg['Subject'] = Header(u'來自SMTP的問候……', 'utf-8').encode() #郵件標題 server = smtplib.SMTP(smtp_server, 25) server.set_debuglevel(1) server.login(from_addr, password) server.sendmail(from_addr, [to_addr], msg.as_string()) server.quit()
注意:有的能夠不設置發送帳戶,但會被郵箱過濾爲垃圾郵件。
#發送帶附件的郵件 from email import encoders from email.header import Header from email.mime.text import MIMEText from email.mime.base import MIMEBase from email.mime.multipart import MIMEMultipart from email.utils import parseaddr, formataddr import smtplib def _format_addr(s): name, addr = parseaddr(s) return formataddr(( \ Header(name, 'utf-8').encode(), \ addr.encode('utf-8') if isinstance(addr, unicode) else addr)) from_addr = raw_input('From: ') password = raw_input('Password: ') to_addr = raw_input('To: ') smtp_server = raw_input('SMTP server: ') msg = MIMEMultipart() msg['From'] = _format_addr(u'Python愛好者 <%s>' % from_addr) msg['To'] = _format_addr(u'管理員 <%s>' % to_addr) msg['Subject'] = Header(u'來自SMTP的問候……', 'utf-8').encode() # add MIMEText: msg.attach(MIMEText('send with file...', 'plain', 'utf-8')) #若是在html中顯示圖片 msg.attach(MIMEText('<html><body><h1>Hello</h1>' + '<p><img src="cid:0"></p>' + '</body></html>', 'html', 'utf-8')) # add file: with open('./UML.png', 'rb') as f: mime = MIMEBase('image', 'png', filename='test.png') mime.add_header('Content-Disposition', 'attachment', filename='test.png') mime.add_header('Content-ID', '<0>') mime.add_header('X-Attachment-Id', '0') mime.set_payload(f.read()) encoders.encode_base64(mime) msg.attach(mime) server = smtplib.SMTP(smtp_server, 25) server.set_debuglevel(1) server.login(from_addr, password) server.sendmail(from_addr, [to_addr], msg.as_string()) server.quit()