study/프로그래밍

[python] 뉴스기사 크롤링, newspaper Article

밥짓는사나이- 2020. 7. 6. 15:59
728x90

 

뉴스 기사 title 과 link 가져오는 함수만들기

지난 포스팅에서 뉴스기사에서 title과 link를 RSS에서 가져오는 방법을 feedparser를 통해 보여드렸습니다.
오늘은 정리하여 함수로 만들고,
추가로,
가져온 링크로부터 크롤링하여 해당기사의 제목과 본문을 가져와 보도록 하겠습니다.

post2_ (2)

news title /link 함수화하기

  • feedparser 설치
In [1]:
!pip install feedparser
Collecting feedparser
  Downloading feedparser-5.2.1.tar.bz2 (192 kB)
Building wheels for collected packages: feedparser
  Building wheel for feedparser (setup.py): started
  Building wheel for feedparser (setup.py): finished with status 'done'
  Created wheel for feedparser: filename=feedparser-5.2.1-py3-none-any.whl size=44944 sha256=847de48014dba07c9956d7f1805ccdb44bac1bf6033956642e63e1b67727e81a
  Stored in directory: c:\users\user\appdata\local\pip\cache\wheels\4a\87\a9\ef99b7b68f9816d5ef1262dc11ce31a93a844eb69e68c1a031
Successfully built feedparser
Installing collected packages: feedparser
Successfully installed feedparser-5.2.1
  • 사용할 라이브러리 넣기
    feedparser를 통해 parsing할 예정으로, feedparser import하기
In [2]:
import feedparser
  • 검색할 뉴스페이지 리스트에 담아두기
In [3]:
#검색할 뉴스페이지
rss_url = ["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_urls list에서 title과 link 를 추출하여 rss_dic에 담아두는 함수 news_rss작성

  • main 함수에서 news list 가져오기

In [4]:
#rss_urls를 받아 title과 link를 담아둔 rss_dic를 반환한다.

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

def main():
    print('<<<parsing news titles>>>')
    news_list = news_rss(rss_url)
    print(news_list)

if __name__ == "__main__":
    main()
<<<parsing news titles>>>
http://rss.etnews.com/Section901.xml parsing...
http://rss.etnews.com/Section901.xml complete..
http://rss.etnews.com/Section902.xml parsing...
http://rss.etnews.com/Section902.xml complete..
http://rss.etnews.com/Section903.xml parsing...
http://rss.etnews.com/Section903.xml complete..
[{'title': "전자서명법 전부 개정안 통과…사설인증시장 대응책 마련 `팁' 제시", 'link': 'https://www.etnews.com/20200703000001'}, {'title': '디지털 뉴딜, 하반기 일자리 창출·산업 활력 만든다…공공솔루션위크 막올라', 'link': 'https://www.etnews.com/20200702000249'}, {'title': '국가융합망, 사업 참여 조건 논란...GNS 만들고 활용 안하는 행안부', 'link': 'https://www.etnews.com/20200702000194'}, {'title': "산학연관 中企기술혁신 싱크탱크 '중소기업 혁신 네트워크 포럼' 출범", 'link': 'https://www.etnews.com/20200702000298'}, {'title': "자원공기업 '빚' 여전…6년 구조조정 '빛' 못 봤다", 'link': 'https://www.etnews.com/20200702000286'}, {'title': "SK바이오팜, 상장 첫날 '시총 10' 조코스피 바이오 빅3 도약", 'link': 'https://www.etnews.com/20200702000273'}, {'title': "5G 인프라 조기 구축 급한데...국토부 '주민 동의' 때아닌 규제", 'link': 'https://www.etnews.com/20200702000224'}, {'title': "[카&테크]전기 신호로 조향을 '스티어 바이 와이어'", 'link': 'https://www.etnews.com/20200702000200'}, {'title': "[신차드라이브] 마세라티 '기블리 리벨레 에디션', 경주마에 희소성을 더하다", 'link': 'https://www.etnews.com/20200702000199'}, {'title': '초우량 \'JT저축은행\' 매물로...업계 "암울한 미래 보여주는 것"', 'link': 'https://www.etnews.com/20200702000278'}, {'title': '현대차, 수소차 넘어 수소선박·철도·트램·항공시장 겨눈다', 'link': 'https://www.etnews.com/20200702000272'}, {'title': '[나노코리아 2020] "나노셀룰로오스, 우리도 키운다"…\'소재 기술 자립\' 한 목소리', 'link': 'https://www.etnews.com/20200702000227'}, {'title': "올해 첫 '핀테크 기업 코스닥 입성' 누가 꿰찰까?", 'link': 'https://www.etnews.com/20200702000257'}, {'title': "통합당 '미래산업일자리특위' 출범...위원장에 조명희 의원", 'link': 'https://www.etnews.com/20200702000256'}, {'title': '야당 일제히 "文 부동산 정책 실패 인정해야" 비판', 'link': 'https://www.etnews.com/20200702000254'}, {'title': "SK(주) C&C, 현업 AI 혁신 돕는 '아큐인사이트 플러스 2.0' 공개", 'link': 'https://www.etnews.com/20200702000250'}, {'title': '제로페이, 언택트소비·동행세일에 가파른 성장…누적결제 5000억원 돌파', 'link': 'https://www.etnews.com/20200702000247'}, {'title': '페이코 쿠폰, 새 캐시카우로…플랫폼 수익 다변화 전략', 'link': 'https://www.etnews.com/20200702000223'}, {'title': "'포스트 코로나' 선도국가 핵심 과제는...정부, 4대 목표 수립", 'link': 'https://www.etnews.com/20200702000221'}, {'title': '"냉장고 안팎 모두 내맘대로 바꾼다" 삼성 뉴 셰프컬렉션 냉장고 출시', 'link': 'https://www.etnews.com/20200702000216'}, {'title': 'K진단키트 생산성 70% 이상 향상…삼성전자 맞춤형 지원 성과', 'link': 'https://www.etnews.com/20200702000213'}, {'title': "정부, '뿌리산업' 범위 확대…소부장 경쟁력 강화 총력", 'link': 'https://www.etnews.com/20200702000162'}, {'title': '대학 원격수업 운영기준 대학이 자율 결정...지역 혁신도 가속화', 'link': 'https://www.etnews.com/20200702000193'}, {'title': "지식재산 투자시대 '활짝'...특허청, 1조3000억대 투자시장 연다", 'link': 'https://www.etnews.com/20200702000133'}, {'title': '구현모 KT 대표 “5G 기회의 땅은 B2B...KT가 가능성 실현”', 'link': 'https://www.etnews.com/20200702000111'}, {'title': '"보험사고정보시스템 역사 속으로"…신정원, 보험신용정보통합조회시스템으로 단일화', 'link': 'https://www.etnews.com/20200702000107'}, {'title': "[커머스 핫라인]'아차차' 하기 전에 블랙박스 설치를", 'link': 'https://www.etnews.com/20200702000070'}, {'title': "배민 B마트, 출범 반년 만에 2배 '폭풍성장'…전국구 사업 추진", 'link': 'https://www.etnews.com/20200702000064'}, {'title': "정부, '탈원전' 손실 비용 보전한다…전기사업법 시행령 개정 입법예고", 'link': 'https://www.etnews.com/20200701000386'}, {'title': '[인사이트] 이준구 KAIST AI양자컴퓨팅 ITRC 센터장 "양자는 국가 전략 기술"', 'link': 'https://www.etnews.com/20200701000259'}, {'title': '제주삼다수, 온실가스 감축?폭염대비 지원 동참', 'link': 'https://www.etnews.com/20200703000213'}, {'title': '[ET투자뉴스][LIG넥스원 지분 변동] 국민연금공단 외 1명 1.13%p 증가, 11.05% 보유', 'link': 'https://www.etnews.com/20200703000212'}, {'title': '[ET투자뉴스][AP시스템 지분 변동] 국민연금공단 외 1명 -1%p 감소, 5.06% 보유', 'link': 'https://www.etnews.com/20200703000211'}, {'title': "매일유업, '비닐봉투 없는 날' 맞아 친환경 장바구니 캠페인 진행", 'link': 'https://www.etnews.com/20200703000210'}, {'title': '[ET투자뉴스][SK렌터카 지분 변동] 국민연금공단 외 1명 1.08%p 증가, 9.55% 보유', 'link': 'https://www.etnews.com/20200703000209'}, {'title': '미오내츄럴, 손소독제 2종 美 FDA 등록', 'link': 'https://www.etnews.com/20200703000208'}, {'title': 'LG생활건강 실적 연속 신기록 행진, 60분기에서 멈추나', 'link': 'https://www.etnews.com/20200703000207'}, {'title': "남양유업 배달 이유식 '케어비', 신한카드와 콜라보 이벤트 진행", 'link': 'https://www.etnews.com/20200703000206'}, {'title': '[ET투자뉴스][아세아 지분 변동] 국민연금공단 외 1명 -1.2%p 감소, 12.27% 보유', 'link': 'https://www.etnews.com/20200703000205'}, {'title': '[ET투자뉴스][CJ프레시웨이 지분 변동] 국민연금공단 외 1명 -1.05%p 감소, 4.64% 보유', 'link': 'https://www.etnews.com/20200703000204'}, {'title': "대상웰라이프, 고단백 간식 '마이밀 뉴프로틴바' 출시", 'link': 'https://www.etnews.com/20200703000203'}, {'title': '[ET투자뉴스][송원산업 지분 변동] 국민연금공단 외 1명 1.14%p 증가, 7.08% 보유', 'link': 'https://www.etnews.com/20200703000202'}, {'title': '[ET투자뉴스][삼성중공업 지분 변동] 국민연금공단 외 1명 -2.04%p 감소, 7.07% 보유', 'link': 'https://www.etnews.com/20200703000201'}, {'title': '[ET투자뉴스][삼천리 지분 변동] 국민연금공단 외 1명 -1.05%p 감소, 3.95% 보유', 'link': 'https://www.etnews.com/20200703000200'}, {'title': '[ET투자뉴스][삼성엔지니어링 지분 변동] 국민연금공단 외 1명 -2.08%p 감소, 8.19% 보유', 'link': 'https://www.etnews.com/20200703000199'}, {'title': '[ET투자뉴스][메리츠화재 지분 변동] 국민연금공단 외 1명 1.02%p 증가, 6.04% 보유', 'link': 'https://www.etnews.com/20200703000198'}, {'title': '홍재은 NH농협생명 대표, 영농철 포도농가 일손 돕기 나서', 'link': 'https://www.etnews.com/20200703000194'}, {'title': "기업은행, 'IBK창공' 하반기 혁신 창업기업 61곳 육성", 'link': 'https://www.etnews.com/20200703000193'}, {'title': '[ET투자뉴스][메리츠증권 지분 변동] 국민연금공단 외 1명 1.18%p 증가, 8.94% 보유', 'link': 'https://www.etnews.com/20200703000192'}, {'title': '[ET투자뉴스][대화제약 지분 변동] 김수지 외 8명 0.06%p 증가, 28.43% 보유', 'link': 'https://www.etnews.com/20200703000191'}, {'title': '[ET투자뉴스][롯데하이마트 지분 변동] 국민연금공단 외 1명 2.08%p 증가, 8.1% 보유', 'link': 'https://www.etnews.com/20200703000190'}, {'title': '[ET투자뉴스][롯데정밀화학 지분 변동] 국민연금공단 외 1명 1.02%p 증가, 12% 보유', 'link': 'https://www.etnews.com/20200703000189'}, {'title': '[ET투자뉴스][롯데관광개발 지분 변동] 국민연금공단 외 1명 1.03%p 증가, 8.41% 보유', 'link': 'https://www.etnews.com/20200703000188'}, {'title': '[ET투자뉴스][대창단조 지분 변동] 국민연금공단 외 1명 -1.02%p 감소, 8.23% 보유', 'link': 'https://www.etnews.com/20200703000184'}, {'title': '[ET투자뉴스][대원제약 지분 변동] 국민연금공단 외 1명 -2.1%p 감소, 5.13% 보유', 'link': 'https://www.etnews.com/20200703000182'}, {'title': '바이오니아, KB생명보험에 진투라이프 서비스 공급', 'link': 'https://www.etnews.com/20200703000183'}, {'title': '광주정보문화산업진흥원, 애니메이션 3편 제작 지원', 'link': 'https://www.etnews.com/20200703000181'}, {'title': '[ET투자뉴스][대상 지분 변동] 국민연금공단 외 1명 1.01%p 증가, 13.48% 보유', 'link': 'https://www.etnews.com/20200703000179'}, {'title': '[ET투자뉴스][대덕 지분 변동] 국민연금공단 외 1명 -8.3%p 감소, 4.09% 보유', 'link': 'https://www.etnews.com/20200703000178'}, {'title': '[ET투자뉴스][GKL 지분 변동] 국민연금공단 외 1명 -1.01%p 감소, 11.93% 보유', 'link': 'https://www.etnews.com/20200703000177'}, {'title': "獨 머크, 한국에 '반도체 소재' 첨단기술센터 연다", 'link': 'https://www.etnews.com/20200630000171'}, {'title': '7월부터 전기차 충전요금 급속 1.5배, 완속 3배 오른다', 'link': 'https://www.etnews.com/20200629000278'}, {'title': '현대차그룹, 하반기 9종 신차로 실적 반등 노린다', 'link': 'https://www.etnews.com/20200629000239'}, {'title': "삼성전자-LG전자, 'C쇼크 탈출' 청신호", 'link': 'https://www.etnews.com/20200630000299'}, {'title': "日 수출규제 1년, '소부장 기술자립' 오히려 강해졌다", 'link': 'https://www.etnews.com/20200629000256'}, {'title': '정부, 내달 1일부터 도시가스 요금 평균 13.1% 인하', 'link': 'https://www.etnews.com/20200629000277'}, {'title': '[기획] 글로벌 이통사 "화웨이 배제 사실상 불가능"', 'link': 'https://www.etnews.com/20200629000226'}, {'title': "5G 인프라 조기 구축 급한데...국토부 '주민 동의' 때아닌 규제", 'link': 'https://www.etnews.com/20200702000224'}, {'title': '아마존-인피니언-존슨앤존슨, 글로벌 대기업에 올라탄 한국 스타트업', 'link': 'https://www.etnews.com/20200630000097'}, {'title': "외산 독점 '지적도 관리 GIS 엔진' 연내 100% 국산 전환", 'link': 'https://www.etnews.com/20200701000316'}, {'title': "1조원 규모 '안마의자' 시장…'안전 대책'은 전무", 'link': 'https://www.etnews.com/20200701000309'}, {'title': "레버리지 100배 '암호화폐 파생상품' 성행", 'link': 'https://www.etnews.com/20200629000257'}, {'title': '현대차, 수소차 넘어 수소선박·철도·트램·항공시장 겨눈다', 'link': 'https://www.etnews.com/20200702000272'}, {'title': '초우량 \'JT저축은행\' 매물로...업계 "암울한 미래 보여주는 것"', 'link': 'https://www.etnews.com/20200702000278'}, {'title': '카카오페이증권, 상품 다양화로 4050세대 잡는다', 'link': 'https://www.etnews.com/20200701000304'}, {'title': '식물재배기, 맥주냉장고, 신발관리기…하반기 신가전 봇물', 'link': 'https://www.etnews.com/20200629000095'}, {'title': "정부, '탈원전' 손실 비용 보전한다…전기사업법 시행령 개정 입법예고", 'link': 'https://www.etnews.com/20200701000386'}, {'title': '롯데마트 동행세일 2탄…러시아 대게·한우 할인 판매', 'link': 'https://www.etnews.com/20200701000018'}, {'title': '[단독]CJ ENM, 케이블TV에 프로그램 사용료 20% 인상 요구', 'link': 'https://www.etnews.com/20200630000324'}, {'title': "세계 첫 '수소+모빌리티' 산업전시회...정부·민간, 시장 선도에 초점", 'link': 'https://www.etnews.com/20200701000325'}]

link 별 news title / text 가져오기

  • newspaper3K library 설치
In [5]:
!pip install newspaper3k
Collecting newspaper3k
  Downloading newspaper3k-0.2.8-py3-none-any.whl (211 kB)
Collecting feedfinder2>=0.0.4
  Downloading feedfinder2-0.0.4.tar.gz (3.3 kB)
Requirement already satisfied: feedparser>=5.2.1 in c:\programdata\anaconda3\lib\site-packages (from newspaper3k) (5.2.1)
Collecting tldextract>=2.0.1
  Downloading tldextract-2.2.2-py2.py3-none-any.whl (48 kB)
Requirement already satisfied: requests>=2.10.0 in c:\programdata\anaconda3\lib\site-packages (from newspaper3k) (2.22.0)
Collecting jieba3k>=0.35.1
  Downloading jieba3k-0.35.1.zip (7.4 MB)
Requirement already satisfied: PyYAML>=3.11 in c:\programdata\anaconda3\lib\site-packages (from newspaper3k) (5.3)
Requirement already satisfied: nltk>=3.2.1 in c:\programdata\anaconda3\lib\site-packages (from newspaper3k) (3.4.5)
Requirement already satisfied: lxml>=3.6.0 in c:\programdata\anaconda3\lib\site-packages (from newspaper3k) (4.5.0)
Collecting tinysegmenter==0.3
  Downloading tinysegmenter-0.3.tar.gz (16 kB)
Requirement already satisfied: Pillow>=3.3.0 in c:\programdata\anaconda3\lib\site-packages (from newspaper3k) (7.0.0)
Collecting cssselect>=0.9.2
  Downloading cssselect-1.1.0-py2.py3-none-any.whl (16 kB)
Requirement already satisfied: beautifulsoup4>=4.4.1 in c:\programdata\anaconda3\lib\site-packages (from newspaper3k) (4.6.0)
Requirement already satisfied: python-dateutil>=2.5.3 in c:\programdata\anaconda3\lib\site-packages (from newspaper3k) (2.8.1)
Requirement already satisfied: six in c:\programdata\anaconda3\lib\site-packages (from feedfinder2>=0.0.4->newspaper3k) (1.14.0)
Collecting requests-file>=1.4
  Downloading requests_file-1.5.1-py2.py3-none-any.whl (3.7 kB)
Requirement already satisfied: idna in c:\programdata\anaconda3\lib\site-packages (from tldextract>=2.0.1->newspaper3k) (2.8)
Requirement already satisfied: setuptools in c:\programdata\anaconda3\lib\site-packages (from tldextract>=2.0.1->newspaper3k) (45.2.0.post20200210)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\programdata\anaconda3\lib\site-packages (from requests>=2.10.0->newspaper3k) (1.25.8)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\programdata\anaconda3\lib\site-packages (from requests>=2.10.0->newspaper3k) (3.0.4)
Requirement already satisfied: certifi>=2017.4.17 in c:\programdata\anaconda3\lib\site-packages (from requests>=2.10.0->newspaper3k) (2019.11.28)
Building wheels for collected packages: feedfinder2, jieba3k, tinysegmenter
  Building wheel for feedfinder2 (setup.py): started
  Building wheel for feedfinder2 (setup.py): finished with status 'done'
  Created wheel for feedfinder2: filename=feedfinder2-0.0.4-py3-none-any.whl size=3359 sha256=bb7a5a70fd99703a10669925aea49cb05f42e35b6a61fac9a1e58298a857f90e
  Stored in directory: c:\users\user\appdata\local\pip\cache\wheels\7f\d4\8f\6e2ca54744c9d7292d88ddb8d42876bcdab5e6d84a21c10346
  Building wheel for jieba3k (setup.py): started
  Building wheel for jieba3k (setup.py): finished with status 'done'
  Created wheel for jieba3k: filename=jieba3k-0.35.1-py3-none-any.whl size=7398410 sha256=d6f8d09d1a707c2948d8abe2d76b7a11e920ec00407acc927700615ab0c4ea95
  Stored in directory: c:\users\user\appdata\local\pip\cache\wheels\4c\91\46\3c208287b726df325a5979574324878b679116e4baae1af3c3
  Building wheel for tinysegmenter (setup.py): started
  Building wheel for tinysegmenter (setup.py): finished with status 'done'
  Created wheel for tinysegmenter: filename=tinysegmenter-0.3-py3-none-any.whl size=13542 sha256=26f57fb07ef2626dd29682e70ad65638ddd742e36c3961c608d762d883bb5565
  Stored in directory: c:\users\user\appdata\local\pip\cache\wheels\df\67\41\faca10fa501ca010be41b49d40360c2959e1c4f09bcbfa37fa
Successfully built feedfinder2 jieba3k tinysegmenter
Installing collected packages: feedfinder2, requests-file, tldextract, jieba3k, tinysegmenter, cssselect, newspaper3k
Successfully installed cssselect-1.1.0 feedfinder2-0.0.4 jieba3k-0.35.1 newspaper3k-0.2.8 requests-file-1.5.1 tinysegmenter-0.3 tldextract-2.2.2
  • newspaper의 Article 함수

    Article의 title과 text를 가져옴

In [6]:
from newspaper import Article
  • article 변수에 Article 함수를 사용하여, 기사 URL을 통해 파싱하기

    url은 sample로 첫번째 url을 복사하여 사용

In [7]:
article = Article('https://www.etnews.com/20200703000001', language = 'ko')
article.download()
article.parse()
  • .title(제목), .text(내용)을 통해 기사제목과 내용 가져오기
In [8]:
article.title
Out[8]:
"전자서명법 전부 개정안 통과…사설인증시장 대응책 마련 `팁' 제시"
In [9]:
article.text[:100]
Out[9]:
'오픈뱅킹 시대 개막으로 지난해 촉발한 핀테크 전쟁 불길이 올 상반기 전자서명법 전부 개정안 통과로 12월 10일부터 공인인증서가 법적 효력을 상실하면서 사설인증서 시장은 춘추 전국'
728x90
728x90