동적화면 크롤링하기
🧐 동적화면에서 검색어 가져오기
다음 네이트 메인 화면의 실시간 이슈 키워드 10개를 뽑아보자.
이 화면의 특징은 1~5위가 나타난 다음, 6~10위가 나타나는 식이다.
10개 키워드가 한번에 나타나지 않으므로 유의가 필요하다!
라이브러리 Import
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
크롬 드라이버 매니저 시작
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
생각해보기
👀 5초 정도마다 바뀌는 검색어를 어떻게 가져오면 좋을까?
- 두 개의 리스트를 만들어, 시간 차를 두고 검색어가 두번 저장되게 한 다음,
- 두 리스트를 더하면(결합), 중복되는 것 없이 깔끔하게 1~10위가 출력되지 않을까?
코드 작성
- 두 개의 빈 리스트를 생성한다.
- 이제 시간차를 두고 2번 검색어를 수집하는 코드를 작성한다.
- url (네이트 메인) 설정
- driver.get(url)로 웹드라이버를 통해 Nate의 메인 페이즈를 연다
- driver.find_elements(By.CSS_SELECTOR, "수집을 원하는 부분의 경로") : 순위와 키워드를 가져온다
- for i in range(2) : 를 사용하여 두 번 반복한다.(5초 간격을 두고)
- 가져온 순위와 키워드 리스트의 내용을 가지고 2번에 걸쳐 리스트에 내용을 추가하도록 한다.
- 즉, i == 0 일때는 첫번째 시도로, nate_list_1st 리스트에 내용을 저장하고
- i == 1 일때는 두번째 시도록, nate_list_2nd 리스트에 내용을 저장한다.
- 그런데 i 가 0에서 1이 될 때, 5초의 timesleep을 주어, 시간차로 인한 문제를 해결한다.
- 시간차를 준 후, 페이지를 새로고침
nate_list_1st = []
nate_list_2nd = []
for i in range(2):
URL='https://www.nate.com'
driver.get(url=URL)
rank_results = driver.find_elements(By.CSS_SELECTOR,'#olLiveIssueKeyword > li > span.num_rank')
nate_results = driver.find_elements(By.CSS_SELECTOR,'#olLiveIssueKeyword > li > a > span.txt_rank')
for rank, keyword in zip(rank_results, nate_results):
if i == 0: #첫번째 화면
nate_list_1st.append(f'{rank.text}_{keyword.text}')
elif i == 1: #두번째 화면
nate_list_2nd.append(f'{rank.text}_{keyword.text}')
time.sleep(5)
driver.refresh() #새로고침같은 개념
- 마지막으로, 수집한 두 리스트를 + (더하기 연산자) 로 통합한다.
result = nate_list_1st + nate_list_2nd
print(result)
driver.quit()
👍 결과 확인
728x90
'Programming Basics' 카테고리의 다른 글
[Scrapy 크롤링] Worldometer에서 나라이름 크롤링 (0) | 2023.08.08 |
---|---|
XPath란 (0) | 2023.08.08 |
[크롤링] 셀레늄(selenium) 활용 ; 구글 검색 후 이미지 다운로드 (0) | 2023.08.08 |
[웹 크롤링] 주식 일별 시세를 데이터프레임으로 저장하기 (0) | 2023.08.05 |
[웹 크롤링] 네이버 증권에서 '종목코드', '상장회사', '주가' 크롤링하기 (0) | 2023.08.04 |