這兩天利用 Antigravity CLI 搞定市圖爬蟲程式 v14 升版後, 陸續佈署到 kaopi3 與 pi3aplus 主機上且順利運行中, 今天輪到 Pi 400 主機了, 有別於 Pi 3 主機直接在系統 Python 3.9.2 上執行 Python 程式, 我目前在 Pi 400 安裝的樹莓派 OS 是最新的 Trixie (內建 Python 3.13), 遵循 PEP 668 規範不允許直接在系統 Python 環境用 pip 安裝第三方套件 (從 Bookworm 開始), 必須建立虛擬環境後在虛擬環境裡面用 pip 安裝套件.
目前 Pi 400 的爬蟲是在虛擬環境 myenv313 下執行, 所以先進入此虛擬環境 :
pi@pi400:~ $ source ~/myenv313/bin/activate
(myenv313) pi@pi400:~ $
因為之前就已在此環境下安裝 Numpy 時安裝過 OpenBLAS 及相關的底層依賴庫, 所以下面指令可以略過 :
sudo apt-get update
sudo apt update sudo apt install -y libopenblas-dev libatlas-base-dev
接下來安裝 tesseract-ocr 套件 :
(myenv313) pi@pi400:~ $ sudo apt-get install tesseract-ocr
正在讀取套件清單... 完成
正在重建相依關係... 完成
正在讀取狀態資料... 完成
The following packages were automatically installed and are no longer required:
alacarte gir1.2-gmenu-3.0 gnome-menus gtk-nop libevent-pthreads-2.1-7t64 libgnome-menu-3-0
libwlroots-0.18 python3-gi-cairo retry
Use 'sudo apt autoremove' to remove them.
下列的額外套件將被安裝:
libleptonica6 libtesseract5 tesseract-ocr-eng tesseract-ocr-osd
下列【新】套件將會被安裝:
libleptonica6 libtesseract5 tesseract-ocr tesseract-ocr-eng tesseract-ocr-osd
升級 0 個,新安裝 5 個,移除 0 個,有 261 個未被升級。
需要下載 7,207 kB 的套件檔。
此操作完成之後,會多佔用 24.5 MB 的磁碟空間。
是否繼續進行 [Y/n]? [Y/n] y
下載:1 http://deb.debian.org/debian trixie/main arm64 libleptonica6 arm64 1.84.1-4 [994 kB]
下載:2 http://deb.debian.org/debian trixie/main arm64 libtesseract5 arm64 5.5.0-1+b1 [1,237 kB]
下載:3 http://deb.debian.org/debian trixie/main arm64 tesseract-ocr-eng all 1:4.1.0-2 [1,594 kB]
下載:4 http://deb.debian.org/debian trixie/main arm64 tesseract-ocr-osd all 1:4.1.0-2 [2,992 kB]
下載:5 http://deb.debian.org/debian trixie/main arm64 tesseract-ocr arm64 5.5.0-1+b1 [389 kB]
取得 7,207 kB 用了 3s (2,122 kB/s)
選取了原先未選的套件 libleptonica6:arm64。
(讀取資料庫 ... 目前共安裝了 147525 個檔案和目錄。)
正在準備解包 .../libleptonica6_1.84.1-4_arm64.deb……
Unpacking libleptonica6:arm64 (1.84.1-4) ...
選取了原先未選的套件 libtesseract5:arm64。
正在準備解包 .../libtesseract5_5.5.0-1+b1_arm64.deb……
Unpacking libtesseract5:arm64 (5.5.0-1+b1) ...
選取了原先未選的套件 tesseract-ocr-eng。
正在準備解包 .../tesseract-ocr-eng_1%3a4.1.0-2_all.deb……
Unpacking tesseract-ocr-eng (1:4.1.0-2) ...
選取了原先未選的套件 tesseract-ocr-osd。
正在準備解包 .../tesseract-ocr-osd_1%3a4.1.0-2_all.deb……
Unpacking tesseract-ocr-osd (1:4.1.0-2) ...
選取了原先未選的套件 tesseract-ocr。
正在準備解包 .../tesseract-ocr_5.5.0-1+b1_arm64.deb……
Unpacking tesseract-ocr (5.5.0-1+b1) ...
設定 libleptonica6:arm64 (1.84.1-4) ...
設定 tesseract-ocr-eng (1:4.1.0-2) ...
設定 libtesseract5:arm64 (5.5.0-1+b1) ...
設定 tesseract-ocr-osd (1:4.1.0-2) ...
設定 tesseract-ocr (5.5.0-1+b1) ...
執行 man-db (2.13.1-1) 的觸發程式……
執行 libc-bin (2.41-12+rpt1+deb13u2) 的觸發程式……
最後安裝 pytesseract 與 Pillow 套件 :
(myenv313) pi@pi400:~ $ pip install pytesseract Pillow
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pytesseract
Downloading https://www.piwheels.org/simple/pytesseract/pytesseract-0.3.13-py3-none-any.whl.metadata (11 kB)
Requirement already satisfied: Pillow in ./myenv313/lib/python3.13/site-packages (11.3.0)
Requirement already satisfied: packaging>=21.3 in ./myenv313/lib/python3.13/site-packages (from pytesseract) (25.0)
Downloading https://www.piwheels.org/simple/pytesseract/pytesseract-0.3.13-py3-none-any.whl (14 kB)
Installing collected packages: pytesseract
Successfully installed pytesseract-0.3.13
至此執行新版爬蟲所需的套件都齊了, 測試一下 :
(myenv313) pi@pi400:~ $ python ksml_lib_14.py abc 123456
主機 : pi400
[嘗試 1/3] 驗證碼辨識結果: 0003
[嘗試 1/3] 登入失敗,準備重試...
[嘗試 2/3] 驗證碼辨識結果: 43504
登入成功(第 2 次嘗試)
擷取借閱紀錄 ... OK
擷取預約紀錄 ... OK
資源已釋放
產生借書到期摘要 ... OK
產生預約書摘要 ... OK
{'message': abc 的資料已更新', 'status': 'success'}
執行時間:61.67458128929138
爬蟲程式可以順利執行. 這樣就可以為爬蟲程式添加可執行權限 :
pi@pi400:~ $ chmod +x ksml_lib_14.py
由於 Pi 400 主要做為支援 pi3aplus 主機的爬蟲任務之用, 所以它所綁定的後端 render.com 伺服器為 fdof, 用 nano 修改 ksml_lib_14.py 中的網址 :
# --- 推送資料 ---
if b_msg or r_msg: # 任一不為空字串就更新資料表
url = "https://serverless-fdof.onrender.com/function/update_ksml_books"
payload = {
"account": account,
"borrow_books": b_msg,
"reserve_books": r_msg
}
res = requests.post(url, json=payload)
print(res.json())
另外, 從 render.com 截取資料的程式 get_ksml_books_messages.py 也是綁定 fdof :
# get_ksml_books_messages.py
import requests
import socket
host_name=socket.gethostname()
print(f'主機 : {host_name}')
params={'crawler': f'{host_name}'}
# for kaopi3
# url='https://serverless-5e6i.onrender.com/function/send_books_messages'
# for pi3aplus & pi400 (備援)
url='https://serverless-fdof.onrender.com/function/send_books_messages'
res=requests.get(url, params=params)
print(res)
最後把 crontab 中的爬蟲程式由 v13 改成 v14 即可 (雖然目前都被註解掉未執行).
沒有留言 :
張貼留言