본문 바로가기

DATA/Python

[python] selenium으로 네이버 기사 스크래핑

'토트넘'을 네이버 뉴스에서 검색하여 5페이지를 selenium으로 스크래핑하겠습니다.

스크래핑할 것들은 기사 제목, 기사 미리보기 내용, 기사 이미지 입니다.

 

📌 설치 모듈

pip install selenium

 

수집 로직은 beautifulsoup4로 스크래핑 했던 방식과 같습니다! 아래 링크는 자세한 과정이 설명 되어 있습니다.

참고하실 분들은 참고해주세요

 

[python] beautifulsoup 네이버 기사 크롤링

'토트넘'을 네이버 뉴스에서 검색하여 5페이지를 beautifulsoup으로 크롤링하겠습니다. 크롤링할 것들은 기사 제목, 기사 미리보기 내용, 기사 이미지 입니다. 📌 설치 모듈 pip install beautifulsoup4 pip

puddle-of-devstory.tistory.com

 

 

저는 css_selector를 이용하여 스크래핑하였습니다.

 

 

그리고 이미지 링크를 css_selector만을 이용하여 가져왔을 때 빈 값이 나왔습니다.

개발자 모드에서 코드를 보니 이미지가 src 속성 값으로 들어가 있습니다.

 

 

 

이럴 때는 부모 클래스를 적어주고 get_attribute 를 이용하여 속성 값을 가져올 수 있습니다. 

 

 

driver.find_element_by_css_selector("a.dsc_thumb > img").get_attribute("src")

 

전체 코드는 다음과 같습니다.

 

driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()))
title = []
article = []
img = []

# 5페이지 반복 수집
for i in range(5):
    url = 'https://search.naver.com/search.naver?
    where=news&sm=tab_pge&query=%ED%86%A0%ED%8A%B8%EB%84%98&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=30
    &mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start='+str(i*10+1)
    driver.get(url)

    # 한 페이지 내에 실린 기사 개수 만큼 크롤링
    for j in range(len(driver.find_elements_by_css_selector("a.news_tit"))):   
            title.append(driver.find_elements_by_css_selector("a.news_tit")[j].text)
            article.append(driver.find_elements_by_css_selector("a.api_txt_lines.dsc_txt_wrap")[j].text) 
            # 이미지는 속성값이므로 get_attribute 사용
            img.append(driver.find_elements_by_css_selector("a.dsc_thumb > img")[j].get_attribute("src"))
            time.sleep(2)
            
driver.quit() # 드라이버 종료

df = pd.DataFrame()
df['title'] = title
df['article'] = article
df['img'] = img
df