親愛的讀者,您好:

*下載本書檔案: 請點我
1. 本書的範例程式
2. 加入會員可獲得以下 BONUS:
(1) BONUS-A 物件導向補完
(2) BONUS-B 區塊鏈實作技術
(3) BONUS-B 區塊鏈範例程

* 歡迎到旗標【從做中學 AI 】粉絲團一起學習討論:
https://www.facebook.com/flaglearningbydoing


*重要通知:(2020/11/12)

第 7 章由於 Pixabay 網站已加了防爬蟲機制, 會嚴格檢查客戶端是否為瀏覽器, 經測試即使在程式中加上仿冒瀏覽器的表頭, 也會被擋掉。目前解決方法為「改用 Selenium 來自動化操作 Chrome」, 以讀取所需的網頁資料:
  1. 只需更改 photo_module.py 中的 get_photolist() 即可, 改好的程式檔如附件。
  2. 執行範例程式自動開啟Chrome時會出現一訊息框, 請勿按【取消】鈕, 可以不管它, 或按 X 將之關掉。程式抓取網址列表後即會自動結束Chrome。
  3. 如要抓取較高解析度, 可將第49行取消註解 (但練習時建議抓低解析就好)
  4. 下載範例程式

*重要通知:(2020/03/24)

第15章15-3 頁的 pip install PyAudio 如果無法安裝成功, 請參考網路高手所介紹的方法, 下載適合的 whl 檔來安裝, 詳見 https://medium.com/@jscinin/python-3-7-install-pyaudio-e7c75edbbef4

*重要通知:(2020/01/15)

由於 Youtube 網站經常會改版, 第 8 章在使用 pytube 套件 (9.5.3 版) 時若出現 KeyError: 'url_encoded_fmt_stream_map'; 的錯誤訊息, 請參考 pytube 套件 github 提供的修改方式進行修復 :
https://github.com/nficano/pytube/pull/534/commits/e5f1a9e2476b096ed2012939d50851d3499016e1
開啟以上網頁後, 修復方式如下:
  1. 請先找到 pytube 的安裝目錄 (通常是位於 Anaconda 的安裝目錄下, 例如:C:\Users\使用者名稱\Anaconda3\Lib\site-packages\pytube)。
  2. 開啟 mixins.py 檔。
  3. 根據 github 指示進行修改 (紅色為移除、綠色為新增), 不熟悉修改方式的讀者可以參考底下附圖喔~




*以下更新說明是依照刷次排列, 請先查看書中版權頁裡的刷次, 例如為 5 刷, 則只需查看 5 刷 (含) 之後的更新說明即可。

初版 7 刷更新說明

頁次 刊登日期與更新說明
15-26 2020/02/18
第15-24頁中間第 4 步, 由於Google 改變了網頁格式, 將 '/' 改成了 ' › ' (有3個字元:中間為特殊符號, 前後有2個空白), 如下圖紅色箭頭處:



所以請將15-26頁的程式15-9.py中第 15 行改為以 ' › ' 來切割字串即可:

kwd = wiki_url.text.split(' › ')[-1] #←將小括號中的 '/' 改為' › '

另外, 公用模組 chatBot_module.py 中的第 81 行也請同樣修改。

*由於各網站的內容隨時可能變動, 如果又有變動, 請讀者自行比照上述方式變通。


初版 5 刷更新說明

頁次 刊登日期與更新說明
13-27
13-29
2019/05/22 (範例檔 FT700.zip 已更新)
由於最新版本的 OpenCV (4.1.0.25), 其 cv2.findContours() 只會傳回 2 個值, 而本書使用的 OpenCV 3.4.3 版則會傳回 3 個參數。二者差異如下:

OpenCV4.x:輪廓座標, 輪廓階層關係 = cv2.findContours(...)
OpenCV3.x:輪廓影像, 輪廓座標, 輪廓階層關係 = cv2.findContours(...)

所以請將 13-5.py 第14行 (13-27頁)、及 monitor.py 第27行 (13-29頁) 中的
_, contours, _ = cv2.findContours(...)
改成如下 (將最前面的 _, 刪除):
contours, _ = cv2.findContours(...)

另外, 若不想更改程式, 也可以將 OpenCV 套件降級為本書所使用的版本 (3.4.3)。 降級的方法, 請先開啟 Anaconda Prompt 令命視窗, 然後執行以下指令:

pip install opencv-python==3.4.3.18
14-9
14-25
2019/06/11 (範例檔 FT700.zip 已更新)
因高鐵網站已開始偵測並封鎖 Selenium 的自動化操作, 所以瀏覽器第一次讀完網頁之後, 就會被封鎖而無法再讀取任何資料了 (會顯示 Access Denied 訊息)。請將 14-0.py 第 26 行(14-9頁)、及 ticket.py 第 9 行 (14-25頁) 的:

driver = webdriver.Chrome()

改為:

option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = webdriver.Chrome(options = option) #加入選項來指定不要有自動控制的訊息

在執行程式時, 開啟的 Chrome 右上角會出現如下訊息框, 請不用管它 (不可按 停用 鈕), 或按 x 將之關閉, 即可正常執行。


15-26 2019/05/28 (範例檔 FT700.zip 已更新)
因 Google 搜尋開始檔爬蟲程式, 因此必須將程式偽裝成瀏覽器才行,
請將 15-9.py 第 7 行以及 chatBot_module.py 第 74 行的:

  response = requests.get(url)

改成:

  # 以下是要在 get 的表頭加上瀏覽器的資訊, 以偽裝成瀏覽器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
    ' AppleWebKit/537.36 (KHTML, like Gecko)'
    ' Chrome/70.0.3538.102 Safari/537.36'}
response = requests.get(url, headers=headers)

即可執行, 否則會因沒有讀取到所需的資料出現錯誤。

初版 3 刷更新說明

頁次 刊登日期與更新說明
14-27 2018/03/17 (本項為注意事項)
如果執行程式時, 驗證碼一直無法辨識成功, 可能是如下原因請先排除:
1. 程式 (ticket_module.py) 中的訂購日期必須改為高鐵可接受預訂的日期, 否則無法通過驗證碼辨識。
2. Windows 的顯示文字大小必須設為100% (參見14-10頁最下面的說明)
註:辨識並非每次都能成功, 因此我們的程式會自動嘗試20次, 經測試平均1~3次就能成功。

初版 2 刷更新說明

頁次 刊登日期與更新說明
4-15 2019/01/23
本書三刷時新增以下補充學習內容:
點擊下載補充學習內容
8-33 2019/01/02 (範例檔 FT700.zip 已更新)
下方範例程式 8-17.py 第一行 import ytube_moudes as m, 請將 ytube_modues 最後的 s 刪除。
14-26 2019/01/22 (本書三刷時已更新, 範例檔 FT700.zip 已更新)
由於有時高鐵網站的反應速度會變的很慢 (原因不明, 我們猜測是節慶期間流量較大), 導致我們的程式抓到「尚未更新完成的舊驗證圖」。因此我們改用另一種寫法, 就是不等待固定的時間, 而是【等待高鐵網頁更新完成才繼續動作】:


初版 1 刷更新說明

頁次 刊登日期與更新說明
1-10 2018/12/17 (本書二刷時已更新)
最下面一行程式, 請將 , 改為 ; (分號為敘述分隔符號):
In [3]: c=5; d=6
13-25 2018/12/17 (本書二刷時已更新)
最下面的參考網址, 請將 https://medium.com/p/2a4c8e7974d3/edit 改為:
https://medium.com/@zhoumax/opencv-contour-%E8%BC%AA%E5%BB%93-2a4c8e7974d3
14-8 2018/12/17 (範例檔 FT700.zip 已更新)
由於在本書出版後, 高鐵網站又有改版, 在開啟網頁時多加了一個【個人資料使用說明】訊息框:

因此必須在程式中多加一行來自動將此框關閉:
1. 請在程式 14-0.py的 input_ticket_info(driver) 函式的第一行加入:
driver.find_element_by_id('btn-confirm').click() #關閉個人資料使用訊息框
2. 請在程式 ticket_module.py 的 input_ticket_info(driver) 函式的第一行加入:
driver.find_element_by_id('btn-confirm').click() #關閉個人資料使用訊息框
14-8 2018/12/17 (範例檔 FT700.zip 已更新)
在訂票時如果輸入不可預訂的日期, 將導致錯誤而無法通過驗證碼辨識, 因此必須修改程式中的日期為正確日期(今日起4週內), 或是將自動輸入日期的程式註解掉以使用預設的當天日期 (ticket_module.py):
# e.clear() # 先清除內容
# e.send_keys("2018/12/05") # 輸入日期


各章參考連結

第 0 章
0-1 Anaconda 官網
0-2 Anaconda Cloud 網站 (查詢 conda 適用的套件)
0-2 Pypi 網站 (查詢 pip 適用的套件)
0-2 用conda 命令來建立及管理執行環境
補充學習 Google Colaboratory (Google 的 Jupyter Notebook)
補充學習 Azure Notebook (微軟的 Jupyter Notebook)
第 1 章
1-2 內建函式的名稱列表
1-2 變數的命名慣例 (官方 PEP 8 文件)
1-3 完整的 ASCII 列表
1-4 運算子優先順序
第 2 章
2-5 字串 str 的詳細說明及操作方法
2-7 Python 內建模組 copy 的 deepcopy() 函式
第 3 章
3-4 Python 內建的例外類型
第 4 章
4-4 Python Scope 與 Namespace
第 5 章
5-3 維基百科 (搜尋 'HTTP狀態碼')
5-5 常規表達式的試驗場
5-7 下載 Chrome 瀏覽器的 WebDriver 安裝程式
5-7 Selenium 官網的下載區
第 6 章
6-1 標準函式庫中的套件查詢
6-1 open 函式的詳細說明
6-1 有關字元編碼的說明
6-2 twstock 套件
6-3 IFTTT 網站
第 7 章
7-2 pixabay 免費圖片網站
第 8 章
8-1 tkinter 套件說明
8-1 顏色的選擇:色碼表
8-5 you-get 套件的官網
8-5 命令視窗內設定文字顏色的特殊字元
第 9 章
9-1 可看到比特幣歷史價格的 CoinGecko 網站
9-1 關於 plot() 參數的用途及設定方法
第 10 章
10-1 OpenCV 3.4.3 版本的線上說明
10-1 OpenCV 支援的圖檔格式 (OpenCV 的官網文件)
10-2 Azure 的 Computer Vision 網頁
10-2 JSON 官網
第 11 章
11-6 旗標科技公司的「無人自駕車」展示影片
第 12 章
12-2 OpenCV 訓練分類器並產生 Haar 特徵檔的方法
12-3 第三方提供的特徵標記小工具
第 13 章
13-1 Gmail 的郵件伺服器設定說明
13-1 Gmail 啟用低安全性應用程式存取權限
13-2 美國 Twilio 公司的簡訊服務
13-3 OpenCV 套件 threshold() 的說明及設定模式
13-3 OpenCV 套件 findContours() 的搜尋模式
13-3 OpenCV 套件 findContours() 的近似法
13-3 OpenCV 套件 findContours() 回傳的輪廓階層關係
第 14 章
14-1 高鐵訂票網頁
14-2 下載 Tesseract-OCR 函式庫
第 15 章
15-1 查看 recognize_google() 方法可以使用哪些語言
15-1 SpeechRecognition 套件的參考網址
15-1 查看 recognize_google() 方法可以使用哪些語言
15-4 中文維基百科網站
第 16 章
16-1 OpenCV 套件 putText() 方法的字體選擇
16-3 sqlite 3 模組的說明
16-4 Azure 的 臉部 API
附錄 A
PyInstaller 官網

top