Python / 檔案目錄處理 (windows system)

Python / 檔案目錄處理 (windows system)

目錄 取得程式執行目錄 (current directory) 取得檔案大小 (Filesize) 確認檔案或目錄是否存在 刪除目錄下所有檔案 ▍取得程式執行目錄 (current working directory) ▍取得檔案大小 (Fileszie) 取得檔案大小的方法有三種,回傳的結果是位元組 (bytes) 使用 os.path.getsize(path) 使用 os.stat(path).st_size 使用 Path(path).stat().st_size (Python 3.4+) Reference Getting file size in Python? | stack overflow ▍確認檔案或目錄是否存在 在 os 套件中有三種相關的方法可以確認檔案或目錄是否存在: os.path.exists() 檢查檔案目錄是否存在 os.path.isfile() 確認路徑是否為檔案 os.path.isdir() 確認路徑是否為路徑 另外,在 Python 3.4 以上的版本可以使用 pathlibPath 套件: Reference Python Check If File...

Python / 使用 Selenium 撰寫網路爬蟲程式 (chromedriver)

Python / 使用 Selenium 撰寫網路爬蟲程式 (chromedriver)

想要用 Python 實作網路爬蟲程式的方法有兩種:使用 requests 套件或 selenium 套件。兩個套件的差異在於 requests 套件是使用最基礎的 GET 和 POST 方法和 server 溝通,好處在於它的速度快、作法單純,壞處是必須處裡來自於網站的一切資料傳輸動作、Cookies Handling、甚至更複雜的 JS 渲染、網頁程式互動等複雜的動作。如果要爬的目標網站內容比較單純,或甚至可以透過 API 取的資料,那可以考慮使用 requests 套件。不過現在的網站設計越來越複雜,本篇使用的 selenium 套件則是透過控制瀏覽器 (本篇使用 chromedriver),讓瀏覽器為我們處裡上面提到的複雜動作,例如登入帳號之後的 cookies handling、表單填寫並送出 POST request 或是 JS 渲染後的網站動作,讓我們模擬實際操作網站的方式進行網站爬蟲。本篇目前不是完整的爬蟲程式教學,只是筆記一些關於使用 Selenium 套件撰寫爬蟲程式的方法。 目錄 如何取得 HTML 的 attribute (how to get attribute of element) 實作捲動畫面 (Scrolling) ▍如何取得 HTML 的 attribute (how to...

Python / 如何在建立 SQLite 資料庫並在 python 中執行 SQL Script

Python / 如何在建立 SQLite 資料庫並在 python 中執行 SQL Script

SQLite 雖然是一個資料庫,但它並非是一個完整的資料庫伺服器,它是以 C 語言為基礎並根據 SQL 標準開發出來的小型資料庫檔案格式,是一個開放原始碼的語言。SQLite 現在幾乎已經內建在許多跨平台的裝置上,而 sqlite3 是 Python 內建的套件,可以用以存取、執行 SQLite資料庫檔案。 ▍安裝 DB Browser ▍在 Python 上連線 SQLite 資料庫並執行 SQL Script sqlite3 是 Python 的內建套件,可以直接 import 取用。使用時先以 connect() 建立資料庫連線,並建立 cursor() 物件以呼叫 execute() 執行 SQL Script。最終記得 commit() 儲存上面執行的任何修改,並以 close() 關閉資料庫連線。 ▍讀取 SELECT 結果 使用 execute() 執行 SELECT 語法會以 tuple 串列的格式回傳資料 在官方的文件中的範例: ▍建立 temp table...

SQLite / 語法筆記

SQLite / 語法筆記

目錄 如何在 SQLite 實現 Truncate Table SQLite 的時間與日期函數 取得當下時間(在地時區) 建立 temp table ▍如何在 SQLite 實現 Truncate Table TRUNCATE 指令在 SQL Server 中是清除整張 table 的所有 records,但不會刪除整張表單也不會移除 table schema。SQLite 不是使用 TRUNCATE,而是使用 DELETE 這個指令。 Reference SQLite: TRUNCATE TABLE Statement | totn SQLite ▍SQLite 的時間與日期函數 在 SQLite 中有五個關於時間和日期的函數: date(time-value, ...) : The date() function returns the date in this...

Python / 如何處裡亞洲文字(Unicode, UTF-8)?以兩個字元計算顯示長度?轉換字串與bytes?

Python / 如何處裡亞洲文字(Unicode, UTF-8)?以兩個字元計算顯示長度?轉換字串與bytes?

目錄 將 utf-8 字串轉換為 bytes 格式,並計算 bytes 長度 ▍將 utf-8 字串轉換為 bytes 格式,並計算 bytes 長度 使用 encode() 函數可將字串轉換為 bytes 格式,若將 bytes 印出來可以看到字串最前面是以 b'' 開頭顯示表示此為 bytes array。其中可見原本標準的 ASCII 字元能然維持一個 byte 長度,而且直接顯示字元。如果是 Unicode 文字則是用 \x 16進位的方式表示,且以中文字為例在 UTF-8 編碼下是 3 個 bytes 長度。例如:”串”的 Unicode 編碼為 \xe4\xb8\xb2。 若要取得字串的 bytes 總長度,在轉換成 bytes 格式之後可以直接使用 len() 函數取得長度。 Reference How can I...

Mac / Python使用Selenium爬蟲無法開啟chromedriver

Mac / Python使用Selenium爬蟲無法開啟chromedriver

最近更新MacOS之後發現正在開發的Python爬蟲程式無法啟動chromedriver了,系統出現了下面這段警告訊息: “chromedriver” cannot be opened because it is from an unidentified developer.macOS cannot verify that this app is free from malware. 中文的介面應該會顯示: 無法打開「chromedriver」,因為它來自未識別的開發者。macOS無法驗證此App未包含惡意軟體。 稍微Google一下發現好像很多人都有遇到類似的狀況,大概都是因為新版的MacOS對安全性的要求變得更高,導致許多沒有被認證的程式預設都被禁止執行,有些從網路上下載的程式也有可能遇到這種狀況。 解決的辦法有兩種: ▍取消程式的隔離註記(quarantine flag) 執行步驟: 開啟終端機(terminal) 移動到該程式的目錄下,如我的chromedriver放在下面的目錄下 執行下列任一個指令 xattr 編輯檔案目錄的附加屬性這個系統指令可以編輯檔案目錄的附加屬性,例如系統目錄屬性(com.apple.FinderInfo)或是這邊要講的隔離屬性(com.apple.quarantine)。xattr指令的語法是:xattr <options> attributes <name of application>在chromedirver所在的目錄下,執行xattr指令使用 -d 移除chromedriver的隔離屬性(com.apple.quarantine): spctl 編輯程式的安全性權限標記通常不會是這個原因造成chromedriver無法開啟,不過偶爾還是會遇到類似的狀況。出於安全性的理由,對於一些無法辨識來源的程式系統可能會禁止執行,使用spctl指令可以開啟”任何來源“的程式執行權限。spctl指令的語法是:spctl <option> <assessment label> <label name> <name of application> ▍使用開發者工作(Developer Tools) 第二種方法是使用開發者工作(Developers Tools)。如果你有安裝X-Code的話,可以將chromediver加入系統的開發者工具清單中,開發者工具會忽略隔離標記(qurantine...