230515, 230516
해당 홈페이지는 페이지 번호로 이동하는 이전 홈페이지와 다르게, 더보기(see more)를 클릭하면 추가로 15개씩 기사가 출력되는 형식의 홈페이지이다.
💡 스크래핑 방향 설정
- 필요한 날짜까지 한 번에 더보기를 클릭해서 기사목록을 펼쳐둔다 > 기사를 클릭해 들어간다 > 본문 스크래핑 > 원래 페이지로 돌아옴
- is_displayed()를 활용해 코드 작성 완료
# 더보기 버튼 클릭하는 요소
more_botton = driver.find_element(By.CSS_SELECTOR, '#newsloadmore')
for i in range(1, 5): # 4번 더보기 클릭하도록 설정
time.sleep(3)
if more_botton.is_displayed():
more_botton.click()
❗ 문제 상황 1. 본문 태그의 id 값이 계속 바뀜
- 처음 방법 : 기사 제목, 날짜, 본문을 따로 가져오려고 했으나, 본문 태그의 id 값이 각 기사마다 달라짐.
- content cp_base 박스 > 제목(cp_PageTitle cp_base)/ 날짜, 본문(class = cp_HeadingText1 cp_base, id='기사마다 값변화')
- 본문 부분과 날짜를 구분해서 불러오려면 바뀐 값을 계속 적용해야 함
- 💡 좀 더 쉬운 방법으로, 뉴스 페이지 전체가 속한 태그로 (제목, 날짜, 본문)을 뭉쳐서 긁어온 후, 전처리를 한다.
- 본문이 속한 id = 'content cp_base'의 'p' 태그들로 불러오면 뉴스 페이지가 전체 다 불러와짐.
❗ 문제 상황 2. 더보기 목록이 중복되어 불러와짐
- 맨 처음 url을 불러와서 실행했을 때 뜨는 쿠키 설정을 클릭해줌 > 해결
❗ 문제 상황 3. 더보기 목록 초기화
- 기사를 클릭 > 본문 스크래핑 > 원래 페이지로 왔을 때, 펼쳐둔 더보기 목록들이 초기화됨
- 💡 미리 더보기 펼쳐둠 > 각 기사 클릭 시 새탭으로 열기, 창전환 > 스크래핑 > 새탭 닫고, 원래 탭으로 돌아옴
- 참고한 블로그 : https://blog.naver.com/boxinganny/222946257452 (완전 같은 상황이었음)
- 트러블1 : send_keys(Keys.CONTROL + Keys.RETURN)이 동작을 안함. => import가 제대로 안되었는지, 코드가 꼬였는지, 230516 다시 처음부터 실행하니 작동.
- 트러블2 : 처음 실행했을 때, 새탭에서 잘 열렸으나 두 번째 에러 => 새로 열린 탭으로 이동한 후, 처음 탭으로 돌아와지지 않았던 것. 그러면 driver.get(url) 코드도 동작을 하지 않는다. => switch_to.window(driver.window_handles[0])으로 처음 탭으로 이동하게 다시 실행 > driver.get(url) 후 다시 새탭 코드를 실행해서 해결
news_click = driver.find_element(By.XPATH, '경로') # 새탭에서 열 링크 요소
news_click.send_keys(Keys.CONTROL + Keys.RETURN) # ctrl+enter로 새탭 열기
driver.switch_to.window(driver.window_handles[1]) # 새로 열린 탭으로 이동
스크래핑 중략
# 탭 닫기
driver.close()
# 처음 탭으로 이동하기
driver.switch_to.window(driver.window_handles[0])
❗ 전처리
- 통으로 스크래핑 해 온 뉴스(제목, 날짜, 본문)을 분리해줘야 함
- '\n' 을 기준으로 split 후, 첫번째 인덱스([0])를 제목, 두 번째 인덱스([1])를 날짜, 이후 인덱스([2:])를 본문으로 설정
- 본문은 불필요한 ''가 너무 많이 생기기 때문에, ''를 기준으로 join해줌.
Reference
- 스크롤 시 초기화 문제 해결 https://blog.naver.com/boxinganny/222946257452
- ActionChains(Keys.CONTROL + Key.RETURN 트러블 때 대안으로 찾아본 방법)나 기타 기능들이 설명이 잘 되어 있음 https://0433.tistory.com/41
- '파이썬 셀레니움 링크 클릭해서 새탭으로 열기' 유튜브 영상 https://youtu.be/NNnL1MkiwoM
댓글