사용자 도구

사이트 도구


국내공인ip스크래핑

한국인터넷정보센터에서 공개하는 국내 공인IP목록을 스크래핑 할수있는 파이썬코드 입니다

해외 스크래핑봇을 차단하고 싶거나 굳이 외국인 상대로 웹사이트를 공개할 필요가 없으실때 유용할듯 합니다

사용하시려면 pip로 Beatiful Soap 패키지인 bs4를 설치하셔야 합니다

아래 코드는 큐웬3 8B 모델로 생성하였으며 일부 잘못된 부분은 직접 수정하였습니다

nginx에서 바로 사용한 파일을 생성하게끔 처리를 해준 코드 입니다

ipscrap.py
import requests
from bs4 import BeautifulSoup
import re
 
# 1. 설정: 스크래핑 대상 URL 및 출력 파일 경로
URL = "https://한국인터넷정보센터.한국/jsp/statboard/IPAS/ovrse/natal/IPaddrBandCurrent.jsp?nationCode1=KR"
OUTPUT_FILE = "kor_public_ip_ranges.txt"  # Cider가 읽을 수 있는 CIDR 형식 파일
 
# 2. HTML을 요청하고 응답 내용을 가져오는 함수
def fetch_html(url):
    """웹 페이지를 요청하고 HTML 내용을 반환합니다."""
    try:
        # User-Agent 헤더 설정 (브라우저처럼 요청)
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Safari/537.36"
        }
        # 요청 보내기
        response = requests.get(url, headers=headers, timeout=10)
        response.encoding = "utf-8"  # 페이지 인코딩 설정 (필요 시 변경)
        return response.text
    except Exception as e:
        print(f"⚠️ 오류: 페이지 요청 중 오류 발생 - {e}")
        return None
 
# 3. HTML에서 IP 대역 정보를 추출하는 함수
def parse_ip_ranges(html):
    """HTML 테이블에서 CIDR 형식의 IP 대역 정보를 추출합니다."""
    soup = BeautifulSoup(html, "html.parser")
    table = soup.find("table")  # 테이블 태그 찾기 (실제 클래스명 확인 필요)
 
    if not table:
        print("⚠️ 오류: HTML에 테이블 태그가 없습니다.")
        return []
 
    ip_ranges = []
    # 테이블 행을 순회하며 IP 대역 추출
    for row in table.find_all("tr")[1:]:  # 헤더 행은 건너뛰기
        cells = row.find_all("td")  # 셀 요소 추출
        if len(cells) >= 1:
            ip_range = cells[1].text.strip()  # 첫 번째 셀에서 IP 대역 추출
            ip_cider = cells[3].text.strip()
            ip_range = "allow " + ip_range + ip_cider + ";"
            print(ip_range)
            # CIDR 형식 검증 (예: 192.168.0.0/16)
            #if re.match(r"^\d+\.\d+\.\d+\.\d+/\d+$", ip_range):
            ip_ranges.append(ip_range)
 
    print(f"✅ 성공: {len(ip_ranges)}개의 IP 대역 정보 추출 완료")
    return ip_ranges
 
# 4. 추출된 IP 대역 정보를 파일로 저장하는 함수
def save_to_file(ip_ranges, filename):
    """IP 대역 정보를 CIDR 형식의 텍스트 파일로 저장합니다."""
    try:
        with open(filename, "w", encoding="utf-8") as f:
            for ip in ip_ranges:
                f.write(f"{ip}\n")
        print(f"✅ 성공: {filename} 파일 생성 완료")
    except Exception as e:
        print(f"⚠️ 오류: 파일 저장 중 오류 발생 - {e}")
 
# 5. 메인 함수: 스크래핑 및 파일 저장
def main():
    html = fetch_html(URL)
    if html:
        ip_ranges = parse_ip_ranges(html)
        save_to_file(ip_ranges, OUTPUT_FILE)
 
if __name__ == "__main__":
    main()
국내공인ip스크래핑.txt · 마지막으로 수정됨: 저자 컴돌이

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki