發表文章

喵喵程式-批次下載檔案

最近因為有大量下載的需求,比較久以前是用flashget這種下載器裡面有批次下載的功能,再去做,不過基本上這類下載器通常都是用數字去做批次,如果檔案的來源不是數字規則就會有問題,而且flashget也都不知道多久以前了,也不想為了這個再去找別的程式,就嘗試用python自己做。 基本的流程還是要先去網頁原始碼裡面查看有沒有下載的連結,通常可以用副檔名去查詢,例如.pdf、.jpg這類的,這樣可以找到原始來源的網址。再來就是觀察有沒有規則,有了規則之後就可以用迴圈去寫,在做批次下載。 我的批次規則來自一個excel檔,裡面會有連結的檔名還有我希望存檔的檔名。這邊就用pandas去讀取資料,當然如果是數字規則,直接用迴圈寫就可以了。再把網址拼出來用requests發出要求,最後把檔案存下來。 #需要安裝的套件放最前面 #pip install pandas requests import pandas as pd import requests def download_url(): df=pd.read_excel(r'files/pdf_detail.xlsx',converters={'連結名稱':str,'檔名':str}) #這邊讓資料近來都是str避免python判斷是數字的時候可能會把0123變成123 print('Start') i=0 j=10 while i<len(df): url='https://download.url/'+df.iloc[i,0]+'.pdf' #拼出網址 response = requests.get(url) open('download/'+df.iloc[i,1]+'.pdf', "wb").write(response.content) if i/len(df)*100>j: #做一個下載百分比,不然會有點懷疑到底抓到哪裡了,或是陷入無限迴圈 print(str(int(i/len(df)*100))+'...

喵喵程式-tkinter日期選擇器

平常我們在用google如果是日期欄位會自動跳出可以選擇日期的欄位,這個功能用tkinter製作需要引入套件tkcalendar。基本上是要讓其他使用者用平常習慣的輸入方式,又是個大家被好用的東西寵壞的狀況,不過GUI本來就是要越懶越好,這個功能在Access或一般網頁也都很常見,所以必須做出來。 程式目標: 1. 預設今天日期 2. 跳出日期選擇器 3. 選完日期後自動選擇器 import tkinter as tk from tkinter import ttk import time #產生今天日期用的 from tkcalendar import Calendar #日期選擇器,這個要另外安裝套件 def today_yyyymmdd(): #日期參數後面可能會常常用到,先做成函式。 year=time.localtime().tm_year month=time.localtime().tm_mon day=time.localtime().tm_mday return year,month,day #日期選擇框參考,https://stackoverflow.com/questions/4443786/how-do-i-create-a-date-picker-in-tkinter def day_choose(event): #如果要做成按鈕,記得把event刪掉 global date_inp def insert_day(): date_inp.delete(1,'end') #插入日期資料前,先刪掉本來的資料 date_inp.insert(1,cal.selection_get()) #插入日期選擇器資料 top.destroy() #最後把彈出式視窗關掉 top = tk.Toplevel(root) #彈出式視窗 #日期選擇器,日期帶入預設今天日期 cal = Calendar(top, font="10", selectmode='day', cursor="hand1...

喵喵程式-原生python安裝與使用

 呵呵,果然又拖很久才更新,中間其實還有二個沒發布的,之後修得比較好再發布吧。不過因為我Python主要都是在工作電腦用,所以相關語法也都在工作電腦。然後主力電腦掛掉了,放了一年到現在疫情比較嚴重才想說去把記憶體送保固吧,所以也是現在主力電腦才復活,不過雖然叫主力電腦,但是還是很舊啦,礦潮快結束阿,我想更新顯卡。 這篇主要是要說當今天不使用Anaconda後會發生甚麼事,那些我被Anaconda寵壞的事情。 無論是覺得Anaconda太大,還是發現Anaconda其實應該是要商業付費的,還是覺得自己學了一陣子該成長了,無論是哪種理由,換回原生python都會有需要適應的地方。 1. CMD的語法變了     以往在安裝Anaconda後無論是要安裝還是要執行都是直接Key "pip install ......."這類的,但是換成原生的就必須加上"py -m "整段就會變成"py -m pip install .......",這個問題我習慣了一陣子,更不要說我的筆電還是用Anaconda,習慣上需要切換。 2. 沒有安裝PIP      Anaconda一開始就安裝好pip的套件管理程式,或是用conda也是可以的,但是當放棄Anaconda後就必須自己來了。Python好像本來就有pip套件,只是必須自己安裝,我這邊就用是直接去pip的網頁下載,再自行安裝。方法則是到到pip的網頁。 (https://pip.pypa.io/en/stable/installing/),可以先按步驟檢查pip的版本"py -m pip --version",沒有的話再安裝,只要照"Installing with get-pip.py"裡面的步驟就可以了。接著就可以使用pip了。 3. 虛擬空間安裝位置      Anaconda裡面有內建conda的虛擬空間管理,conda好像不能獨立安裝,所以還是要自己來,這邊要注意的是以往conda都很sweet的幫你把虛擬空間都整理好再獨立統一的地方,但是現在如果像我是用原生的虛擬空間管理系統venv,他會直接幫你安裝在CMD執行的路徑,所以無論怎樣都要記得把安裝路徑統一到某個資料夾,或是像我是直接裝在我放python專案的資料夾。剩下的執...

喵喵程式-民國年輸入與確認

 Python版本3.7 需引用time套件,如果是用Anaconda安裝的應該是有內建了,如果發現import有問題,記得安裝 pip install time 台灣人的累的地方,民國年,基本上台灣網頁都有分民國年和西元年二種,在爬蟲的時候會造成問題。 1. 日期計算,有時候我們爬出來的資料可能長這樣1100101,民國110年1月1日,這種基本上不能用計算,同一個月還可以用減的,跨月就會掛掉,而且還有閏年的問題。 2. 輸入的時候,在爬蟲的時候有時候會需要輸入查詢日期,大部分我在寫程式的時候都會作防呆,以防止有人輸錯字、日期錯誤、全半形錯誤、格式錯誤、少輸入字等等......有趣的狀況。 以下示範怎麼設定輸入民國年月日的防呆: import time day_f=str(input("請輸入起日 (yyymmdd):")) while True: try: time.strptime(str((int(day_f[0:3])+1911))+day_f[3:],"%Y%m%d") break except: print("日期格式輸入錯誤,請重新輸入。") day_f=str(input("請輸入起日 (yyymmdd):")) day_f=str(input("請輸入起日 (yyymmdd):")) 這個是片段,我原始的設計是有day_f和day_l,起日與迄日,day_l寫法一樣,換個字就好,在經驗上看到yyymmdd的台灣人大概就知道是要輸民國年,當然也可以在加上其他字作更多提示。設定輸入字串可以減少後面的問題 while True: try: time.strptime(str((int(day_f[0:3])+1911))+day_f[3:],"%Y%m%d") break except: print("日期格式輸入錯誤,請重新輸入。") day_f=str(input("請輸入起日 (yyymmdd):")) 這裡先從...

喵喵程式-Pthon安裝、虛擬環境、IDE

 喵喵大概從前年開始接觸Python,這邊算是做一點學習紀錄,也順便紀錄一下目前發生過的問題,畢竟Python的資源大多都還是以英文為主,相信應該有和我一樣很多英文爛到炸掉的人,仔取得資訊上會有些困難。 簡單來說接下來這個系列就是學習筆記,如果有更好的方法希望大家提供。 在開始Python之前先安裝必要的東西, Anaconda 。 https://www.anaconda.com/products/individual Anaconda的好處上網搜尋會一堆,我這邊就寫幾個我覺得比較重要的: 1. 基礎套件,Pandas、openpyxl、time,這類的裡面一開始就有 2. 同時安裝pip install,之後安裝別的套件也都是靠這個 3. 虛擬環境,這個很重要,我後面再講 安裝好了之後,就會在程式發現Anaconda的連結,先開啟這個Anaconda Navigator,這個就是可以管理虛擬環境的程式。 虛擬環境重要的是,相信很多人都和我一樣最後作完會有需要弄成exe程式去執行,像是每天固定執行爬某個網頁的資料,然後執行那台電腦又沒有安裝python。這時候如果沒有作虛擬環境,再包裹成exe檔的時候就會連同不需要的套件一起包進去,檔案就會很大。 以我自己來說,之前曾經作過一個上課簽到程式,連GUI都做好了,然後作完包成exe發現1G多,也太大,就是因為把之前其他練習的東西一起包進去的關係。而且包完還不能再別台電腦執行,完全找不到原因。 總之就是先用Anaconda Navigator創造不同的虛擬環境,之後每次不同專案也都要創造不同的虛擬環境,去隔離不同的環境,當然缺點就是套件每次都要重裝。 套件裝好了再來就是進入虛擬環境,然後安裝整合開發環境 (IDE),IDE是甚麼就不解釋,我也不完全懂,基本上就是程式編輯介面。 IDE的部分我個人都是用Spyder,選擇原因是因為他有"工作目錄"的視窗,對新人來說不熟print和slice不熟,很難想像自己匯進來的資料是甚麼鬼,這時候Spyder可以直接看到資料的內容,會好上手很多。 使用命令提示字元 (cmd),輸入下面這些 activate test pip3 install spyder 第一段就是進入虛擬環境,之後記得所有安裝套件都要先執行這個。 然後第二段就是安裝IDE,之後就...

秘境車站-1090202康樂車站

圖片
繼續往回走,康樂車站感覺應該是位在重劃區裡面,距離史前博物館很近,但是又不是太近,附近感覺就像路科已經規劃好地段,卻一直找不到進駐的廠商,當然路科這幾年有好一點~ 看站的大小,明顯本來是預計會有很多遊客的站,但是現在連車站標示都模糊了,這個站如果玩北車梗,除了"火"字下面找不到人之外,連"車"字下面也沒有,其實"樂"和"站"也都看不清楚了 這站是有站務員的,只是站務員只在特定時間才會在,不再的時候會連月台都不能進去 可以看出車站本來的規模,這個椅子的數目可能比岡山還多,當年設立的時候應該很難想像現在的樣子 不能進去月台,在車站內拍也別有一番風味

秘境車站-1090202瑞源車站、山里車站

圖片
繼續往南走~ 瑞源車站,這站就沒有秘境感,整個車站都翻新了,白色的天幕和高雄車站其實有點像。因為完全沒有秘境感,就直接去下一站,連月台都沒拍。   山里車站,看英雄日常的影片有提到,這個有號稱 到不了的車站 ,沒有,很輕鬆就到了,而且這邊的遊客不算少,門口也有賣咖啡的攤販,算是稍微有一點規模 應該也是全部整建的站體,白藍配色非常有台鐵的感覺,其實台鐵大部分站體可以用統一配色增加整體感,向台大的校園也是有統一配色的,當然特色站還是不能少的 山里車站就有小小的候車室,相對瑞和車站應該算是比較有規模 太魯閣號,回去放大標示才認得出車子 這應該是柴電自強 相對這二張照片的風格,個人比較喜歡拍到太魯閣號時候的速度感,柴電自強的的車子彷彿停住了,像是已經停下準備讓乘客上車,開始學習使用M模式,同時調整快門和光圈