當前位置: 華文問答 > 數位

毫無基礎的人如何入門 Python ?

2015-11-12數位

0716更新

Python可以做什麽?

Python的熱度毋庸置疑,現在國內,不僅考國家二級電腦證需要學習Python,它甚至出現在了小學生的教材裏。

那麽高度如此高漲的Python,都可以用來做什麽呢?

目前來說,Python有五大主要用途以及多類其他用途。

一、主要用途

1、Web開發

Python是一種解釋型的手稿語言,用來開發Web套用,不但開發效率高,而且執行速度快。許多國內外的互聯網公司將python作為主要開發語言:豆瓣、知乎、果殼網、Google、NASA、YouTube、Facebook……(再次感嘆Python的強大)

除了大型的互聯網公司,由於後台伺服器的通用性,很多App和遊戲也選擇用 Python實作。

基於Python的Web框架有上百種,樣版技術也比較成熟,其中常用的是Django、Flask、Tornado。

對於入門新手來說,Django和Flask可以說是首選,它們可以幫助你用Python編寫伺服器端程式碼(後端程式碼)。尤其是Flask,它要掌握的元件更少,能夠實作簡單、靈活和細致的控制,並能讓你自己決定實作方式。

2、數據分析/視覺化

Python擁有更加完備的生態環境,對於數據分析中會用到的分布式計算、資料庫、視覺化等,都有對應完成的模組。有一點要說,在你進行數據視覺化時,可以選擇Matplotlib,相對於其他的庫來說更容易上手,當你掌握了它以後,也對你學習其他的庫有所幫助。

Hadoop-MapReduce和Spark都可以用Python完成計算邏輯,這大概也是數據工程師、科學家鐘愛Python的原因。

3、網路爬蟲

說起Python的套用場景,最容易被提起來的就是網路爬蟲。Google是最早用Python作為爬蟲基礎的公司,在此之前,人們如果想搜刮網上的內容,只能用采集器。

很多人在學了Python以後,都不知道幹什麽好,也無處施展,根本不了解自己對Python的掌握程度,這個時候,都可以試試爬蟲。比如豆瓣的推薦電影列表、社群留言、音樂軟體評論等,都可以用來做練習。

4、機器學習

說起人工智慧,感覺前途無限好,周圍很多人想參與進來,也讓更多人對Python充滿了學習的動力和期待。

人工智慧需要更加精細的最佳化,也需要GPU、專用硬體之類的介面,因此人工智慧的核心演算法還是依賴於C/C++。那Python到底用來做什麽呢?

Python是庫的API binding,要開發一個其他語言到C/C++的跨語言介面,它是最容易的。

什麽是機器學習呢?

我在網上看見過一個很容易理解的例子:

(以下為事例參照)

你將1000張狗的圖片和1000張桌子的圖片輸入給機器學習演算法,讓它掌握狗和桌子間的區別。
那麽當你給出新的圖片讓它辨識是狗還是桌子時,它就能夠進行判斷。
這有點類似孩子學習新事物的方式。
孩子是如何學習認知狗或桌子的呢?就是透過大量的例子。
你不會明確告訴孩子:「如果某個毛茸茸的東西有淺棕色的毛發,那麽就可能是狗。」
你會說,「這是狗,這也是狗。而這是桌子,那個也是桌子。「

機器學習的演算法包括神經網路、深度學習、支持向量機及隨機森林,基本道理和上述相似,套用場景很多:例如推薦系統、人臉辨識及語音辨識等。

對於機器學習庫和Python框架,scikit-learn和TensorFlow算是兩個比較熱門的。

區別就在於:

scikit-learn帶有一些內建的熱門機器學習演算法。 (適合剛開始進行機器學習計畫)
TensorFlow是一個低階庫,能讓你建立自訂機器學習演算法。 (適合解決效率問題)

5、自動化運維

Python寫好的指令碼語法簡單,易於編寫,而且進行測試也很快。

目前很多Linux發行版都很適合用Python指令碼進行批次化的檔部署和執行調整。Python中也包含許多方便的工具,從調控ssh/sftp用的paramiko,到監控服務用的supervisor,再到bazel等構建工具,甚至conan等用於C++的包管理工具,都可以用Python實作。

二、其他套用(結合了自己的經驗及網路套用)

嵌入式套用:Python可以與Rasberry Pi一起用,在硬體愛好者中很流行。

桌面套用:你可以用Python的Tkinter,但這並不是最熱門的選擇,Java,C#和C ++等語言似乎更受歡迎。

系統編程:提供API,能方便進行系統維護和管理,Linux下標誌性語言之一,是很多系統管理員理想的編程工具。

數學處理:NumPy擴充套件提供大量與許多標準數學庫的介面。

文本處理:Python提供的re模組能支持正規表式,還提供SGML,XML分析模組,許多程式設計師利用Python進行XML程式的開發。

資料庫編程:程式設計師可透過遵循PythonDB-API(資料庫應用程式編程介面)規範的模組與MicrosoftSQLServer,Oracle,Sybase,DB2,MySQL、SQLite等資料庫通訊。Python內建有一個Gadfly模組,提供了一個完整的SQL環境。

網路編程:提供豐富的模組支持sockets編程,能方便快速地開發分布式應用程式。很多大規模軟體開發計劃例如Zope,Mnet及BitTorrent.Google都在廣泛地使用它。

多媒體套用:Python的PyOpenGL模組封裝了"OpenGL應用程式編程介面",能進行二維和三維影像處理。PyGame模組可用於編寫遊戲軟體。

Python可以怎麽學?

說實話,Python算是零基礎友好的一大實用程式語言了。即便是沒有電腦基礎,也可以透過系統的學習過程來掌握它。

Python語法結構同時兼顧了物件導向編程的靈活性及函數語言程式設計語言的方便性,給初學者大量的發揮空間,一般來說,如果你是在抱著認真負責的學習態度下,想掌握Python語言的語法結構,大概1-2周的時間就差不多。

學習網站可以選擇菜鳥教程、Codecademy、Coursera和 CSDN。

  • 菜鳥教程
  • 站內的知識點很全面,無論你想學習哪種領域,都可以輕松在這裏找到合適的資料。

  • Codecademy
  • 這個學習網站很大的優勢就是在瀏覽器上直接編寫程式碼,輕松解決了初學者程式環境安裝的困擾。

  • Coursera
  • 如果你英文比較好,交流沒有問題的話,比較推薦這個網站。這是一個課程學習網站,內容涵蓋編程各個領域,目前已經和200+所大學合作課程,還可以線上讀學士、碩士學位。

  • CSDN
  • 如果說你的英文是難題,給你推薦CSDN,是國內老牌程式設計師社群,裏邊有各領域博文、資料、課程,基本很多專業問題都可以在這裏查。

    另外,我也結合了一些書和視訊課,買書是因為文字落在紙面上,有助於及時理解和記憶;視訊課的話,我是自學Python,因為還有工作,只能利用碎片時間去學,我為了苦學Python,在網易雲課堂、51、慕課、CSDN學院買了不下10套關於Python入門的課,在得到也買了時間管理課。

    如果你跟我一樣,想進行整體的學習,也想節省一些學習時間,加上我也比較懶,非得有人督促著才能堅持不懈,你可以試試體統學習,我選的是CSDN的Python訓練營。

    如果有的同學目前是打算一步一步慢慢來,或者之前已經有一些基礎,只是想突破單個方向,下邊這幾門課程我也在剛接觸Python的時候買來學的,價格更便宜,內容卻絲毫不打折扣,是比較值得學習的!

  • 基礎知識
  • 如果是毫無基礎可言,甚至不知道如何下載Python, 比較推薦齊偉老師的【8小時Python零基礎輕松入門】或者是董付國的【Python可以這樣學】。細節全面,適合小白入門。

  • 爬蟲
  • 這回是偏基礎點的,之前也分享過兩門,都可以進行參考。

  • 數據分析
  • 我買過兩類數據分析課,零基礎入門和多方位學習,現在直接發出來,也是為了方便不同需求的同學。

  • 機器學習
  • 說起人工智慧講的好的老師,必說唐宇迪(感覺真的霸榜各個學習平台)。

    他是電腦的博士,好像還參與了挺多國家級計畫,我聽過幾次他的課和直播,老師的講課風格很幽默,經常會舉例子,讓你更清晰的搞懂知識點,我覺得自己是在學習中享受。

    (基礎知識配實戰,這樣學習起來相對也更容易)

    最後要給你們推薦的是書的部份,我自己選了4本書:

  • 【笨辦法學Python】
  • 如果是初學Python的話,沒有什麽編程基礎,還是比較適合從這本開始學的。整體是以習題的方式開始引導初學者學習編程。

  • 【Python編程從入門到實踐】
  • 這本書大概算是保姆級照顧了,細節描寫不能再清晰。整體分為兩個部份:基礎知識和計畫實戰。不看真的不知道,程式碼類的實戰計畫竟然能在紙上講清楚!

  • 【Python Cookbook】
  • 這本書既有知識點的詳細講解,又有更多高階用法的延伸,對於已經有一定基礎但是掌握不牢的同學來說,無疑是值得擁有的好書。

  • 【流暢的Python】
  • 這本書對於Python的高級用法探究很深入,涵蓋了數據結構、物件、並列與並行、超編程等多個方向。

    也許有人會問:「你幹嘛把自己逼得那麽緊,安安穩穩的不就很好了嗎?」

    作為一個人,如果長期處於一個舒適安逸的環境,慢慢就會被這種安逸籠罩,變得懶惰,原本擁有的能力也會逐步減弱,當有一天危險來臨,所在的舒適圈被打破,連生存下去都是個難題!

    所以,為了好好活下去,要不跳出舒適圈,要不就擴大你的舒適圈。

    這些是我自己學習的時候用到的一些國內外網站+書籍+視訊課,整體來說是夠用的,如果還有其他更好的,各位同學可以評論區裏分享出來,互換資源,共同學習!

    更新:

    有很多朋友私信問我Python學習有沒有什麽好的資料,我給大家找了幾門不錯的免費課,想學的可以看看。

    【Python入門教程】

    【Python初級入門精講】

    【Python爬蟲開發】

    【Python實戰編程】

    【1小時掌握Python爬蟲+高效學習法則】

    原回答:

    之前回答過很受知友們歡迎,再分享一下。

    Github上位名叫駱昊 (jackfrued) 的資深程式設計師,為大家規劃了一條從「從新手到大師」的百天之路!我覺得這個模式你可以參考一下。

    現在已經有5w+星了!

    給初學者的幾個建議:
  • Make English as your working language.
  • Practice makes perfect.
  • All experience comes from mistakes.
  • Don't be one of the leeches.
  • Either stand out or kicked out.

  • 先附上github地址:

    下面是這個一百天計劃裏面的學習框架,我在這裏放上來。 (PS.對於毫無基礎的人想百天完成這裏面的學習計劃就實話說根本是不可能的,我個人是比較認可這個學習框架的,大家沒有必要嚴格卡這個100天,照著這個行程學習是完全可以的。)

    Day01~15 - Python語言基礎

    Day01 - 初識Python

    Python簡介 - Python的歷史 / Python的優缺點 / Python的套用領域

    搭建編程環境 - Windows環境 / Linux環境 / MacOS環境

    從終端執行Python程式 - Hello, world / print函式 / 運行程式

    使用IDLE - 互動式環境(REPL) / 編寫多行程式碼 / 運行程式 / 結束IDLE

    註釋 - 註釋的作用 / 單行註釋 / 多行註釋

    Day02 - 語言元素

    程式和進制 - 指令和程式 / 馮諾依曼機 / 二進制和十進制 / 八進制和十六進制

    變量和型別 - 變量的命名 / 變量的使用 / input函式 / 檢查變量型別 / 型別轉換

    數位和字串 - 整數 / 浮點數 / 復數 / 字串 / 字串基本操作 / 字元編碼

    運算子 - 數學運算子 / 設定運算子 / 比較運算子 / 邏輯運算子 / 身份運算子 / 運算子的優先級

    套用案例 - 華氏溫度轉換成攝氏溫度 / 輸入圓的半徑計算周長和面積 / 輸入年份判斷是否是閏年

    Day03 - 分支結構

    分支結構的套用場景 - 條件 / 縮排 / 程式碼塊 / 流程圖

    if語句 - 簡單的if / if-else結構 / if-elif-else結構 / 巢狀的if

    套用案例 - 使用者身份驗證 / 英制單位與公制單位互換 / 擲骰子決定做什麽 / 百分制成績轉等級制 / 分段函式求值 / 輸入三條邊的長度如果能構成三角形就計算周長和面積

    Day04 - 迴圈結構

    迴圈結構的套用場景 - 條件 / 縮排 / 程式碼塊 / 流程圖

    while迴圈 - 基本結構 / break語句 / continue語句

    for迴圈 - 基本結構 / range型別 / 迴圈中的分支結構 / 巢狀的迴圈 / 提前結束程式

    套用案例 - 1~100求和 / 判斷質數 / 猜數位遊戲 / 打印九九表 / 打印三角形圖案 / 猴子吃桃 / 百錢百雞

    Day05 - 構造程式邏輯

    基礎練習 - 水仙花數 / 完美數 / 五人分魚 / Fibonacci數列 / 回文質數

    綜合練習 - Craps賭博遊戲

    Day06 - 函式和模組的使用

    函式的作用 - 程式碼的壞味道 / 用函式封裝功能模組

    定義函式 - def語句 / 函式名 / 參數列 / return語句 / 呼叫自訂函式

    呼叫函式 - Python內建函式 / 匯入模組和函式

    函式的參數 - 預設參數 / 可變參數 / 關鍵字參數 / 命名關鍵字參數

    函式的返回值 - 沒有返回值 / 返回單個值 / 返回多個值

    作用域問題 - 局部作用域 / 巢狀作用域 / 全域作用域 / 內建作用域 / 和作用域相關的關鍵字

    用模組管理函式 - 模組的概念 / 用自訂模組管理函式 / 命名沖突的時候會怎樣(同一個模組和不同的模組)

    Day07 - 字串和常用數據結構

    字串的使用 - 計算長度 / 下標運算 / 切片 / 常用方法

    列表基本用法 - 定義列表 / 用下表存取元素 / 下標越界 / 添加元素 / 刪除元素 / 修改元素 / 切片 / 迴圈遍歷

    列表常用操作 - 連線 / 復制(復制元素和復制陣列) / 長度 / 排序 / 倒轉 / 尋找

    生成列表 - 使用range建立數位列表 / 生成運算式 / 生成器

    元組的使用 - 定義元組 / 使用元組中的值 / 修改元組變量 / 元組和列表轉換

    集合基本用法 - 集合和列表的區別 / 建立集合 / 添加元素 / 刪除元素 / 清空

    集合常用操作 - 交集 / 聯集 / 差集 / 對稱差 / 子集 / 超集

    字典的基本用法 - 字典的特點 / 建立字典 / 添加元素 / 刪除元素 / 取值 / 清空

    字典常用操作 - keys()方法 / values()方法 / items()方法 / setdefault()方法

    基礎練習 - 跑馬燈效果 / 列表找最大元素 / 統計考試成績的平均分 / Fibonacci數列 / 楊輝三角

    綜合案例 - 雙色球選號 / 井字棋

    Day08 - 物件導向編程基礎

    類和物件 - 什麽是類 / 什麽是物件 / 物件導向其他相關概念

    定義類 - 基本結構 / 內容和方法 / 構造器 / 析構器 / __str__方法

    使用物件 - 建立物件 / 給物件發訊息

    物件導向的四大支柱 - 抽象 / 封裝 / 繼承 / 多型

    基礎練習 - 定義學生類 / 定義時鐘類 / 定義圖形類 / 定義汽車類

    Day09 - 物件導向進階

    內容 - 類內容 / 例項內容 / 內容存取器 / 內容修改器 / 內容刪除器 / 使用__slots__

    類中的方法 - 例項方法 / 類方法 / 靜態方法

    運算子多載 - __add__ / __sub__ / __or__ /__getitem__ / __setitem__ / __len__ / __repr__ / __gt__ / __lt__ / __le__ / __ge__ / __eq__ / __ne__ / __contains__

    類(的物件)之間的關系 - 關聯 / 繼承 / 依賴

    繼承和多型 - 什麽是繼承 / 繼承的語法 / 呼叫父類方法 / 方法重寫 / 型別判定 / 多重繼承 / 菱形繼承(鉆石繼承)和C3演算法

    綜合案例 - 薪資結算系統 / 圖書自動折扣系統 / 自訂分數類

    Day10 - 圖形化使用者介面和遊戲開發

    使用tkinter開發GUI

    使用pygame三方庫開發遊戲套用

    「大球吃小球」遊戲

    Day11 - 檔和異常
  • 讀檔 - 讀取整個檔 / 逐行讀取 / 檔路徑
  • 寫檔 - 覆蓋寫入 / 追加寫入 / 文字檔案 / 二進制檔
  • 例外處理 - 異常機制的重要性 / try-except程式碼塊 / else程式碼塊 / finally程式碼塊 / 內建異常型別 / 異常棧 / raise語句
  • 數據持久化 - CSV檔概述 / csv模組的套用 / JSON數據格式 / json模組的套用
  • Day12 - 字串和正規表式
  • 字串高級操作 - 轉義字元 / 原始字串 / 多行字串 / in和 not in運算子 / is開頭的方法 / join和split方法 / strip相關方法 / pyperclip模組 / 不變字串和可變字串 / StringIO的使用
  • 正規表式入門 - 正規表式的作用 / 元字元 / 轉義 / 量詞 / 分組 / 零寬斷言 /貪婪匹配與惰性匹配懶惰 / 使用re模組實作正規表式操作(匹配、搜尋、替換、捕獲)
  • 使用正規表式 - re模組 / compile函式 / group和groups方法 / match方法 / search方法 / findall和finditer方法 / sub和subn方法 / split方法
  • 套用案例 - 使用正規表式驗證輸入的字串
  • Day13 - 行程和執行緒
  • 行程和執行緒的概念 - 什麽是行程 / 什麽是執行緒 / 多執行緒的套用場景
  • 使用行程 - fork函式 / multiprocessing模組 / 行程池 / 行程間通訊
  • 使用執行緒 - thread模組 / threading模組 / Thread類 / Lock類 / Condition類 / 執行緒池
  • Day14 - 網路編程入門和網路套用開發
  • 電腦網路基礎 - 電腦網路發展史 / 「TCP-IP」模型 / IP地址 / 埠 / 協定 / 其他相關概念
  • 網路套用模式 - 「客戶端-伺服器」模式 / 「瀏覽器-伺服器」模式
  • 基於HTTP協定存取網路資源 - 網路API概述 / 存取URL / requests模組 / 解析JSON格式數據
  • Python網路編程 - 套接字的概念 / socket模組 / socket函式 / 建立TCP伺服器 / 建立TCP客戶端 / 建立UDP伺服器 / 建立UDP客戶端 / SocketServer模組
  • 電子信件 - SMTP協定 / POP3協定 / IMAP協定 / smtplib模組 / poplib模組 / imaplib模組
  • 簡訊服務 - 呼叫簡訊服務閘道器
  • Day15 - 影像和文件處理
  • 用Pillow處理圖片 - 圖片讀寫 / 圖片合成 / 幾何變換 / 色彩轉換 / 濾鏡效果
  • 讀寫Word文件 - 文本內容的處理 / 段落 / 頁首和頁尾 / 樣式的處理
  • 讀寫Excel檔 - xlrd模組 / xlwt模組
  • 生成PDF檔 - pypdf2模組 / reportlab模組
  • Day16~Day20 - Python語言進階

  • 常用數據結構
  • 函式的高級用法 - 「一等公民」 / 高階函式 / Lambda函式 / 作用域和閉包 / 裝飾器
  • 物件導向高級知識 - 「三大支柱」 / 類與類之間的關系 / 垃圾回收 / 魔術內容和方法 / 混入 / 元類 / 物件導向設計原則 / GoF設計模式
  • 叠代器和生成器 - 相關魔術方法 / 建立生成器的兩種方式 /
  • 並行和異步編程 - 多執行緒 / 多行程 / 異步IO / async和await
  • Day21~30 - Web前端入門

  • 用HTML標簽承載頁面內容
  • 用CSS渲染頁面
  • 用JavaScript處理互動式行為
  • jQuery入門和提高
  • Vue.js入門
  • Element的使用
  • Bootstrap的使用
  • Day31~35 - 玩轉Linux作業系統

  • 作業系統發展史和Linux概述
  • Linux基礎命令
  • Linux中的實用程式
  • Linux的檔案系統
  • Vim編輯器的套用
  • 環境變量和Shell編程
  • 軟體的安裝和服務的配置
  • 網路存取和管理
  • 其他相關內容
  • Day36~40 - 資料庫基礎和進階

  • 關系型資料庫MySQL
  • 關系型資料庫概述
  • MySQL的安裝和使用
  • SQL的使用
  • DDL - 數據定義語言 - create / drop / alter
  • DML - 數據操作語言 - insert / delete / update / select
  • DCL - 數據控制語言 - grant / revoke
  • 相關知識
  • 範式理論 - 設計二維表的指導思想
  • 數據完整性
  • 數據一致性
  • 在Python中操作MySQL
  • NoSQL入門
  • NoSQL概述
  • Redis概述
  • Mongo概述
  • Day41~55 - 實戰Django

    Day41 - 快速上手
  • Web套用工作原理和HTTP協定
  • Django框架概述
  • 5分鐘快速上手
  • 使用檢視樣版
  • Day42 - 深入模型
  • 關系型資料庫配置
  • 管理後台的使用
  • 使用ORM完成對模型的CRUD操作
  • Django模型最佳實踐
  • 模型定義參考
  • Day43 - 靜態資源和Ajax請求
  • 載入靜態資源
  • 用Ajax請求獲取數據
  • Day44 - 表單的套用
  • 表單和表單控制項
  • 跨站請求偽造和CSRF令牌
  • Form和ModelForm
  • 表單驗證
  • Day45 - Cookie和Session
  • 實作使用者跟蹤
  • cookie和session的關系
  • Django框架對session的支持
  • 檢視函式中的cookie讀寫操作
  • Day46 - 報表和日誌
  • 透過HttpResponse修改響應頭
  • 使用StreamingHttpResponse處理大檔
  • 使用xlwt生成Excel報表
  • 使用reportlab生成PDF報表
  • 使用ECharts生成前端圖表
  • 配置日誌和Django-Debug-Toolbar
  • Day47 - 中介軟體的套用
  • 什麽是中介軟體
  • Django框架內建的中介軟體
  • 自訂中介軟體及其套用場景
  • Day48 - 前後端分離開發入門
  • 返回JSON格式的數據
  • 用Vue.js渲染頁面
  • Day49 - RESTful架構和DRF入門
    Day50 - RESTful架構和DRF進階
    Day51 - 使用緩存
  • 網站最佳化第一定律
  • 在Django計畫中使用Redis提供緩存服務
  • 在檢視函式中讀寫緩存
  • 使用裝飾器實作頁面緩存
  • 為數據介面提供緩存服務
  • Day52 - 檔上傳和富文本編輯
  • 檔上傳表單控制項和圖片檔預覽
  • 伺服器端如何處理上傳的檔
  • 富文字編輯器概述
  • wangEditor的使用
  • Day53 - 簡訊和信件
  • 常用簡訊閘道器平台介紹
  • 使用螺絲帽發送簡訊
  • Django框架對信件服務的支持
  • Day54 - 異步任務和定時任務
  • 網站最佳化第二定律
  • 配置訊息佇列服務
  • 在計畫中使用celery實作任務異步化
  • 在計畫中使用celery實作定時任務
  • Day55 - 單元測試和計畫上線
  • Python中的單元測試
  • Django框架對單元測試的支持
  • 使用版本控制系統
  • 配置和使用uWSGI
  • 動靜分離和Nginx配置
  • 配置HTTPS
  • Day56~60 - 實戰Flask

    Day56 - Flask入門
    Day57 - 樣版的使用
    Day58 - 表單的處理
    Day59 - 資料庫操作
    Day60 - 計畫實戰

    Day61~65 - 實戰Tornado

    Day61 - 預備知識
  • 並行編程
  • I/O模式和事件驅動
  • Day62 - Tornado入門
  • Tornado概述
  • 5分鐘上手Tornado
  • 路由解析
  • 請求處理器
  • Day63 - 異步化
  • aiomysql和aioredis的使用
  • Day64 - WebSocket的套用
  • WebSocket簡介
  • WebSocket伺服器端編程
  • WebSocket客戶端編程
  • 計畫:Web聊天室
  • Day65 - 計畫實戰
  • 前後端分離開發和介面文件的撰寫
  • 使用Vue.js實作前端渲染
  • 使用ECharts實作報表功能
  • 使用WebSocket實作推播服務
  • Day66~75 - 爬蟲開發

    Day66 - 網路爬蟲和相關工具
  • 網路爬蟲的概念及其套用領域
  • 網路爬蟲的合法性探討
  • 開發網路爬蟲的相關工具
  • 一個爬蟲程式的構成
  • Day67 - 數據采集和解析
  • 數據采集的標準和三方庫
  • 頁面解析的三種方式:正規表式解析 / XPath解析 / CSS選擇器解析
  • Day68 - 儲存數據
  • 如何儲存海量數據
  • 實作數據的緩存
  • Day69 - 並行下載
  • 多執行緒和多行程
  • 異步I/O和協程
  • async和await關鍵字的使用
  • 三方庫aiohttp的套用
  • Day70 - 解析動態內容
  • JavaScript逆向工程
  • 使用Selenium獲取動態內容
  • Day71 - 表單互動和驗證碼處理
  • 自動送出表單
  • Cookie池的套用
  • 驗證碼處理
  • Day72 - Scrapy入門
  • Scrapy爬蟲框架概述
  • 安裝和使用Scrapy
  • Day73 - Scrapy高級套用
  • Spider的用法
  • 中介軟體的套用:下載中介軟體 / 蜘蛛中介軟體
  • Scrapy對接Selenium抓取動態內容
  • Scrapy部署到Docker
  • Day74 - Scrapy分布式實作
  • 分布式爬蟲的原理
  • Scrapy分布式實作
  • 使用Scrapyd實作分布式部署
  • Day75 - 爬蟲計畫實戰
  • 爬取招聘網站數據
  • 爬取房地產行業數據
  • 爬取二手車交易平台數據
  • Day76~90 - 數據處理和機器學習

    Day76 - 機器學習基礎
    Day77 - Pandas的套用
    Day78 - NumPy和SciPy的套用
    Day79 - Matplotlib和數據視覺化
    Day80 - k最近鄰(KNN)分類
    Day81 - 決策樹
    Day82 - 貝葉斯分類
    Day83 - 支持向量機(SVM)
    Day84 - K-均值聚類
    Day85 - 回歸分析
    Day86 - 大數據分析入門
    Day87 - 大數據分析進階
    Day88 - Tensorflow入門
    Day89 - Tensorflow實戰
    Day90 - 推薦系統

    Day91~100 - 團隊計畫開發

    第91天:團隊計畫開發準備
    1. 軟體流程模型
  • 經典過程模型(瀑布模型)
  • 可行性分析(研究做還是不做),輸出【可行性分析報告】。
  • 需求分析(研究做什麽),輸出【需求規格說明書】和產品界面原型圖。
  • 概要設計和詳細設計,輸出概念模型圖、物理模型圖、類圖、時序圖等。
  • 編碼 / 測試。
  • 上線 / 維護。
  • 敏捷開發(Scrum)- 產品所有者、Scrum Master、研發人員 - Sprint
  • 產品的Backlog(使用者故事、產品原型)。
  • 計劃會議(評估和預算)。
  • 日常開發(站立會議、番茄工作法、結對編程、測試先行、程式碼重構……)。
  • 修復bug(問題描述、重現步驟、測試人員、被指派人)。
  • 評審會議(Showcase)。
  • 回顧會議(當前周期做得好和不好的地方)。
  • 補充:敏捷軟體開發宣言
  • 個體和互動 高於 流程和工具
  • 工作的軟體 高於 詳盡的文件
  • 客戶合作 高於 合約談判
  • 響應變化 高於 遵循計劃
  • 角色:產品所有者(決定做什麽,能對需求拍板的人)、團隊負責人(解決各種問題,專註如何更好的工作,遮蔽外部對開發團隊的影響)、開發團隊(計畫執行人員,具體指開發人員和測試人員)。
    準備工作:商業案例和資金、合約、憧憬、初始產品需求、初始釋出計劃、入股、組建團隊。
    敏捷團隊通常人數為8-10人。
    工作量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,盡量把每個工作分解到最小任務量,最小任務量標準為工作時間不能超過兩天,然後估算總體計畫時間。把每個任務都貼在白板上面,白板上分三部份:to do(待完成)、in progress(進行中)和done(已完成)。
    1. 計畫團隊組建
    團隊的構成和角色
    說明:謝謝付祥英女士繪制了下面這張精美的公司組織架構圖。
  • 編程規範和程式碼審查(flake8、pylint)
  • Python中的一些「慣例」(請參考【Python慣例-如何編寫Pythonic的程式碼】)
    影響程式碼可讀性的原因:
  • 程式碼註釋太少或者沒有註釋
  • 程式碼破壞了語言的最佳實踐
  • 反模式編程(義大利直麵程式碼、復制-黏貼編程、自負編程、……)
  • 2.團隊開發工具介紹

  • 版本控制:Git、Mercury
  • 缺陷管理:Gitlab、Redmine
  • 敏捷閉環工具:禪道、JIRA
  • 持續整合:Jenkins、Travis-CI
  • 請參考【團隊計畫開發】。

    計畫選題和理解業務

    1. 選題範圍設定
    CMS(使用者端):新聞聚合網站、問答/分享社群、影評/書評網站等。
    MIS(使用者端+管理端):KMS、KPI考核系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
    App後台(管理端+數據介面):二手交易類、報刊雜誌類、小眾電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
    其他型別:自身行業背景和工作經驗、業務容易理解和把控。

    2.需求理解、模組劃分和任務分配

    需求理解:頭腦風暴和競品分析。
    模組劃分:畫思維導圖(XMind),每個模組是一個枝節點,每個具體的功能是一個葉節點(用動詞表述),需要確保每個葉節點無法再生出新節點,確定每個葉子節點的重要性、優先級和工作量。
    任務分配:由計畫負責人根據上面的指標為每個團隊成員分配任務。

    3.制定計畫進度表(每日更新)

    第92天:Docker的使用

    第93天:資料庫設計和OOAD

    概念模型和正向工程

    1. UML(統一建模語言)的類圖
    1. 透過模型建立表(正向工程)
      python manage.py makemigrations app python manage.py migrate

    物理模型和反向工程

    1. PowerDesigner

    2.透過數據表建立模型(反向工程)
    python manage.py inspectdb > app/models.py

    第94天:網路API介面設計
    第95天:使用Django開發計畫

    計畫開發中的公共問題

    資料庫的配置(多資料庫、主從復制、資料庫路由)
    緩存的配置(分區緩存、鍵設定、超時設定、主從復制、故障恢復(哨兵))
    日誌的配置
    分析和偵錯(Django-Debug-ToolBar)
    好用的Python模組(日期計算、影像處理、數據加密、三方API)

    REST API設計

    1. RESTful架構
  • 理解RESTful架構
  • RESTful API設計指南
  • RESTful API最佳實踐
    1. API介面文件的撰寫
  • RAP2
  • YAPI
    1. django-REST-framework的套用

    計畫中的重點難點剖析

    1. 使用緩存緩解資料庫壓力 - Redis
    2. 使用訊息佇列做解耦合和削峰 - Celery + RabbitMQ

    第96天:軟體測試和自動化測試

    單元測試

    1. 測試的種類
    2. 編寫單元測試(unittest、pytest、nose2、tox、ddt、……)
    3. 測試覆蓋率(coverage)

    計畫部署

    1. 部署前的準備工作
  • 關鍵設定(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 緩存 / 資料庫)
  • HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
  • 日誌相關配置
    1. Linux常用命令回顧
    2. Linux常用服務的安裝和配置
    3. uWSGI/Gunicorn和Nginx的使用
    Gunicorn和uWSGI的比較
  • 對於不需要大量客製化的簡單應用程式,Gunicorn是一個不錯的選擇,uWSGI的學習曲線比Gunicorn要陡峭得多,Gunicorn的預設參數就已經能夠適應大多數應用程式。
  • uWSGI支持異構部署。
  • 由於Nginx本身支持uWSGI,線上上一般都將Nginx和uWSGI捆綁在一起部署,而且uWSGI屬於功能齊全且高度客製的WSGI中介軟體。
  • 在效能上,Gunicorn和uWSGI其實表現相當。
    1. 虛擬化技術(Docker)

    效能測試

    1. AB的使用
    2. SQLslap的使用
    3. sysbench的使用

    自動化測試

    1. 使用Shell和Python進行自動化測試
    2. 使用Selenium實作自動化測試
  • Selenium IDE
  • Selenium WebDriver
  • Selenium Remote Control
    1. 測試工具Robot Framework介紹
    第97天:電商網站技術要點剖析
    第98天:計畫部署上線和效能調優
    1. MySQL資料庫調優
    2. Web伺服器效能最佳化

    3.程式碼效能調優

  • 多執行緒
  • 異步化
  • 4.靜態資源存取最佳化

  • 雲端儲存
  • CDN
  • 第99天:面試中的公共問題
    第100天:英語面試

    作者:駱昊 (jackfrued)

    來源:github

    github地址:https:// github.com/jackfrued/Py thon-100-Days

    另外,CSDN也出過一個圖譜,

    希望能幫到你。