공공기관2 작업 중. _temp 몽타주(재생성가능)는 제외. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
72 lines
3.2 KiB
Python
72 lines
3.2 KiB
Python
import time
|
|
import requests
|
|
from bs4 import BeautifulSoup
|
|
|
|
# 1. 이미지에 포함된 보건복지부 URL 목록 정의
|
|
urls = [
|
|
"https://www.mohw.go.kr/menu.es?mid=a10708030000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10708040000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10709010000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10709020000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10710010000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10710020000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10710030000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10710040000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10710060000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10710050000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10711010000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10711020000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10711030000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10711040000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10711050000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10712010000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10712020000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10712030000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10712040000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10714010000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10714020000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10714030000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10714040000",
|
|
"https://www.mohw.go.kr/menu.es?mid=a10714060000",
|
|
]
|
|
|
|
# 봇(Bot) 차단을 방지하기 위한 User-Agent 설정
|
|
headers = {
|
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
|
|
}
|
|
|
|
print("=== 복지 서비스 li 태그 수집 시작 ===")
|
|
|
|
# 각 URL을 순회하며 데이터 수집
|
|
for idx, url in enumerate(urls, 1):
|
|
try:
|
|
# 웹페이지 HTML 가져오기
|
|
response = requests.get(url, headers=headers, timeout=10)
|
|
|
|
# 정상적으로 페이지를 가져온 경우 (HTTP 상태 코드 200)
|
|
if response.status_code == 200:
|
|
soup = BeautifulSoup(response.text, "html.parser")
|
|
|
|
# id가 depth4_dab인 ul 태그 찾기 -> 그 하위의 모든 li 태그 찾기
|
|
# 만약 복지부 사이트 구조상 탭 메뉴가 없다면 빈 리스트가 반환됩니다.
|
|
li_tags = soup.select("ul#depth4_dab > li")
|
|
|
|
li_count = len(li_tags)
|
|
print(f"[{idx:02d}] URL: {url} -> 복지 항목 개수(li): {li_count}개")
|
|
|
|
# 어떤 항목들이 있는지 제목(tit 클래스) 출력 (선택 사항)
|
|
if li_count > 0:
|
|
for li in li_tags:
|
|
tit_tag = li.find("strong", class_="tit")
|
|
if tit_tag:
|
|
print(f" - {tit_tag.text.strip()}")
|
|
else:
|
|
print(f"[{idx:02d}] URL: {url} -> 접속 실패 (상태 코드: {response.status_code})")
|
|
|
|
except Exception as e:
|
|
print(f"[{idx:02d}] URL: {url} -> 에러 발생: {e}")
|
|
|
|
# 서버 과부하 방지 및 차단 예방을 위해 0.5초간 휴식
|
|
time.sleep(0.5)
|
|
|
|
print("=== 수집 완료 ===") |