DB_JOB/작업파일/공공기관2/6.한국중부발전/_temp_inpage.py
hehihoho3 df16c98366 백업: DB수집 전체 스냅샷 (공공기관2 정리 전)
공공기관2 작업 중. _temp 몽타주(재생성가능)는 제외.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 18:15:40 +09:00

41 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
import openpyxl, time, json, ssl, urllib.request, sys
from bs4 import BeautifulSoup
ctx=ssl.create_default_context();ctx.check_hostname=False;ctx.verify_mode=ssl.CERT_NONE
HDR={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124 Safari/537.36'}
def fetch(u): return urllib.request.urlopen(urllib.request.Request(u,headers=HDR),timeout=25,context=ctx).read()
wb=openpyxl.load_workbook('한국중부발전.xlsx');ws=wb.active
# find start row = 서울발전본부 사업장소개 content/31
start=None
for r in range(3,ws.max_row+1):
k=ws.cell(r,11).value
if k and '/content/31/' in str(k): start=r; break
print('start row',start,file=sys.stderr)
res={}
for r in range(start,ws.max_row+1):
k=ws.cell(r,11).value
if not k or 'komipo.co.kr' not in str(k) or '/content/' not in str(k): continue
try: soup=BeautifulSoup(fetch(str(k)),'html.parser')
except Exception as e: print('err',r,str(e)[:40],file=sys.stderr); time.sleep(0.4); continue
# in-page tabs: ul class has 'tab' (not tab_link), li>a with data-tab or href starting '#'
for ul in soup.find_all('ul'):
cls=' '.join(ul.get('class') or [])
if 'tab' not in cls or 'tab_link' in cls: continue
tabs=[]
for li in ul.find_all('li', recursive=False):
a=li.find('a')
if not a: continue
href=a.get('href','') or ''
dt=a.get('data-tab')
if dt or href.startswith('#'):
tabs.append(a.get('data-name') or a.get_text(strip=True))
if len(tabs)>=2:
res[r]={'b':ws.cell(r,2).value,'leaf':ws.cell(r,6).value or ws.cell(r,7).value or ws.cell(r,5).value,
'cls':cls,'tabs':tabs,'curM':ws.cell(r,13).value,'L':ws.cell(r,12).value,'url':str(k)}
time.sleep(0.6)
json.dump(res,open('inpage.json','w',encoding='utf-8'),ensure_ascii=False,indent=1)
for r,v in sorted(res.items(),key=lambda x:int(x[0])):
print(f"r{r} b{v['b']} L={v['L']} M{v['curM']}->({len(v['tabs'])}) [{v['cls']}] tabs={v['tabs']} {v['url'][:46]}")
print('인페이지탭 페이지수:',len(res))