study/프로그래밍

[python] RSS를 통한 뉴스기사 제목 과 링크가져오기 with feedparser

밥짓는사나이- 2020. 7. 4. 11:14
728x90

뉴스기사들을 긁어오는 크롤러를 feedparser를 사용하여 만들어보고자 합니다.

뉴스를 제공하고 있는 곳에서 제공되는 RSS주소를 통해 들어가면, 기사의 타이틀과 링크들을 가져올수 있는데요

이를 feedparser를 통해 title과 link들을 긁어오고자 합니다. 이후에 해당링크에 다시 들어가서 기사내용들을 긁어오면 기사들을 모두 긁어올수 있겠죠?

구글의 colab을 사용하여 만들고 주피터로 옮겨 html로 포스팅에 올렸습니다.

RSS_newspaper

RSS를 통한 뉴스기사 제목가져오기

In [1]:
!pip install feedparser
# !pip install newspaper3k
# !pip install konlpy
Requirement already satisfied: feedparser in /usr/local/lib/python3.6/dist-packages (5.2.1)

feed parser를 통해 기사 parsing하기

In [2]:
import feedparser

parse_rss = feedparser.parse("http://media.daum.net/rss/today/primary/all/rss2.xml")

파싱된 데이터의 entries를 보면 기사의 상세정보들이 딕셔너리 형태로 담겨져 있다.

In [3]:
parse_rss.entries[0]
Out[3]:
{'author': '뉴스1',
 'author_detail': {'name': '뉴스1'},
 'authors': [{'name': '뉴스1'}],
 'guidislink': False,
 'id': 'media:news:20200702161505770',
 'link': 'https://v.daum.net/v/20200702161505770',
 'links': [{'href': 'https://v.daum.net/v/20200702161505770',
   'rel': 'alternate',
   'type': 'text/html'},
  {'href': 'https://t1.daumcdn.net/news/202007/02/NEWS1/20200702161505921jmfr.jpg',
   'rel': 'enclosure',
   'type': 'image/jpeg'}],
 'published': 'Thu, 02 Jul 2020 07:15:05 GMT',
 'published_parsed': time.struct_time(tm_year=2020, tm_mon=7, tm_mday=2, tm_hour=7, tm_min=15, tm_sec=5, tm_wday=3, tm_yday=184, tm_isdst=0),
 'summary': '(경주=뉴스1) 최창호 기자 = 경북 경주시체육회가 2일 인사위원회를 열고 트라이애슬론 청소년 국가대표 출신인 고 최숙현(23) 선수 폭행 의혹에 대한 진상 조사에 들어갔다. 인사위에는 고 최 선수의 전 소속팀인 경주시 트라이애슬론 직장운동부 감독과 선수들이 회부됐다. 인사위는 위원장인 여준기 경주시체육회장과 경주시 간부 공무원, 시의원 등 7명으로 구',
 'summary_detail': {'base': 'https://media.daum.net/syndication/today_sisa.rss',
  'language': 'ko-KR',
  'type': 'text/html',
  'value': '(경주=뉴스1) 최창호 기자 = 경북 경주시체육회가 2일 인사위원회를 열고 트라이애슬론 청소년 국가대표 출신인 고 최숙현(23) 선수 폭행 의혹에 대한 진상 조사에 들어갔다. 인사위에는 고 최 선수의 전 소속팀인 경주시 트라이애슬론 직장운동부 감독과 선수들이 회부됐다. 인사위는 위원장인 여준기 경주시체육회장과 경주시 간부 공무원, 시의원 등 7명으로 구'},
 'title': '고 최숙현 선수 전 직장 소속팀 감독 인사위 출석..비공개로 진행',
 'title_detail': {'base': 'https://media.daum.net/syndication/today_sisa.rss',
  'language': 'ko-KR',
  'type': 'text/plain',
  'value': '고 최숙현 선수 전 직장 소속팀 감독 인사위 출석..비공개로 진행'},
 'updated': '2020-07-02T07:15:05Z',
 'updated_parsed': time.struct_time(tm_year=2020, tm_mon=7, tm_mday=2, tm_hour=7, tm_min=15, tm_sec=5, tm_wday=3, tm_yday=184, tm_isdst=0)}

기사의 title과 link주소를 프린트해보자

In [4]:
for p in parse_rss.entries:
    print(p.title, p.link)
고 최숙현 선수 전 직장 소속팀 감독 인사위 출석..비공개로 진행 https://v.daum.net/v/20200702161505770
전국 522개 학교 '등교 중지'..22일 만에 500곳 넘어(종합) https://v.daum.net/v/20200702161434715
부산지역 어린이집 집단 식중독..'살모넬라균' 검출 https://v.daum.net/v/20200702161353685
인천발 울란바토르행 항공기, 베이징 긴급 착륙..기체 이상 추정 https://v.daum.net/v/20200702161349682
김종인 "11월에 대권후보 나타날 것..곧 당명교체 추진" https://v.daum.net/v/20200702161348678
NH농협 역삼점 직원 3명 확진..서울 확진자 오늘 5명 늘어 https://v.daum.net/v/20200702161344676
'이희진 부모 살해' 김다운 "신상공개 부당..헌법소원 낼 것" https://v.daum.net/v/20200702161312660
미국 코로나19 신규 확진 5만3천명..하루 최다(종합) https://v.daum.net/v/20200702161008524
코로나19 백신 위한 '인체 고의감염 실험' 놓고 의학계 분분 https://v.daum.net/v/20200702160813433
민주노총 노조원 '폭행·뺑소니' 주장하며 대우건설 사장 고발 https://v.daum.net/v/20200702160745416
오늘 전국 522개교 코로나19로 등교 못 해..한 달 만에 최다(종합2보) https://v.daum.net/v/20200702160709397
[단독] 이르면 이달 말부터 전기·수소 택시 부제 제외 https://v.daum.net/v/20200702160648380
북-미 정상회담 가능성은 낮지만..조만간 '접점' 찾을 수도 https://v.daum.net/v/20200702160605346
'코로나19 집중 vs 경제 올인'..양분된 백악관 https://v.daum.net/v/20200702160559331
치아 법랑질의 '원자 세계', 처음 비경(秘境)을 드러내다 https://v.daum.net/v/20200702160518289
미얀마 옥 광산서 산사태.."광부 110명 이상 사망" https://v.daum.net/v/20200702160419247
김종인 "차기 대선주자, 11월께는 나올 것..국민 먹여살릴 능력 가진 사람" https://v.daum.net/v/20200702160245171
주한미군, 오산공군기지 '이동 제한'..확진자 동선 추적 https://v.daum.net/v/20200702160231165
볼턴 회고록 첫 주에만 78만부 나가..'밀리언셀러' 눈앞 https://v.daum.net/v/20200702160207149
美하원 군사위, '주독미군 감축 제한' 국방수권법 개정조항 통과 https://v.daum.net/v/20200702160202143

기사제목과 링크를 리스트로 저장해보자

In [6]:
rss_dic = []
for p in parse_rss.entries:
    rss_dic.append({'title':p.title, 'link':p.link})

print(rss_dic)
{'title': '고 최숙현 선수 전 직장 소속팀 감독 인사위 출석..비공개로 진행', 'link': 'https://v.daum.net/v/20200702161505770'}

정리

In [13]:
# feedparser import하기
import feedparser

#rss list만들기
rss_list = ["http://rss.etnews.com/Section901.xml",
        "http://rss.etnews.com/Section902.xml",
        # "http://rss.etnews.com/Section903.xml",
        # "http://biz.heraldm.com/rss/010000000000.xml",
        # "http://media.daum.net/rss/today/primary/all/rss2.xml",
        None]

rss_dic=[]
for rss in rss_list:
    if rss == None:
        break
    else:
        print(rss,"parsing....")
        parse_rss = feedparser.parse(rss)
        
        for p in parse_rss.entries:
            rss_dic.append({'title':p.title,'link':p.link}) 
        print(rss,"parsing complete")

print(rss_dic[0])
http://rss.etnews.com/Section901.xml parsing....
http://rss.etnews.com/Section901.xml parsing complete
http://rss.etnews.com/Section902.xml parsing....
http://rss.etnews.com/Section902.xml parsing complete
{'title': "산학연관 中企기술혁신 싱크탱크 '중소기업 혁신 네트워크 포럼' 출범", 'link': 'https://www.etnews.com/20200702000298'}
In [ ]:
 
728x90
728x90