遺失使用兩年的一卡通 (SFZ 號: 10007510104887822),欲在掛失前查詢歷史消費記錄。目標網站為北京一卡通查詢系統,回傳 HTML 表格資料。
使用類 SQL 引擎 (如 Sqlhub) 定義外部結構描述,將網頁表格直接映射為可查詢資料表。
CREATE TABLE Html.YKT
URL 'https://www.bjsuperpass.com/pagecontrol.do?object=ecard&action=query&card_id=10007510104887822'
CHARSET 'gb2312'
ROW_XPATH '/html/body/table/tr' (
P1 VARCHAR ELEMENT 'td[1]', -- 交易日期
P2 VARCHAR ELEMENT 'td[2]', -- 交易時間
P3 VARCHAR ELEMENT 'td[3]', -- 交易類型
P4 VARCHAR ELEMENT 'td[4]', -- 金額
P5 VARCHAR ELEMENT 'td[5]', -- 餘額
P6 VARCHAR ELEMENT 'td[6]' -- 商戶/地點
);
ROW_XPATH:定位每筆記錄的列節點 (這裡假設表格結構為 <table>><tr>><td>)ELEMENT:CSS 選擇器提取欄位文字CHARSET:網頁編碼 gb2312CREATE OR REPLACE PROCEDURE ykt(p_card_id VARCHAR) RETURN ROWSET AS
BEGIN
EXECUTE IMMEDIATE '
ALTER TABLE Html.YKT SET
URL ''https://www.bjsuperpass.com/pagecontrol.do?object=ecard&action=query&card_id='' || p_card_id;
SELECT * FROM Html.YKT;
END;
SELECT * FROM ykt('10007510104887822');
| 欄位 | 含義 | 範例值 |
|---|---|---|
| P1 | 交易日期 | 2023-12-15 |
| P2 | 交易時間 | 08:32:15 |
| P3 | 交易類型 | 地鐵進站 / 消費扣款 / 圈存 |
| P4 | 金額 (元) | -5.00 / +100.00 |
| P5 | 餘額 (元) | 42.50 |
| P6 | 商戶/站點 | 西直門站 / 7-11便利店 |
SELECT
SUBSTR(P1, 1, 7) AS 年月,
SUM(CASE WHEN CAST(P4 AS DECIMAL(10,2)) < 0 THEN CAST(P4 AS DECIMAL(10,2)) ELSE 0 END) AS 消費支出,
SUM(CASE WHEN CAST(P4 AS DECIMAL(10,2)) > 0 THEN CAST(P4 AS DECIMAL(10,2)) ELSE 0 END) AS 圈存收入,
COUNT(*) AS 筆數
FROM ykt('10007510104887822')
GROUP BY SUBSTR(P1, 1, 7)
ORDER BY 年月 DESC;
SELECT P6 AS 地點, COUNT(*) AS 次數, SUM(CASE WHEN CAST(P4 AS DECIMAL(10,2)) < 0 THEN ABS(CAST(P4 AS DECIMAL(10,2))) ELSE 0 END) AS 總金額
FROM ykt('10007510104887822')
WHERE CAST(P4 AS DECIMAL(10,2)) < 0
GROUP BY P6
ORDER BY 次數 DESC
LIMIT 10;
SELECT P1 AS 日期, MAX(CAST(P5 AS DECIMAL(10,2))) AS 日末餘額
FROM ykt('10007510104887822')
GROUP BY P1
ORDER BY 日期;
此方案採用 Wrapper/Wrapper Generator 模式:
robots.txt、服務條款、個資保護法規,僅查詢自有卡號資料ykt() 彙總家庭/團體消費| 工具/框架 | 特點 | 適用場景 |
|---|---|---|
| Sqlhub / 自製 Wrapper 引擎 | 宣告式 SQL 定義、輕量 | 快速原型、一次性查詢 |
| Python + requests + BeautifulSoup/lxml | 靈活、生態豐富、易維護 | 生產級爬蟲、複雜邏輯 |
| Apache Nifi / StreamSets | 視覺化流程、監控、錯誤處理 | 企業級資料攝取管線 |
| Browser DevTools + Copy as cURL | 零代碼、快速驗證 | 手工單次查詢 |