30 lines
1.5 KiB
Python
30 lines
1.5 KiB
Python
import io, re
|
|
# sweep에서 검출된 tab01 보유 페이지(앵커 URL) 추출
|
|
txt = io.open("_scan_out.txt", encoding="utf-8").read()
|
|
# 각 "rNN URL\n [NEW/DUP] tab01 ... tabs=[...]" 블록
|
|
blocks = re.findall(r"r\d+ (https://www\.kofpi\.or\.kr\S+)\n\s*\[(NEW|DUP)\] tab01[^\n]*tabs=\[([^\n]*)\]", txt)
|
|
print("=== sweep가 검출한 tab01 페이지 (총 %d) ===" % len(blocks))
|
|
sweep_paths=set()
|
|
for url, mark, tabs in blocks:
|
|
p = url.split("kofpi.or.kr")[1].split("?")[0]
|
|
sweep_paths.add(p)
|
|
ntabs = tabs.count("'/") # rough
|
|
print(f" [{mark}] {p} (탭링크≈{tabs.count('(')})")
|
|
|
|
# GROUPS에 들어간 앵커 leaf url들 (classify에 등재된 첫 href의 부모페이지가 아니라, 앵커행 자체)
|
|
# 대신 GROUPS 정의의 모든 href path prefix를 수집
|
|
import importlib.util
|
|
groups_src = io.open("_classify_all.py", encoding="utf-8").read()
|
|
m = re.search(r"GROUPS=\{(.*?)\n\}", groups_src, re.S)
|
|
gtxt = m.group(1)
|
|
group_hrefs = set(re.findall(r"\"(/[^\"]+\.do)\"", gtxt))
|
|
print("\n=== GROUPS(전개대상)에 포함된 앵커행 수: %d ===" % gtxt.count("["))
|
|
|
|
# sweep에서 나온 페이지 중 그 페이지 자체가 GROUPS의 앵커가 아닌 것 찾기
|
|
# 핵심: sweep 페이지 path가 GROUPS 어떤 href에도 안 나오면 = 통째 누락
|
|
print("\n=== ⚠️ sweep는 찾았지만 GROUPS에 없는(누락 의심) 페이지 ===")
|
|
for p in sorted(sweep_paths):
|
|
# 이 페이지가 어떤 그룹의 탭 href로 등장하나? 혹은 앵커행 url인가?
|
|
if p not in group_hrefs:
|
|
print(f" {p}")
|