DB_JOB/_스크립트/_probe_jeonbuk5.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

59 lines
2.5 KiB
Python

"""5차: 부안/완주/군산/순창 인라인 메가메뉴 중첩 구조 정밀 덤프."""
import re, warnings
import requests
from bs4 import BeautifulSoup
warnings.filterwarnings('ignore')
UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
def fetch(url, t=20):
r = requests.get(url, timeout=t, verify=False, headers={'User-Agent': UA})
meta = re.search(rb'<meta[^>]*charset=["\']?\s*([\w-]+)', r.content[:4096], re.I)
r.encoding = meta.group(1).decode('ascii','ignore') if meta else r.apparent_encoding
return r
def tree(el, depth=0, maxd=4, maxchild=6):
if el is None or depth > maxd: return
kids = el.find_all(recursive=False)
for i, c in enumerate(kids):
if i >= maxchild and depth >= 1:
print(' '*(depth+1) + '...'); break
cls = '.'.join(c.get('class', []))
a = c.find('a', recursive=False)
atxt = a.get_text().strip()[:18] if a else ''
ah = (a.get('href') or '')[:55] if a else ''
print(' '*(depth+1) + f'{c.name}.{cls}' + (f' a={atxt!r} {ah}' if atxt else ''))
tree(c, depth+1, maxd, maxchild)
print('############ 부안 nav#onmenu ############')
soup = BeautifulSoup(fetch('https://www.buan.go.kr/index.buan?contentsSid=1').text, 'html.parser')
nav = soup.select_one('nav#onmenu')
# 첫 1~2개 top li만
if nav:
top = nav.find('ul')
print('nav>ul 첫 li 2개:')
for li in (top.find_all('li', recursive=False)[:2] if top else []):
tree(li, 0, 4, 5)
print(' ----')
print('\n############ 완주 div.top_menu_wrap ############')
soup = BeautifulSoup(fetch('https://www.wanju.go.kr/index.9is').text, 'html.parser')
w = soup.select_one('div.top_menu_wrap')
tree(w, 0, 3, 4)
print('\n############ 군산 첫 allmenubox ############')
soup = BeautifulSoup(fetch('https://www.gunsan.go.kr/main').text, 'html.parser')
pc = soup.select_one('div#all_pcmenu')
if pc:
boxes = pc.select('div.allmenubox')
print(f'allmenubox 수: {len(boxes)}')
b = boxes[0]
print('Bmenu(대분류):', repr((b.find('a', class_='Bmenu') or b.find('a')).get_text().strip()[:20]))
tree(b, 0, 4, 5)
print('\n############ 순창 ul.gnb ############')
soup = BeautifulSoup(fetch('https://www.sunchang.go.kr/').text, 'html.parser')
g = soup.select_one('ul.gnb')
if g:
print(f'ul.gnb 직계 li: {len(g.find_all("li", recursive=False))}')
for li in g.find_all('li', recursive=False)[:1]:
tree(li, 0, 4, 5)