DevSSOM

파이썬 크롤링 - 간단한 실습 : 네이트 판 댓글 수집 본문

Python/크롤링

파이썬 크롤링 - 간단한 실습 : 네이트 판 댓글 수집

데브쏨 2021. 6. 25. 01:41
반응형

커뮤니티 댓글 수집하기

커뮤니티 댓글을 수집하여 출력해보기. 댓글 영역의 텍스트 데이터만 출력.

사용 URL 주소 :https://pann.nate.com/talk/350939697

 

우리집 댕댕이

털 긴게 더 이쁘죠 ㅎㅎ

pann.nate.com

출력 예시

댓글 1
댓글 2

  • \t 문자는 탭 문자. 이번 실습에서 크롤링한 데이터를 그대로 출력하면 읽기 어려울 수 있음.
  • replace()를 하기 전에 추출한 값을 print() 해보면 대체해야 하는 특정 값을 확인 할 수 있음.
  • 어떤 문자열 변수 text가 있을 때, 아래처럼 작성하면 탭 문자와 개행 문자를 제거한 text 변수를 출력할 수 있음.
text.replace("\t", "").replace("\n", "")

 

import requests
from bs4 import BeautifulSoup

def crawling(soup) :
    # soup 객체에서 추출해야 하는 정보를 찾고 반환
    
    


def main() :
    custom_header = {
        'referer' : 'https://pann.nate.com/',
        'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    url = "https://pann.nate.com/talk/350939697"
    req = requests.get(url, headers = custom_header)
    soup = BeautifulSoup(req.text, "html.parser")

    # crawling 함수의 결과를 출력
    print(crawling(soup))


if __name__ == "__main__" :
    main()

 

 

>>>

 

크롬 개발자 도구에서 네이트 판 댓글을 클릭 후, 해당 HTML 확인. <dd class="usertxt"> 태그에 속한다는 걸 알았음.

 

def crawling(soup) :
    # soup 객체에서 추출해야 하는 정보를 찾고 반환
    dd_list = soup.find_all("dd", class_="usertxt")
    
    for dd in dd_list :
        print(dd.get_text())

근데 이렇게 하면, 댓글들 정렬이 이상해. 탭과 줄바꿈 때문에 정신없음. 이걸 가지런하게 정렬해주기 위해서 text.replace() 활용.

 

def crawling(soup) :
    # soup 객체에서 추출해야 하는 정보를 찾고 반환
    dd_list = soup.find_all("dd", class_="usertxt")
    
    for dd in dd_list :
        print(dd.get_text().replace("\t","").replace("\n",""))

 

최종 코드

import requests
from bs4 import BeautifulSoup

def crawling(soup) :
    # soup 객체에서 추출해야 하는 정보를 찾고 반환
    result = []
    
    dd_list = soup.find_all("dd", class_="usertxt")
    
    for dd in dd_list :
        result.append(dd.get_text().replace("\t","").replace("\n",""))
    
    return result
    
    
def main() :
    custom_header = {
        'referer' : 'https://pann.nate.com/',
        'user-agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
    }
    url = "https://pann.nate.com/talk/350939697"
    req = requests.get(url, headers = custom_header)
    soup = BeautifulSoup(req.text, "html.parser")

    # crawling 함수의 결과를 출력
    print(crawling(soup))


if __name__ == "__main__" :
    main()

 

728x90
반응형
댓글