//광고차단회복
반응형
보안뉴스 웹크롤링을 완료했습니다. 파이썬을 이용하였으며 주요 기능은 오늘의 날짜를 기준으로 올라온 기사의 제목을 찾아 나열하며, 이번 주의 인기뉴스를 알려주며 원하는 기사를 검색할 수 있는 프로그램입니다.
보안뉴스 robots.txt

보안뉴스는 2020.8.12일 기준으로는 웹 크롤링이 가능한 것을 알립니다.

또한, 제가 만든 프로그램은 오직 BeautifulSoup를 이용하여 만든 것이므로 많이 부족할 수 있다는 점 양해 바랍니다.

<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import datetime
from bs4 import BeautifulSoup as bs
import urllib.request as req
import urllib
 
def Main_Menu() :
    print()
    print("--------메뉴선택--------")
    print("\t1. 오늘의 주요 기사는?")
    print("\t2. 주간의 인기 뉴스")
    print("\t3. 기사 검색하기")
    print("\t0. 종료하기")
    print("----------------------")
 
def Today_Main_Post() :
    today = datetime.datetime.today()
    today_date = today.strftime("%Y-%m\\%d.")
    today_date = str(today_date).replace("-","년").replace("\\","월").replace(".","일")
    dates= []
    titles=[]
    url = "https://www.boannews.com/media/t_list.asp"
    res = req.urlopen(url)
    soup = bs( res , "html.parser" )
    today_main_posts_title = soup.find_all("span",class_="news_txt")
    today_main_posts_dates = soup.select(" div.news_list > span.news_writer")
    tmp = today_main_posts_dates
    for ls in tmp :
        today_main_posts_dates = ls.string
        dates.append(today_main_posts_dates.split("|")[1])
    tmp = today_main_posts_title
    for ls in tmp :
        today_main_posts_title = ls.string
        titles.append(today_main_posts_title)
    i = 0
    for ls in dates :
        dates[i] = dates[i].replace(" ","")
        i += 1
    i = 0
    boolean = True
    while boolean :
        if str(dates[i][0:11]) == today_date :
            print("#%d >>"%(i+1),titles[i])
        else :
            boolean = False
        i += 1
 
    
def Week_Hit_News() :
    url = "https://www.boannews.com/media/o_list.asp"
    res = req.urlopen(url)
    soup = bs(res,"html.parser")
    Hit_News_List = soup.select("#main_HitNews > ul > li > a ")
    i = 1
    for ls in Hit_News_List :
        Hit_List = ls.string
        print("#%d >>"%i,Hit_List)
        i+=1
 
def Search_Article(name_article) :
    name_article_euc = name_article.encode("euc-kr")
    name_article_euc_kr = str(name_article_euc)
    name_article_euc_kr = name_article_euc_kr.replace("\\x","%").replace("b","").replace("\'""")
    name_article_euc =  urllib.parse.quote(name_article_euc)
    url = "https://www.boannews.com/search/news_list.asp?search=key_word&find="+name_article_euc
    res = req.urlopen(url)
    soup = bs(res,"html.parser")
    searching_news_title = soup.select("#news_area > div > a")
    i = 1 
    for ls in searching_news_title :
        News_title = ls.string
        if i >10 :
            continue
        elif News_title == None :
            continue
        else :
            print("#%d >>"%i,News_title)
        i+=1
 
 
while True :
    Main_Menu()
    menu_num = input("입력 : ")
    input_article = ""
    if int(menu_num) == 1 :
        Today_Main_Post()
    elif int(menu_num) == 2 :
        Week_Hit_News()
    elif int(menu_num) == 3:
        input_article = input("찾을 기사 제목 : ")
        Search_Article(input_article)
    elif int(menu_num) == 0 :
        break
 
 
cs

기능 1 :메뉴 1번으로 그날의 날짜에 올라온 기사의 제목들을 나열하는 기능입니다.

기능 2 : 인기뉴스를 순서대로 나열하는 기능입니다.

기능 3 : 원하는 기사를 키워드를 입력해 검색하는 기능입니다.


 

 

 

 

반응형

'프로젝트' 카테고리의 다른 글

코틀린 안드로이드 가계부앱 - 1  (0) 2024.12.13
보안뉴스 웹크롤링(8)  (0) 2020.08.09
보안뉴스 웹크롤링(7)  (0) 2020.08.08
보안뉴스 웹크롤링(6)  (0) 2020.08.07

+ Recent posts