오늘은 파이썬을 활용하여 네이버 증권의 종목토론방의 글들을 크롤링해보겠습니다.
데이터 탐색 & 크롤링 작업
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 |
- 이러한 형식으로 데이터를 수천개 추출하여 조회수가 일정 횟수 이상이며 공감/비공감도 페이지 당 최고 횟수를 기록한 값들만 필터링하여 의미 있는 값들을 도출하면 됩니다.
반응형
'Programming > Python' 카테고리의 다른 글
[Python] 랜덤(Random) 모듈 (0) | 2022.10.11 |
---|---|
[Python] PyDictionary 영어사전, 번역기 (2) | 2022.07.24 |
파이썬 국내 주식시장 영업일/휴장일 구분하기 (0) | 2022.04.09 |
파이썬 브라우저 구글 코랩 소개 및 사용법 (0) | 2022.03.18 |
파이썬 리스트 중복 제거 (방법 및 예시) (0) | 2021.11.29 |
댓글