공공기관2 작업 중. _temp 몽타주(재생성가능)는 제외. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
69 lines
3.1 KiB
Python
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()
|