程式開發採用Python 3.6及MSSQL 2012版本。連接pop伺服器自動地爬取郵件,依特定掃描規則(主旨、寄件者等)爬取Email。使用正則表達式解析內文並將分析的結果存入資料庫,並下載Email附件檔案到指定路徑。最後於pop伺服器端刪除已存入資料庫的郵件。此專案的目標為將Email檔案,轉變為結構化的資料並儲存於資料庫,以利後續的應用。
- 目標: 給定Email帳號密碼、POP伺服器名稱、連接埠,以POP3協定運作之所有Email。此處以爬取個人OUTLOOK信箱為例,需於OUTLOOK中設定權限授權:
- 爬取欄位: Email的標題、內容、寄件者、收件者、寄件時間、Message ID、附件檔案(另存於指定資料夾)、並從內容中分析出每封信的詞頻(Term Frequency)
- 運行模式:
- 將爬取過的Email存入eml_log資料表,後續用Uid判別不重複爬取。
- 依爬取規則將符合目標之Email儲存於email_pop資料表,並將附件檔案另存於指定資料夾。
- 將存入email_pop資料表的Email,於POP Server端刪除。
- 爬取規則:
- 排除已爬取過並存入資料庫的Email,僅爬取新增的Email,縮短每次爬取的時間。
- 指定寄件者格式,或不指定全部爬取。
- 可以選擇排除沒有附件檔案的email。
- Database資料表:
- eml_log:
- email_pop:
| 欄位名稱 | 欄位說明 | 資料格式 |
|---|---|---|
| ID | table index | int |
| Eml_datetime | 寄件時間 | datetime |
| type | 掃描狀態 | nvarchar(50) |
| time | 執行時間 | datetime |
| MessageID | Email ID | nvarchar(MAX) |
| Subject | 標題 | nvarchar(MAX) |
| Uid | POP ID | nvarchar(MAX) |
| 欄位名稱 | 欄位說明 | 資料格式 |
|---|---|---|
| ID | table index | int |
| Run_time | 執行時間 | datetime(50) |
| Eml_datetime | 寄件時間 | datetime |
| Eml_from | 寄件者 | nvarchar(MAX) |
| Eml_to | 收件者 | nvarchar(MAX) |
| Subject | 標題 | nvarchar(MAX) |
| Content | 內容 | nvarchar(MAX) |
| Pdf_name | 附檔名稱 | nvarchar(MAX) |
| MessageID | Email ID | nvarchar(MAX) |
| Uid | POP ID | nvarchar(MAX) |
| TFs | Email內容詞頻分析 | nvarchar(MAX) |
- 下載資料庫套件
pip install pyodbc - 下載email套件
pip install email - 下載文本分析套件
pip install jieba - 下載連接pop server套件
pip install poplib
- "DB": 設定資料庫相關訊息driver, server, database name, uid, password。
- "email_from":設定指定爬取的寄件者格式,或設置為空,不做限制。
- "save": 設定附件檔案下載路徑。