공공기관2 작업 중. _temp 몽타주(재생성가능)는 제외. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
62 lines
2.1 KiB
Python
62 lines
2.1 KiB
Python
"""진천군: nav#gnb 더 깊이 들어가서 실제 메뉴 찾기. + 보은군 한번 더."""
|
|
import re
|
|
import 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'
|
|
H = {'User-Agent': UA}
|
|
|
|
|
|
def fetch(url, timeout=20):
|
|
try:
|
|
r = requests.get(url, headers=H, timeout=timeout, verify=False, allow_redirects=True)
|
|
r.encoding = r.apparent_encoding
|
|
return r.status_code, r.url, r.text
|
|
except Exception as e:
|
|
return 0, str(e), ''
|
|
|
|
|
|
# 진천군 - find all elements with menu-like classes
|
|
print('='*70)
|
|
print('진천군 — find menu containers')
|
|
print('='*70)
|
|
_, _, html = fetch('https://www.jincheon.go.kr/home/sub.do?menukey=445')
|
|
soup = BeautifulSoup(html, 'html.parser')
|
|
# Look for elements with 'depth' / 'gnb' / 'menu' / 'sitemap' in classes
|
|
print('All elements with 100+ anchors and depth/menu/sitemap in class:')
|
|
for el in soup.find_all(['div', 'ul', 'nav', 'section']):
|
|
cls = ' '.join(el.get('class', []))
|
|
eid = el.get('id', '')
|
|
ac = len(el.find_all('a'))
|
|
if ac >= 100 and re.search(r'depth|menu|sitemap|allmenu|total|all-menu|gnb', cls + ' ' + eid, re.I):
|
|
print(f' {el.name}#{eid}.{cls[:60]} a={ac}')
|
|
|
|
# Find all .depth* classes
|
|
print('\n.depth* classes with anchors:')
|
|
for el in soup.select('[class*=depth]'):
|
|
cls = ' '.join(el.get('class', []))
|
|
ac = len(el.find_all('a'))
|
|
if ac >= 50:
|
|
print(f' {el.name}.{cls[:80]} a={ac}')
|
|
|
|
|
|
# 보은군 한번 더
|
|
print('\n' + '='*70)
|
|
print('보은군 retry')
|
|
print('='*70)
|
|
import time
|
|
time.sleep(1)
|
|
code, real, html = fetch('https://www.boeun.go.kr/www/index.do')
|
|
print(f' {code} {real[:100]}')
|
|
|
|
if code == 200:
|
|
print(' 성공! 사이트맵 후보 탐색')
|
|
from urllib.parse import urljoin
|
|
s2 = BeautifulSoup(html, 'html.parser')
|
|
for a in s2.find_all('a', href=True)[:200]:
|
|
txt = a.get_text(strip=True)
|
|
if '사이트맵' in txt or '전체메뉴' in txt or '누리집 지도' in txt:
|
|
print(f' "{txt}" → {urljoin(real, a["href"])}')
|