웹페이지를 크롤링하다보면 스크롤을 하지않으면 댓글이나 게시글이 보이지않는 경우가 있을것이다
예를 들어 유튜브의 댓글창 같은것 말이다. 스크롤을 하지않으면 댓글이 웹브라우저의 정보가 추가 되지않는다
그럴 경우에는 스크롤을 내려 정보를 모두 가져온 후에 웹페이지정보를 가져와 크롤링을 시도해야한다.
options = webdriver.ChromeOptions()
# options.add_argument('--headless') # 창 새로 띄우는 것 없이
options.add_argument('--disable-gpu') # gpu 사용안하겠다 괜한 오류나오니깐
browser = webdriver.Chrome(options=options)
browser.maximize_window()
browser.get(url)
sleep_time = 1
# 스크롤 높이 가져옴
last_height = browser.execute_script("return document.body.scrollHeight")
while True:
# 끝까지 스크롤 내리기
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
# 대기
time.sleep(sleep_time)
# 스크롤 내린 후 스크롤 높이 다시 가져옴
new_height = browser.execute_script("return document.body.scrollHeight")
if new_height == last_height:
break
last_height = new_height
그럴경우에는 이렇게 하면된다.
이 이후 크롤링을 계속하면되겠다..
하지만 유튜브의 댓글의 경우

browser.execute_script("return document.body.scrollHeight")
스크롤의 정보가 변했음에도 불구하고 위의 명령어가 같은 정보를 반환했다.
그래서 찾은해결책이
from selenium.webdriver.common.keys import Keys
for i in range(300)
browser.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
time.sleep(0.5)
페이지다운을 누르는 것이다.
하지만 이방법은 끝에 도달하지않아도 페이지다운을 누르는 것을 멈추고
끝에 도달했음에도 페이지다운을 누르는 문제점이 있어 시간적으로 비효율적이다.
유튜브 페이지에서 페이지의 스크롤 정보를 가져오는 것을 막아 놓아서 방법을 찾지못했다.
chim_coments = []
url = 'https://www.youtube.com/watch?v=hnanNlDbsE4'
options = webdriver.ChromeOptions()
options.add_argument('--headless') # 창 새로 띄우는 것 없이
options.add_argument('--disable-gpu') # gpu 사용안하겠다 괜한 오류나오니깐
browser = webdriver.Chrome(options=options)
browser.maximize_window()
browser.get(url)
time.sleep(3)
for i in range(300):
browser.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
time.sleep(0.5)
soup = BeautifulSoup(browser.page_source,'lxml')
titles = soup.find_all('yt-formatted-string', attrs = {'id':'content-text'})
titles
for title in tqdm(titles):
comment = title.get_text()
chim_coments.append(comment)
침착맨 유튜브의 댓글을 크롤링한 코드이다.
혹시 나와같은 상황이라면 도움이되었으면 좋겠다.
'웹크롤링' 카테고리의 다른 글
[웹크롤링] 해외사이트 프록시 우회 (2) | 2022.04.14 |
---|---|
[ 웹크롤링 ] 셀레니움 설치, 동적 크롤링 - bs4, requests로 안되는 페이지 크롤링하기 (0) | 2021.08.25 |
[ 웹크롤링 ] 카카오api를 사용하여 지오코딩하기 위경도가져오기 (0) | 2021.08.24 |
[ 웹크롤링 ] header 크롤링 서버거부 user-agent (0) | 2021.08.23 |
[ 웹크롤링 ] 공공 API이용하기 공휴일 정보 가져오기 (3) | 2021.08.23 |