본문 바로가기
Programming/Python

파이썬 네이버 종목토론방 크롤링

by 코딩하는 금융인 2022. 6. 4.

오늘은 파이썬을 활용하여 네이버 증권의 종목토론방의 글들을 크롤링해보겠습니다.

 

 데이터 탐색 & 크롤링 작업

1. 웹사이트 탐색하기

▷ 사이트 바로가기 : https://finance.naver.com/item/board.naver?code=066970&page=1

- 크롤링할 때 중요한 점은 url이 특정 규칙으로 이루어져있는지와 해당 html을 면밀히 분석하여 필요한 데이터 값이 들어가 있는 구조를 파악하는 것입니다.

네이버 종목토론실: 엘앤에프

- URL 확인 결과, 끝부분의 code에는 종목코드가 할당되어 있고 page에는 해당 페이지가 몇번째인지 나와 있음

→ 페이지 부분에 숫자를 할당하여 반복문 생성

 

- 일정 이상의 조회수와 공감/비공감수에 따라 게시글을 필터링할 필요성 존재

 

- 날짜/제목/조회수/공감/비공감 Column으로 데이터 추출 (총 5개의 열)

 

2. 파이썬 크롤링 작업

- 크롤링을 할 때, 해당 사이트에서 컴퓨터로 인식해서 데이터 추출을 방해하는 경우가 있기에 User-Agent를 설정해서 사람으로 인식하게 해야 합니다.

- 추후 종목별로 사람들의 반응이 필요로 할 수도 있어 함수화

def NS_users_crawler(codes, page):
    # User-Agent 설정
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'}
    result_df = pd.DataFrame([])

    n_ = 0
    for page in range(1, page):
        n_ += 1
        if (n_ % 10 == 0):
            print('================== Page ' + str(page) + ' is done ==================')
        url = "https://finance.naver.com/item/board.naver?code=%s&page=%s" % (codes, str(page))
        # html → parsing
        html = requests.get(url, headers=headers).content
        # 한글 깨짐 방지 decode
        soup = BeautifulSoup(html.decode('euc-kr', 'replace'), 'html.parser')
        table = soup.find('table', {'class': 'type2'})
        tb = table.select('tbody > tr')

        for i in range(2, len(tb)):
            if len(tb[i].select('td > span')) > 0:
                date = tb[i].select('td > span')[0].text
                title = tb[i].select('td.title > a')[0]['title']
                views = tb[i].select('td > span')[1].text
                pos = tb[i].select('td > strong')[0].text
                neg = tb[i].select('td > strong')[1].text
                table = pd.DataFrame({'날짜': [date], '제목': [title], '조회': [views], '공감': [pos], '비공감': [neg]})
                result_df = result_df.append(table)

    return result_df

 

▣ 데이터 확인하기

data = NS_users_crawler("066970", 3)
data.head(10)

 

날짜 제목 조회 공감 비공감
2022.06.04 17:34 블록딜 할인 물량 11 0 0
2022.06.04 16:40 ◆코이즈는 LG에너지솔루션의 상장과 앞으로 세계최대규모의 양극재 공장에 코이즈의 산화알미늄의 협력관계가 투자자들의 관심이 집중되고 있다. ◆ 41 0 3
2022.06.04 16:37 ◆코이즈 허접시총 세력이 마음만 먹으면 시총을 10바퀴를 돌려 버린다. ◆코이즈 거래량 핵폭발 ◆100년된 주식격언 주가를 보지 말고 거래량 28 0 2
2022.06.04 16:18 대구의 보석 141 7 2
2022.06.04 15:55 담주 94 4 1
2022.06.04 15:53 유로형 궁금한데요,,,, 76 1 2
2022.06.04 14:40 ■■■■변동성 확대구간. 102 1 8
2022.06.04 15:44 3개월 누적으로 개인만 매도함 57 3 0
2022.06.04 14:16 안티들은주말도없냐 90 3 2
2022.06.04 14:02 화요일장상승예감 256 5 2

- 이러한 형식으로 데이터를 수천개 추출하여 조회수가 일정 횟수 이상이며 공감/비공감도 페이지 당 최고 횟수를 기록한 값들만 필터링하여 의미 있는 값들을 도출하면 됩니다.

반응형

댓글