지난 이미지 스크래핑에 이어 이번에는 기사 스크래핑을 배웠다.
이미지 웹스크래핑
↓
파이썬 크롤링(웹 스크래핑) - 이미지 스크래핑하기, dload, selenium, bs4
이번에는 '주식'이라는 키워드를 네이버 뉴스에 검색한 뒤 기사 제목, 링크, 신문사를 웹스크래핑하여 엑셀에 저장하는 것을
해보려한다.
더불어 정리한 파일을 메일로 보내는 것! 까지 해볼 것이다!!
일단 이번 글에서는 '기사 제목 웹 스크래핑' 을 해볼 것이다.
우선 필요한 패키지가 잘 설치되어 있는지 확인해보자.
1) bs4
2) selenium
3) openpyxl
4) smtplib
: 파이썬 기본 내장 패키지이므로 따로 설치할 필요 없음.
1)과 2)는 이미지 웹 스크래핑을 할 때 설치했던 뷰티풀 숩과 셀레니움이고
3)은 엑셀로 저장하거나 엑셀을 열 때 필요한 패키지,
4)는 자동으로 이메일을 보낼 때 필요한 패키지이다.
설치가 끝났다면 본격적으로 기사 웹 스크래핑을 시작해보자.
1. HTML 확인하기
먼저 네이버 뉴스에서 '주식'을 검색한 뒤 그 페이지의 HTML을 살펴보아야한다.
where=news이고 query=주식 이라고 적혀있다.
query에 다른 키워드를 작성하면 내가 원하는 키워드의 네이버 뉴스 검색 끝!!!
search.naver.com/search.naver?where=news&sm=tab_jum&query=%EC%A3%BC%EC%8B%9D
2. 기사 정보 스크래핑 하기
기본적으로 웹스크래핑에 필요한 뷰티풀숩과 웹드라이버를 import해준다.
기초 설정은 아래 코드와 같다.
url은 내가 아까 주식 키워드 주소를 적어준다.
'여기에 코드 적기!' 이 부분에 코드를 적어서 원하는 부분을 가져오면 된다.
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome('chromedriver')
url = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=주식"
driver.get(url)
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')
#####################
# 여기에 코드 적기!
#####################
driver.quit()
먼저 제목을 스크래핑해보자.
각 기사를 선택하고, 그 안의 기사 제목을 프린트해보자.
1) 맨 위 기사 제목 위에서 마우스 우클릭을 하고 검사를 누른다.
2) 개발자 도구가 보이는데 여기서 파란 부분 위에서 또 마우스 우클릭을 한 뒤 'copy'를 누르고 'copy selector'를 누르면 기사 제목에 해당되는 셀렉터가 복사된다.
파이썬에 복사한 것을 붙여넣기하면 아래의 코드가 나온다. 기사마다 뭔가 규칙성을 찾기가 어렵다.
#첫 번째 기사
#sp_nws1 > dl > dt > a
#두 번째 기사
#sp_nws4 > dl > dt > a
#세 번째 기사
#sp_nws9 > dl > dt > a
기사 제목이 속한 태그들을 쭉 살펴보니 ul이라는 목록을 나타내는 태그 안에 li로 기사들이 들어가 있는 것을 볼 수 있다.
그렇기 때문에 이 ul에 해당되는 부분을 카피 셀렉트해주는 것이다!!
ul에 해당되는 부분을 카피 셀렉트해서 붙여넣기 하면 아래의 코드처럼 나온다.
#main_pack > div.news.mynews.section._prs_nws > ul
그럼 '이 ul 안에 있는 li들을 가지고 와라'라는 의미로 ul > li 를 적어준다.
#main_pack > div.news.mynews.section._prs_nws > ul > li
이제 이 셀렉터를 가지고 아래처럼 코드를 적어주면 기사 li들을 출력할 수 있게 된다.
articles = soup.select("#main_pack > div.news.mynews.section._prs_nws > ul > li")
for article in articles:
print(article)
하지만 기사의 모든 정보는 다 필요없고 우리는 기사 제목만 필요한 것이니! 기사 제목이 어디에 있는지 다시 보고
a_tag라는 변수를 만들어서 article.select_one(' ') 이렇게 적어주면 될 것이다!
아래 그림을 살펴보면 ul 안에 li 안에 dl 안에 dt 안에 a 태그 안에 기사 제목이 '텍스트'로 들어있다!
일단 li까지는 왔으니 a_tag는 'dl > dt > a' 라는 위치를 가질 것이다.
3) 위의 이야기를 이제 코드로 적어보자.
기사 제목을 가져온 다는 것은 a_tag안에서 text를 가져오는 것이기 때문에 .text를 붙여서 아래 코드처럼 써준다.
#articles변수에 soup.select(기사 제목의 셀렉터를 카피해서 넣어준다!)#
articles = soup.select("#main_pack > div.news.mynews.section._prs_nws > ul > li")
for article in articles:
a_tag = article.select_one("dl > dt > a")
title = a_tag.text
print(title)
휴~ 기사 제목 가져오는 것도 힘들다!!!! 어쨌든 기사 제목 가져오기 성공!!!
이제 전체 코드를 쭉 확인해보자~!!
※3. 기사 제목 크롤링 전체 코드 ※
네이버에서 '주식' 기사를 검색한 뒤 기사 제목을 크롤링하는 전체 코드는 아래와 같다!!!!
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome('chromedriver')
url = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query=주식"
driver.get(url)
req = driver.page_source
soup = BeautifulSoup(req, 'html.parser')
articles = soup.select('#main_pack > div.news.mynews.section._prs_nws > ul > li')
for article in articles:
a_tag = article.select_one('dl > dt > a')
title = a_tag.text
print(title)
driver.quit()
다음 글에서는 기사의 url과 신문사 이름까지 크롤링하는 것을 정리해보려한다.
↓
파이썬 크롤링(웹스크래핑) - 네이버 기사 url과 신문사 크롤링
'프로그래밍' 카테고리의 다른 글
파이썬 크롤링(웹스크래핑) - 카톡 대화 워드클라우드로 만들기 (2) | 2020.10.06 |
---|---|
파이썬 패키지(라이브러리) 설치하기 - 파이참 편집기에서 dload패키지 설치 (0) | 2020.10.03 |
파이썬 크롤링(웹스크래핑) 네이버 기사 크롤링해서 엑셀에 저장 (0) | 2020.10.03 |
파이썬 크롤링(웹 스크래핑) - 이미지 스크래핑하기, dload, selenium, bs4 (2) | 2020.10.01 |