인프런 커뮤니티 질문&답변

allrounder님의 프로필 이미지
allrounder

작성한 질문수

쉽게 처음하는 파이썬 고급 크롤링 [Scrapy, Selenium, Headless Chrome]

selenium&scrapy문의

작성

·

198

0

- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)
- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다
- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요, 우선 다른 강의에 질문을 드리는 점 죄송스럽게 생각합니다.
현재 듣고 있는 중급 selenium&scrapy는 질문창이 닫혀있더라구요..
크롤링 고급 강좌도 결제해두고 중급 부터 듣고 있는 상황입니다.
 
고민도, 검색도, 질문도 여러 군데 해보았지만 답변을 찾지 못해 부득이 질문 올립니다.
 
강좌는 이미 펼쳐져있는 댓글 창에서 '더보기'를 누르고 추가적으로 크롤링을 하는 코드를 알려주었는데요,
기존 강좌 제작 시점과 달리 댓글은 기본적으로 닫혀 있고 on/off 버튼을 눌러야 댓글이 보이게 됩니다.
강의 활용해서 on_button 변수를 만들고, 이를 클릭할 수 있도록 한 번 꾸며 봤는데요,
태그도 바꿔보고, 함수도 바꿔보고, 다양한 방법으로 시도를 해봤는데, On/Off 버튼을 누르는 것을 못합니다 ㅠ
태그도 div.cmt_count_box까지만 해보고, button까지도 해보고, span까지도 해보고, 다양한 방법으로 시도 해봤습니다.
on_button = driver.find_element_by_css_selector('alex-area > div > div > div > div.cmt_count_box > button') webdriver.ActionChains(driver).click(on_button).perform()
 
아무래도 눈으로 보고 직접 체득해야 실력이 Up되지 않을까 해서 강의만 보고 넘어가기 보다는, 한 번 직접 구현해보고 싶어 문의 드리고자 합니다. 기초 강의 때에는 조금씩 페이지가 바뀌는 부분도 고민해서 넣다보면 어느순간 해결이 되었는데, 나름 중급이라 조금 어렵네요 ㅎㅎ
도움 부탁 드려 보겠습니다!
 
 
[작성코드]
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException import time chromedriver = '/usr/local/chromedriver' driver = webdriver.Chrome(chromedriver) driver.get('https://news.v.daum.net/v/20190709165157301?d=y') #댓글창 On/Off 버튼 누르기 - 게속 안됨 ㅠ element = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.CSS_SELECTOR, 'alex-area > div > div > div > div.cmt_count_box > button'))) on_button = driver.find_element_by_css_selector('alex-area > div > div > div > div.cmt_count_box > button') webdriver.ActionChains(driver).click(on_button).perform() #더보기 누르기 로직 만들기 loop, count = True, 0 while loop and count < 10: try: element = WebDriverWait(driver, 5).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'alex-area > div > div > div > div.cmt_box > div.alex_more > button')) ) more_button = driver.find_element_by_css_selector('alex-area > div > div > div > div.cmt_box > div.alex_more > button') webdriver.ActionChains(driver).click(more_button).perform() count = count + 1 #count += 1로도 가능 time.sleep(2.0) except TimeoutException : loop = False #크롤링하기 comment_box = driver.find_element_by_css_selector('alex-area > div > div > div > div.cmt_box > ul.list_comment') comment_list = comment_box.find_elements_by_tag_name('li') #각각 댓글은 li가 감싸고 있음 for num, comment_item in enumerate(comment_list) : print("[",+str(num+1),+"]", comment_item.find_element_by_css_selector('div p').text) driver.quit() #alex-area > div > div > div > div.cmt_count_box > button > span <- on/off #alex-area > div > div > div > div.cmt_box > div.alex_more > button > span:nth-child(1) <- 더보기버튼 #alex-area > div > div > div > div.cmt_box > ul.list_comment <- 댓글리스트

답변 1

0

안녕하세요.

해당 강의는 실제 여러 사이트를 기반으로 크롤링을 진행하였는데, 실제 사이트다보니 계속해서 바뀌어서, 이를 계속 코드를 새로 개발하고, 그 때마다 다시 찍을 수가 없어서, 부득이 close 를 하였습니다. 대신에, 작년까지 수강하신 분들을 대상으로 본 강의를 무료로 들으실 수 있도록, 또는 최대폭으로 할인해서 들으실 수 있도록 오픈을 해드렸습니다.

그래서, 해당 강의는 완전히 close 해서, 해당 강의에서 ㅎㅎ 다시 특정 사이트의 지금 변경된 사이트 크롤링 코드는 저도 개발을 ㅎㅎ 다시 해봐야 하는데, 그 부분이 매번 개발을 해야 해서, 무리가 있어서요. 그래서 사실 본 강의를 완전히 새로 만든 것이라서, 여기서 다시 기존 강의의 지금 변경된 사이트의 신규 코드를 ㅎㅎ 작성하고 설명드리는 부분은 양해를 부탁드려도 될까요? 이보다는 본 강의를 들어주시면서, 필요하신 부분들을 연습해보시면 어떠실까요? 연습과정을 다양하게 넣어서, 기존보다 좀더 빠르게 익히고, 연습할 수 있도록, 기존 강의의 피드백과 부족한 점을 또한번 개선하였거든요. 

감사합니다.

allrounder님의 프로필 이미지
allrounder
질문자

저는 작년에SQL 파다가, 올해 다시 크롤링을 배우러 왔는데 할인 기간을 완전히 놓치고 정가로 구입했네요 ㅎㅎ.. 

안그래도 수정사항이나 다른 안내들이 있을까봐 질문을 올리기 전, 크롤링 중급 -  selenium&scrapy 공지사항들을 살펴봤는데, 아래 써주신 내용은 여기 고급 강좌에 있다고 보면 될까요?

 

[강사님이 작년 11월에 작성하신 글]

그래서, 다양한 사이트를 보여드리기는 부분은 아쉽지만, 포기하고, 가능한 제가 개인적으로 테스트 차원에서 만든 일종의 블로그 사이트를 기반으로, selenium 부분을 테스트할 수 있도록, 코드를 작성하고, 강의를 새로 업데이트할 예정입니다.

제가 현업에 있다보니, 급하게 이 부분만 진행하기는 무리가 있지만, 가능한 11월 내에는 업데이트를 하도록 하고, 다시 공지드리겠습니다. 

이미 잔재미코딩 관련 여러 강의를 듣고 계신 분들께서는, 어떻게 보면 추가 강의를 얻으시는 것이라고 긍정적으로 생각해주시면 좋을 것 같습니다. 항상 제 강의를 선택해주신 분들은, 최소한 기대를 저버리지 않게, 좋은 경험을 할 수 있도록 노력하겠습니다.

allrounder님의 프로필 이미지
allrounder

작성한 질문수

질문하기