셀레니움을 이용한 파이썬 크롤링이 궁금합니다.

조회수 5338회

셀레니움을 이용해 네이버 뉴스의 댓글을 불러오고자 합니다. 현재 파이썬 3.4를 사용중이며 윈도우 8.1 64bit 입니다.

이미지 현재 네이버 뉴스의 댓글은 "더보기"라는 창을 눌러야만 댓글들을 더 볼수 있으며 그 전에는 그냥 20개만을 보여줄뿐입니다. 저는 셀레니움을 이용해서 "더보기"를 5번 실행 후에 총 댓글들을 불러오고자 합니다.

from bs4 import BeautifulSoup from

selenium import webdriver

driver=webdriver.Chrome("C:\Users\kimty\Desktop\chromedriver.exe")

driver.get('http://news.naver.com/main/ranking/read.nhn?mid=etc&sid1=111&rankingType=popular_day&oid=214&aid=0000661050&date=20160820&type=2&rankingSectionId=101&rankingSeq=1&m_view=1')

html=driver.page_source

soup=BeautifulSoup(html,"html.parser")

typing=soup.find_all("span",{"class":"u_cbox_contents"})

print(typing)

driver.execute_script("u_cbox_page_more")

sleep(5)

제가 짠 코드는 이렇습니다. 에러가 생겨서 하나하나 실행해보니

driver.execute_script("u_cbox_page_more")

이 부분에서

Traceback (most recent call last):
File "", line 1, in driver.execute_script("u_cbox_page_more") File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 465, in execute_script 'args': converted_args})['value'] File "C:\Python34\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 236, in execute self.error_handler.check_response(response) File "C:\Python34\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 192, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: u_cbox_page_more is not defined
(Session info: chrome=52.0.2743.116)
(Driver info: chromedriver=2.23.409699 (49b0fa931cda1caad0ae15b7d1b68004acd05129),platform=Windows NT 6.3.9600 x86_64)

이런 에러가 뜨더군요

그래서 요소 검사를 다시 해보니 이미지

이런 형태인데 자바 스크립트 형태가 아닌 경우 어떻게 해야 제가 원하는 대로 가능할까요??

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • JavaScript로 HTML 속성을 이용하여 어떻게 해당 태그를 검색하는가에 대한 질문같은데요, 해당 경우에는 JavaScript의 DOM 기능을 활용하여 기능을 수행할 수 있습니다.

    // 해당 class를 가진 태그는 아래의 함수로 얻어올 수 있습니다.
    // 유의할 점은, "Elements"라는 이름에 걸맞게 배열을 리턴합니다.
    var btns = document.getElementsByClassName('u_cbox_page_more');
    // 함수 이름대로 같은 class를 가진 HTML 태그들이 많음을 가정합니다.
    // 그 중 첫 번째 태그를 가져옵니다.
    var btn = btns[0];
    // 해당 버튼에 click 이벤트를 호출합니다.
    btn.click();
    

    이런 느낌의 스크립트를 실행하면 되실 것 같습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)