본문 바로가기
프로그래밍_기타 언어

뉴스 스크래핑 파이썬 코드

by 떠도리c 2024. 9. 22.
반응형

작성된 코드는 파이썬을 이용하여 뉴스 기사를 스크래핑 코드 예시입니다.

 

필요한 패키지

  • requests
  • BeautifulSoup

 

코드

# 웹사이트 스크래핑

import requests
from bs4 import BeautifulSoup

"""
Response code 403 에러 시 User Agent 접근 거부일 수 있음
접근 URL의 UA 정보 확인 후 임의변경

User Agent 임의 변경 후 접근 방법
headers = {"User-Agent": "[WhatIsMyBrowser에 나타난 나의 유저 정보]"}
res = requests.get(url, headers=headers)
"""

# 웹서버 리스트

c_url = [
    {"name": "보안뉴스", "url": "http://www.boannews.com/media/t_list.asp"},
    {
        "name": "네이버 IT보안",
        "url": "https://news.naver.com/main/list.naver?mode=LS2D&mid=shm&sid1=105&sid2=732",
    },
]
header = {"user-agent": "Mozilla/5.0"}


class Connect:
    def __init__(self, url):
        self.url = url

    def conn(self):
        res = requests.get(self.url, headers=header, verify=False)
        if res.status_code == 200:
            print("200, 웹 접근 성공 \n")
            soup = BeautifulSoup(res.text, "lxml")
            return soup
        else:
            print("접근 실패")


class BoanNews(Connect):
    def __init__(self, url):
        super().__init__(url)
        soup = self.conn()

        print("\t *** 보안뉴스 Security 최신 기사 *** \n")

        n_list = soup.find_all("div", attrs={"class": "news_list"})  # 뉴스 한페이지

        for news in n_list:
            newsTitle = news.find("span", attrs={"class": "news_txt"})  # 뉴스 제목
            newsLink = news.find("a")["href"]  # 뉴스 링크
            newsDate = news.find("span", attrs={"class": "news_writer"})  # 뉴스 기자, 날짜

            news_title = newsTitle.text
            news_link = "http://www.boannews.com" + newsLink
            news_writer = newsDate.text

            print(news_title)
            print(news_link)
            print(news_writer, "\n")


class NaverNews(Connect):
    def __init__(self, url):
        super().__init__(url)
        soup = self.conn()

        print("\t *** 네이버 IT보안 최신 기사 *** \n")

        naver_page = soup.find("div", attrs={"class": "list_body newsflash_body"})
        naver_list = naver_page.find_all("li")  # 뉴스 리스트

        for news in naver_list:
            naver_title = news.text  # 뉴스 제목
            naver_link = news.find("a")["href"]  # 뉴스 링크
            naver_writer = news.find(
                "span", attrs={"class": "date is_outdated"}
            )  # 뉴스 작성시간

            print(naver_title)
            print(naver_link)
            print(naver_writer, "\n")


for p in c_url:
    name = p["name"]
    url = p["url"]

    if "네이버" in name:
        naver = NaverNews(url)
    elif "보안뉴스" in name:
        boan = BoanNews(url)

 

 

사용 방법

  1. 필요한 패키지를 설치합니다.
  2. 스크래핑하고자 하는 뉴스 기사의 URL을 url 변수에 입력합니다.
  3. 뉴스 제목과 내용의 클래스명을 news_title과 news_content 변수에 입력합니다.
  4. 코드를 실행합니다.

 

주의사항

  • 뉴스 사이트의 구조에 따라 클래스명, 태그 등이 다를 수 있으니, HTML 구조를 파악하고 사이트에 맞게 수정하여 사용해야 합니다.
  • 뉴스 사이트의 스크래핑 접근에 대한 문제가 있을 수 있으니 주의해야 합니다.

 

반응형