[공부 내용]
>여러개 탭 다루기
- driver.window_handles : 열린 탭 목록
len(driver.window_handles) : 열린 탭의 개수
driver.window_handles[0] : 첫번째 탭
driver.window_handles[1] : 두번째 탭
driver.window_handles[n] : 마지막 탭 = driver.window_handles[-1]
- driver.switch_to.window() : 작업할 탭을 바꿔준다
# 기본 코드
driver.switch_to.window(작업할 탭)
# 1. 새로운 탭이 켜짐
새로운 탭 등장!
# 2. 'driver' 변수를 새로운 탭으로 전환
driver.switch_to.window(driver.window_handles[-1])
# 3. 새로운 탭에서 작업
클릭, 값 입력, 내용 수집 등의 작업 수행
# 4. 작업을 마치면 새로운 탭을 닫음
driver.close()
# 5. 다시 처음 탭으로 전환
driver.switch_to.window(driver.window_handles[0])
from selenium import webdriver
import time
#뉴스 검색 키워드 입력
keyword = input("뉴스 검색 키워드 : ")
#뉴스 기사 게시판 접속
driver = webdriver.Chrome('./chromedriver')
news_url = 'https://search.hankyung.com/apps.frm/search.news?query=' + keyword + '&mediaid_clust=HKPAPER,HKCOM'
driver.get(news_url)
time.sleep(2)
#뉴스 기사 제목 10개를 나타내는 태그 저장> em.tit 태그 10개를 찾아줘야 하기 때문에 find_elements 사용
ten_articles = driver.find_elements_by_css_selector('em.tit')
### 탭 전환, 본문 출력, 크롬 창 닫기
#뉴스마다 번호를 붙여주기 위한 변수
cnt = 0
# 10개 뉴스 기사를 대상으로 반복문
for article in ten_articles:
#'article'은 뉴스 기사 제목을 나타내는 HTML 요소. .text는 제목
title = article.text
#'article'은 HTML 요소이므로 클릭하면 뉴스 기사 본문을 확인 할 수 있음
article.click()
time.sleep(1)
#'driver'를 새로운 탭 (뉴스 기사 본문창)으로 전환
driver.switch_to_window(driver.window_handles[-1])
#기사 본문을 'content' 변수에 저장 > id: artilcletxt
content = driver.find_element_by_id('articletxt').text
#'content'를 '\n' 단위로 나누어 'seperate' 변수에 저장
seperate = content.split('\n')
#기사 본문 출력
cnt += 1
print(f'<{cnt}번 뉴스 - {title}>')
## 본문 깔끔하게 출력
for sep in seperate:
#아무 것도 없는 공백 ('')이 포함되어 있기 때문에, 이런 공백은 출력하지 않음
if sep != '':
# print(값, end = ??)를 활용하여 모든 sep 사이에 공백 한 칸 (' ')을 삽입하여 출력
print(sep, end = ' ')
# 하나의 본문 내용을 출력하고 나면 줄 간격을 한 줄 넣어줌
print('\n')
#새로운 탭(뉴스 기사 본문창)에서는 작업을 다 했으므로 창 닫기
driver.close()
#다시 원래 탭(뉴스 기사 정렬되어 있는)으로 전환
driver.switch_to_window(driver.window_handles[0])
time.sleep(1)
driver.close() #작업완료 후 크롬 창 닫기
'코린이_탈출 > 크롤링' 카테고리의 다른 글
[모각코_크롤링] 동적 크롤링 5-과제 (0) | 2021.01.29 |
---|---|
[모각코_크롤링] 동적 크롤링 4-과제 (1) | 2021.01.28 |
[모각코_크롤링] 동적 크롤링 4 (0) | 2021.01.28 |
[모각코_크롤링] 동적 크롤링 3 - 과제 (1) | 2021.01.27 |
[모각코_크롤링] 동적 크롤링 3 (0) | 2021.01.27 |