"""6차: 완주 메뉴/사이트맵 확정 + 부안 대분류 라벨 확인.""" 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']*charset=["\']?\s*([\w-]+)', r.content[:4096], re.I) r.encoding = meta.group(1).decode('ascii','ignore') if meta else r.apparent_encoding return r # 부안 대분류 라벨: 각 depth_boxcon의 strong/p 텍스트 print('=== 부안 대분류(D) 라벨 ===') soup = BeautifulSoup(fetch('https://www.buan.go.kr/index.buan?contentsSid=1').text, 'html.parser') nav = soup.select_one('nav#onmenu') top = nav.find('ul') for li in top.find_all('li', recursive=False): a0 = li.find('a', recursive=False) box = li.find('div', class_='depth_boxcon') strong = box.find('strong') if box else None p = box.find('p') if box else None print(' topA=', repr((a0.get_text().strip()[:20]) if a0 else ''), '| strong=', repr(strong.get_text().strip()[:20] if strong else ''), '| p=', repr(p.get_text(' ',strip=True)[:25] if p else '')) # 완주: 전체 a 중 contentUid 사이트맵/메가메뉴 흔적. gnb mega menu 클래스 탐색 print('\n=== 완주 메뉴 구조 탐색 ===') soup = BeautifulSoup(fetch('https://www.wanju.go.kr/index.9is').text, 'html.parser') # 모든 div/ul 중 a>=30 이며 menuUid/contentUid href 다수인 것 for el in soup.find_all(['div','ul','nav']): cls = ' '.join(el.get('class', [])); idv = el.get('id','') n_a = len(el.find_all('a')) if n_a >= 30: sample = el.find('a', href=re.compile(r'contentUid|menuUid')) print(f' <{el.name} id={idv!r} class={cls!r}> a={n_a}', ('| 샘플=' + (sample.get('href')[:60] if sample else 'none'))) # 사이트맵 페이지 후보: 전주처럼 index.9is?contentUid= 의 sitemap_Warp # 완주 모든 contentUid 수집 후 'sitemap_Warp' 또는 'sitemap' 포함 페이지 찾기엔 비용 큼. # 대신 footer 영역 a 전부 출력 foot = soup.find('footer') or soup.select_one('div.footer, #footer') if foot: print(' footer a:') for a in foot.find_all('a')[:40]: t=(a.get_text() or '').strip() if t: print(' ', repr(t[:18]), (a.get('href') or '')[:60])