python/data crawling

7. selenium 모듈 (2) - 다음뉴스 웹사이트 크롤링

Abokadoh 2023. 2. 15. 15:02

우선 selenium webdriver ,BeautifulSoup 을 불러주고, chromedriver경로를 지정해주자.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

from bs4 import BeautifulSoup

import time

chrome_driver = '/Users/choehyeogjae/Desktop/chromedriver'

driver = webdriver.Chrome(chrome_driver)

 

driver 객체chrome를 다루는 webdriver chrome_driver를 사용할 것이다.

 

 

크롤링해 볼 사이트인 다음뉴스의 웹사이트 주소를 url에 객체화해주자.

url = 'https://news.v.daum.net/v/20190728165812603'

 

webdriver에 해당 url을 get함수를 사용해 요청한다.

driver.get(url)

src = driver.page_source

webdriver.Chrome에는 page_source라는 속성이 있다. 이것 또한 tap키를 누르면 다양한 종류를 확인할 수 있음. page_source로 가져온 htmlBeautifulSoup으로 변환해주자. print(soup)

 

soup = BeautifulSoup(src)
print(soup)

 

크롤링에 성공했다.

 

이제 크롤링한 html코드에서 댓글에 대한 count만을 추출해보자.

 

일단 댓글 숫자가 어느 태그에 위치하는 지 확인해보자.

span tagnum_cmt class에 있다.

 

💡 html tagclass에서 공백이 있으면 class가 2개 이상인 것이다. 즉, commentscountspan tagnum_cmt, alex-count-area class에 있다!

 

tag값과 class값을 알게 됐으니 이제 find, find_all, select, select_one 함수를 사용해서 태그를 찾아보자. 단일값인 것을 알고 있으니 findselect_one을 쓰면 좋을 것이다. 난 select_one를 사용하겠다.

soup.select_one('span.num_cmt')

결과는 select_one을 사용했기 때문에 단일값의 tag형태의 str이 반환된다.

그리고 이 태그에서 텍스트만을 추출해보자.

soup.select_one('span.num_cmt').text

soup.select_one('spna.num_cmt').get_text()

끝!