專欄目錄:html
Python爬蟲與數據分析之python教學視頻、python源碼分享,pythonpython
Python爬蟲與數據分析之基礎教程:Python的語法、字典、元組、列表程序員
Python爬蟲與數據分析之進階教程:文件操做、lambda表達式、遞歸、yield生成器正則表達式
Python爬蟲與數據分析之模塊:內置模塊、開源模塊、自定義模塊算法
Python爬蟲與數據分析之爬蟲技能:urlib庫、xpath選擇器、正則表達式sql
Python爬蟲與數據分析之京東爬蟲實戰:爬取京東商品並存入sqlite3數據庫shell
Python爬蟲與數據分析之二手車平臺數據獲取和分析數據庫
Python爬蟲與數據分析之python開源爬蟲項目彙總macos
模塊,用一砣代碼實現了某個功能的代碼集合。 編程
相似於函數式編程和麪向過程編程,函數式編程則完成一個功能,其餘代碼用來調用便可,提供了代碼的重用性和代碼間的耦合。而對於一個複雜的功能來,可能須要多個函數才能完成(函數又能夠在不一樣的.py文件中),n個 .py 文件組成的代碼集合就稱爲模塊。
如:os 是系統相關的模塊;file是文件操做相關的模塊
模塊分爲三種:
1、定義模塊
情景一:
情景二:
情景三:
2、導入模塊
Python之因此應用愈來愈普遍,在必定程度上也依賴於其爲程序員提供了大量的模塊以供使用,若是想要使用模塊,則須要導入。導入模塊有一下幾種方法:
1 2 3 4 |
|
導入模塊其實就是告訴Python解釋器去解釋那個py文件
那麼問題來了,導入模塊時是根據那個路徑做爲基準來進行的呢?即:sys.path
1 2 3 4 5 |
|
若是sys.path路徑列表沒有你想要的路徑,能夠經過 sys.path.append('路徑') 添加。
經過os模塊能夠獲取各類目錄,例如:
1 import sys 2 import os 3 4 pre_path = os.path.abspath('../') 5 sys.path.append(pre_path)
1、下載安裝
下載安裝有兩種方式:
yum
pip
apt-get
...
下載源碼
解壓源碼
進入目錄
編譯源碼 python setup.py build
安裝源碼 python setup.py install
注:在使用源碼安裝時,須要使用到gcc編譯和python開發環境,因此,須要先執行:
1 2 3 4 |
|
安裝成功後,模塊會自動安裝到 sys.path 中的某個目錄中,如:
1 |
|
2、導入模塊
同自定義模塊中導入的方式
3、模塊 paramiko
paramiko是一個用於作遠程控制的模塊,使用該模塊能夠對遠程服務器進行命令或文件操做,值得一說的是,fabric和ansible內部的遠程管理就是使用的paramiko來現實。
一、下載安裝
1 |
|
或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
2、使用模塊
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import paramiko 5 6 ssh = paramiko.SSHClient() 7 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 8 ssh.connect('192.168.1.108', 22, 'alex', '123') 9 stdin, stdout, stderr = ssh.exec_command('df') 10 print stdout.read() 11 ssh.close(); 12 13 14 15 import paramiko 16 17 private_key_path = '/home/auto/.ssh/id_rsa' 18 key = paramiko.RSAKey.from_private_key_file(private_key_path) 19 20 ssh = paramiko.SSHClient() 21 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 22 ssh.connect('主機名 ', 端口, '用戶名', key) 23 24 stdin, stdout, stderr = ssh.exec_command('df') 25 print stdout.read() 26 ssh.close() 27 28 29 30 import os,sys 31 import paramiko 32 33 t = paramiko.Transport(('182.92.219.86',22)) 34 t.connect(username='wupeiqi',password='123') 35 sftp = paramiko.SFTPClient.from_transport(t) 36 sftp.put('/tmp/test.py','/tmp/test.py') 37 t.close() 38 39 40 import os,sys 41 import paramiko 42 43 t = paramiko.Transport(('182.92.219.86',22)) 44 t.connect(username='wupeiqi',password='123') 45 sftp = paramiko.SFTPClient.from_transport(t) 46 sftp.get('/tmp/test.py','/tmp/test2.py') 47 t.close() 48 49 50 51 52 53 54 import paramiko 55 56 pravie_key_path = '/home/auto/.ssh/id_rsa' 57 key = paramiko.RSAKey.from_private_key_file(pravie_key_path) 58 59 t = paramiko.Transport(('182.92.219.86',22)) 60 t.connect(username='wupeiqi',pkey=key) 61 62 sftp = paramiko.SFTPClient.from_transport(t) 63 sftp.put('/tmp/test3.py','/tmp/test3.py') 64 65 t.close() 66 67 import paramiko 68 69 pravie_key_path = '/home/auto/.ssh/id_rsa' 70 key = paramiko.RSAKey.from_private_key_file(pravie_key_path) 71 72 t = paramiko.Transport(('182.92.219.86',22)) 73 t.connect(username='wupeiqi',pkey=key) 74 75 sftp = paramiko.SFTPClient.from_transport(t) 76 sftp.get('/tmp/test3.py','/tmp/test4.py') 77 78 t.close() 79
1、os
用於提供系統級別的操做
1 os.getcwd() 獲取當前工做目錄,即當前python腳本工做的目錄路徑 2 os.chdir("dirname") 改變當前腳本工做目錄;至關於shell下cd 3 os.curdir 返回當前目錄: ('.') 4 os.pardir 獲取當前目錄的父目錄字符串名:('..') 5 os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄 6 os.removedirs('dirname1') 若目錄爲空,則刪除,並遞歸到上一級目錄,如若也爲空,則刪除,依此類推 7 os.mkdir('dirname') 生成單級目錄;至關於shell中mkdir dirname 8 os.rmdir('dirname') 刪除單級空目錄,若目錄不爲空則沒法刪除,報錯;至關於shell中rmdir dirname 9 os.listdir('dirname') 列出指定目錄下的全部文件和子目錄,包括隱藏文件,並以列表方式打印 10 os.remove() 刪除一個文件 11 os.rename("oldname","newname") 重命名文件/目錄 12 os.stat('path/filename') 獲取文件/目錄信息 13 os.sep 輸出操做系統特定的路徑分隔符,win下爲"\\",Linux下爲"/" 14 os.linesep 輸出當前平臺使用的行終止符,win下爲"\t\n",Linux下爲"\n" 15 os.pathsep 輸出用於分割文件路徑的字符串 16 os.name 輸出字符串指示當前使用平臺。win->'nt'; Linux->'posix' 17 os.system("bash command") 運行shell命令,直接顯示 18 os.environ 獲取系統環境變量 19 os.path.abspath(path) 返回path規範化的絕對路徑 20 os.path.split(path) 將path分割成目錄和文件名二元組返回 21 os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素 22 os.path.basename(path) 返回path最後的文件名。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素 23 os.path.exists(path) 若是path存在,返回True;若是path不存在,返回False 24 os.path.isabs(path) 若是path是絕對路徑,返回True 25 os.path.isfile(path) 若是path是一個存在的文件,返回True。不然返回False 26 os.path.isdir(path) 若是path是一個存在的目錄,則返回True。不然返回False 27 os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑以前的參數將被忽略 28 os.path.getatime(path) 返回path所指向的文件或者目錄的最後存取時間 29 os.path.getmtime(path) 返回path所指向的文件或者目錄的最後修改時間 30
2、sys
用於提供對解釋器相關的操做
1 sys.argv 命令行參數List,第一個元素是程序自己路徑 2 sys.exit(n) 退出程序,正常退出時exit(0) 3 sys.version 獲取Python解釋程序的版本信息 4 sys.maxint 最大的Int值 5 sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環境變量的值 6 sys.platform 返回操做系統平臺名稱 7 sys.stdout.write('please:') 8 val = sys.stdin.readline()[:-1] 9
更多猛擊這裏
3、hashlib
用於加密相關的操做,代替了md5模塊和sha模塊,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法
1 import md5 2 hash = md5.new() 3 hash.update('admin') 4 print hash.hexdigest() 5 6 7 import sha 8 9 hash = sha.new() 10 hash.update('admin') 11 print hash.hexdigest()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
|
以上加密算法雖然依然很是厲害,但時候存在缺陷,即:經過撞庫能夠反解。因此,有必要對加密算法中添加自定義key再來作加密。
1 2 3 4 5 6 7 |
|
還不夠吊?python 還有一個 hmac 模塊,它內部對咱們建立 key 和 內容 再進行處理而後再加密
1 2 3 4 |
|
不能再牛逼了!!!
4、json 和 pickle
用於序列化的兩個模塊
Json模塊提供了四個功能:dumps、dump、loads、load
pickle模塊提供了四個功能:dumps、dump、loads、load
5、執行系統命令
能夠執行shell命令的相關模塊和函數有:
import commands
result = commands.getoutput('cmd')
result = commands.getstatus('cmd')
result = commands.getstatusoutput('cmd')
以上執行shell命令的相關的模塊和函數的功能均在 subprocess 模塊中實現,並提供了更豐富的功能。
call
執行命令,返回狀態碼
1 2 |
|
shell = True ,容許 shell 命令是字符串形式
check_call
執行命令,若是執行狀態碼是 0 ,則返回0,不然拋異常
1 2 |
|
check_output
執行命令,若是狀態碼是 0 ,則返回執行結果,不然拋異常
1 2 |
|
subprocess.Popen(...)
用於執行復雜的系統命令
參數:
終端輸入的命令分爲兩種:
1 import subprocess 2 3 obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',) 4 5 6 import subprocess 7 8 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 9 obj.stdin.write('print 1 \n ') 10 obj.stdin.write('print 2 \n ') 11 obj.stdin.write('print 3 \n ') 12 obj.stdin.write('print 4 \n ') 13 obj.stdin.close() 14 15 cmd_out = obj.stdout.read() 16 obj.stdout.close() 17 cmd_error = obj.stderr.read() 18 obj.stderr.close() 19 20 print cmd_out 21 print cmd_error 22 23 24 import subprocess 25 26 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 27 obj.stdin.write('print 1 \n ') 28 obj.stdin.write('print 2 \n ') 29 obj.stdin.write('print 3 \n ') 30 obj.stdin.write('print 4 \n ') 31 32 out_error_list = obj.communicate() 33 print out_error_list 34 35 36 import subprocess 37 38 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 39 out_error_list = obj.communicate('print "hello"') 40 print out_error_list 41 更多猛擊這裏
6、shutil
高級的 文件、文件夾、壓縮包 處理模塊
1 shutil.copyfileobj(fsrc, fdst[, length]) 2 將文件內容拷貝到另外一個文件中,能夠部份內容 3 4 shutil.copyfile(src, dst) 5 拷貝文件 6 7 shutil.copymode(src, dst) 8 僅拷貝權限。內容、組、用戶均不變 9 10 shutil.copystat(src, dst) 11 拷貝狀態的信息,包括:mode bits, atime, mtime, flags 12 13 shutil.copy(src, dst) 14 拷貝文件和權限 15 16 shutil.copy2(src, dst) 17 拷貝文件和狀態信息 18 19 shutil.ignore_patterns(*patterns) 20 shutil.copytree(src, dst, symlinks=False, ignore=None) 21 遞歸的去拷貝文件 22 23 例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*')) 24 25 shutil.rmtree(path[, ignore_errors[, onerror]]) 26 遞歸的去刪除文件 27 28 29 30 shutil.move(src, dst) 31 遞歸的去移動文件 32 33 shutil.make_archive(base_name, format,...)
建立壓縮包並返回文件路徑,例如:zip、tar
1 2 3 4 5 6 7 8 9 |
|
shutil 對壓縮包的處理是調用 ZipFile 和 TarFile 兩個模塊來進行的,詳細:
1 import zipfile 2 3 # 壓縮 4 z = zipfile.ZipFile('laxi.zip', 'w') 5 z.write('a.log') 6 z.write('data.data') 7 z.close() 8 9 # 解壓 10 z = zipfile.ZipFile('laxi.zip', 'r') 11 z.extractall() 12 z.close() 13 14 15 import tarfile 16 17 # 壓縮 18 tar = tarfile.open('your.tar','w') 19 tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip') 20 tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip') 21 tar.close() 22 23 # 解壓 24 tar = tarfile.open('your.tar','r') 25 tar.extractall() # 可設置解壓地址 26 tar.close() 27
七、logging
用於便捷記錄日誌且線程安全的模塊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
對於等級:
1 2 3 4 5 6 7 8 |
|
只有大於當前日誌等級的操做纔會被記錄。
對於格式,有以下屬性但是配置:
八、time
時間相關的操做,時間有三種表示方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
九、re
re模塊用於對python的正則表達式的操做。
字符:
. 匹配除換行符之外的任意字符
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字符串的開始
$ 匹配字符串的結束
次數:
* 重複零次或更屢次
+ 重複一次或更屢次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更屢次
{n,m} 重複n到m次
IP:
^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$
手機號:
^1[3|4|5|8][0-9]\d{8}$
一、match(pattern, string, flags=0)
從起始位置開始根據模型去字符串中匹配指定內容,匹配單個
1 import re 2 3 obj = re.match('\d+', '123uuasf') 4 if obj: 5 print obj.group() 6 7 8 9 # flags 10 I = IGNORECASE = sre_compile.SRE_FLAG_IGNORECASE # ignore case 11 L = LOCALE = sre_compile.SRE_FLAG_LOCALE # assume current 8-bit locale 12 U = UNICODE = sre_compile.SRE_FLAG_UNICODE # assume unicode locale 13 M = MULTILINE = sre_compile.SRE_FLAG_MULTILINE # make anchors look for newline 14 S = DOTALL = sre_compile.SRE_FLAG_DOTALL # make dot match newline 15 X = VERBOSE = sre_compile.SRE_FLAG_VERBOSE # ignore whitespace and comments 16
二、search(pattern, string, flags=0)
根據模型去字符串中匹配指定內容,匹配單個
import re
obj = re.search('\d+', 'u123uu888asf')
if obj:
print obj.group()
三、group和groups
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group()
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0)
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1)
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(2)
print re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups()
四、findall(pattern, string, flags=0)
上述兩中方式均用於匹配單值,即:只能匹配字符串中的一個,若是想要匹配到字符串中全部符合條件的元素,則須要使用 findall。
import re
obj = re.findall('\d+', 'fa123uu888asf')
print obj
五、sub(pattern, repl, string, count=0, flags=0)
用於替換匹配的字符串
content = "123abc456"
new_content = re.sub('\d+', 'sb', content)
# new_content = re.sub('\d+', 'sb', content, 1)
print new_content
相比於str.replace功能更增強大
六、split(pattern, string, maxsplit=0, flags=0)
根據指定匹配進行分組
content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"
new_content = re.split('\*', content)
# new_content = re.split('\*', content, 1)
print new_content
content = "'1 - 2 * ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )'"
new_content = re.split('[\+\-\*\/]+', content)
# new_content = re.split('\*', content, 1)
print new_content
inpp = '1-2*((60-30 +(-40-5)*(9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2))'
inpp = re.sub('\s*','',inpp)
new_content = re.split('\(([\+\-\*\/]?\d+[\+\-\*\/]?\d+){1}\)', inpp, 1)
print new_content
相比於str.split更增強大
實例:計算器源碼
10、random
隨機數
1 2 3 4 |
|
隨機驗證碼實例:
1 2 3 4 5 6 7 8 9 10 |
|
>零起點大數據與量化分析PDF及教程源碼
>利用python進行數據分析PDF及配套源碼
>大數據項目實戰之Python金融應用編程(數據分析、訂價與量化投資)講義及源碼
>董付國老師Python教學視頻
1. 課堂教學管理系統開發:在線考試功能設計與實現
2. Python+pillow圖像編程;
3. Python+Socket編程
4. Python+tkinter開發;
5. Python數據分析與科學計算可視化
6. Python文件操做
7. Python多線程與多進程編程
8. Python字符串與正則表達式
.....
>數據分析教學視頻
1. 輕鬆駕馭統計學——數據分析必備技能(12集);
2. 輕鬆上手Tableau 軟件——讓數據可視化(9集);
3. 競品分析實戰攻略(6集);
4. 電商數據化運營——三大數據化工具應用(20集);
>大數據(視頻與教案)
1. hadoop
2. Scala
3. spark
>Python網絡爬蟲分享系列教程PDF
>【千鋒】Python爬蟲從入門到精通(精華版)(92集)