DB_JOB/_스크립트/_공공기관_nboard2.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

69 lines
3.1 KiB
Python

# -*- coding: utf-8 -*-
"""신규 게시판(페이지→게시판 전환) 중 N에 '이미지' 있는 행을 게시판 방식(상세글 렌더)으로 N 재판정.
대상: _lfix_result.txt 의 전환행 ∩ 현재 게시판&이미지. 사용: python _공공기관_nboard2.py
"""
import sys, os, re, importlib.util, warnings
import openpyxl
warnings.filterwarnings('ignore')
NB = importlib.util.module_from_spec(importlib.util.spec_from_file_location('nb', r'D:\01.프로젝트\DB수집\_스크립트\_공공기관_nboard.py'))
importlib.util.spec_from_file_location('nb', r'D:\01.프로젝트\DB수집\_스크립트\_공공기관_nboard.py').loader.exec_module(NB)
P = NB.P
OUTDIR = r'D:\01.프로젝트\DB수집\공공기관'
LOG = open(r'D:\01.프로젝트\DB수집\_스크립트\_nboard2_result.txt', 'w', encoding='utf-8')
def main():
# lfix 로그 → 전환행
newb = {}
for line in open(r'D:\01.프로젝트\DB수집\_스크립트\_lfix_result.txt', encoding='utf-8'):
m = re.match(r' (\S+) r(\d+) 페이지→게시판', line)
if m:
newb.setdefault(m.group(1), set()).add(int(m.group(2)))
from playwright.sync_api import sync_playwright
with sync_playwright() as pw:
b = pw.chromium.launch()
pg = b.new_page(user_agent=NB.UA, viewport={'width': 1280, 'height': 1600})
sess = P.make_session()
tot_img = tot_txt = 0
for name, rowset in newb.items():
xlsx = os.path.join(OUTDIR, f'{name}.xlsx')
wb = openpyxl.load_workbook(xlsx)
ws = wb.active
ic = tc = 0
for r in sorted(rowset):
if ws.cell(r, 12).value != '게시판':
continue
N = ws.cell(r, 14).value or ''
if '이미지' not in N:
continue
url = ws.cell(r, 11).value
try:
soup, _ = P.fetch(sess, url)
if not soup:
continue
body = P.get_body(soup, P.BODY_SEL)
found = False
for du in P.extract_detail_urls(body, url, limit=4):
try:
pg.goto(du, timeout=20000, wait_until='domcontentloaded'); pg.wait_for_timeout(1500)
if NB.has_content_img(pg.evaluate(NB.JS_IMGS)):
found = True; break
except Exception:
continue
if found:
ws.cell(r, 14).value = NB.add_image(N); ic += 1
else:
ws.cell(r, 14).value = NB.rm_image(N); tc += 1
except Exception:
continue
wb.save(xlsx)
tot_img += ic; tot_txt += tc
LOG.write(f'[{name}] 신규게시판 N재판정 → 이미지유지 {ic}·어문강등 {tc}\n'); LOG.flush()
b.close()
LOG.write(f'=== 합계 이미지유지 {tot_img}·어문강등 {tot_txt} ===\n')
LOG.close()
if __name__ == '__main__':
main()