-
[BeautifunSoup] 파이썬으로 네이버페이 증권 종목토론실 데이터 크롤링하기 - 2Python/크롤링 2025. 2. 25. 09:54반응형
네이버페이 증권 종목토론실 데이터 크롤링 - 2
이전에 네이버페이 증권 종목토론실 데이터 크롤링 을 통해서 종목토론실 데이터를 판다스 데이터프레임(Pandas DataFrame) 형태로 받아오는 방법을 간단하게 알아보았습니다. 이 데이터를 그대로 사용해도 좋지만, 본문 데이터를 함께 사용하고 싶은 분들이라면 각 게시글의 URL 정보를 함께 크롤링하는게 좋습니다. 그래서, 이번에는 파이썬(Python)과 뷰티풀수프(BeautifulSoup)를 사용하는 것은 같지만, 게시글 URL 및 본문 데이터를 함께 크롤링할 수 있도록 코드를 변경해 보겠습니다.
데이터 크롤링
이번에는 URL 정보를 받아오기 위해, html 문서의 a 태그 매개변수를 탐색해야 합니다. 그래서, pandas.read_html() 함수를 사용한 파싱에 더해서, URL이 필요한 행에 한해 BeautifulSoup.find_all() 함수를 활용해 table 태그를 찾은 뒤, 반복문으로 각 정보에 접근해야 합니다.
이 방법 역시, 판다스를 이용한 방법과 같이 두 번째 표가 종목 토론실 정보이므로 리턴된 리스트의 1번을 인덱싱해 줍니다.In [1]:# Import pacakge import requests from bs4 import BeautifulSoup import pandas as pd CODE = '005930' PAGE = 1 URL = f"https://finance.naver.com/item/board.naver?code={CODE}&page={PAGE}" # 접속 정보를 입력 HEADERS = { 'Referer': 'https://finance.naver.com/item/board.naver?code=005930', "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } response = requests.get(URL, headers=HEADERS) soup = BeautifulSoup(response.text, 'html.parser') table = soup.find_all('table')[1]
html로 표를 표시하는 방법
표를 표시하는 html 태그인 table 태그는 tr, td로 구성되어 있습니다. 이 구조를 알게 된다면, 손쉽게 크롤링에 이용할 반복문을 작성할 수 있습니다.
- tr: table row의 약자로, 한 열을 의미합니다.
- td: table data의 약자로, 하나의 셀을 의미합니다.
-> 이 방향으로 한 줄이 tr 태그로 묶여 있습니다 1 이 셀 하나가 td 태그로 묶여 있습니다 2 이 셀도 td 태그입니다 만약 위 표가 table이라는 변수로 저장되어 있고, 이 표의 첫 번째 행(->, 1, 2)을 출력하려고 한다면 아래 코드를 적어서 해결할 수 있습니다.
for _row in table.find_all('tr'): print(_row.find('td').text)
a 태그의 매개변수에 접근하는 방법
특정 URL에 접속하기 위해서 흔히 사용되는 html 태그로는 a 태그가 있습니다. a 태그는 href라는 매개변수에 접속할 URL을 기록하는데요, 예를 들어서 https://www.google.com 으로 접속하도록 하고 싶다면, 아래와 같은 태그를 작성하면 됩니다.
<a href="https://www.google.com">이 글을 클릭하면 구글로 이동합니다</a>
이제, 위 방법을 활용해서 네이버페이 증권 종목토론실의 게시글 URL 데이터를 크롤링해 보겠습니다. 각 열의 정보에서 a 태그가 있다면, 해당 태그의 href 매개변수를 인덱싱해 저장하도록 합니다. 이 때, 기록된 URL은 'https://finance.naver.com' 주소가 생략된 값이므로, 해당 데이터를 추가해 주도록 합니다.
In [2]:links = [] for row in table.find_all("tr")[1:]: # 첫 번째 행(헤더) 제외 a_tag = row.find("a") if a_tag: link = 'https://finance.naver.com' + str(a_tag['href']) else: link = None links.append(link)
이제, 위 데이터를 이용해서 기존 표 데이터에 URL 정보를 더해주도록 하면 됩니다. 기존 판다스 데이터프레임에 URL이라는 이름으로 행을 추가하도록 합니다. URL이 없는 데이터는 결측치(None)으로 입력되도록 코드를 작성했기 때문에, 모든 정보가 결측치인 열만 지워지도록 dropna() 함수에 how='all' 이라는 매개변수를 추가해 주도록 합니다.
In [3]:stock_table = pd.read_html(response.text)[1] stock_table['URL'] = links stock_table = stock_table.iloc[3:].drop('Unnamed: 6',axis=1).dropna(how='all') stock_table.head()
Out[3]:날짜 제목 글쓴이 조회 공감 비공감 URL 0 2025.02.25 09:36 클린봇이 이용자 보호를 위해 숨긴 게시글입니다. shul**** 2 0 0 None 1 2025.02.25 09:36 ㅡ한국 수준은 중국과 얼추비슷 하다 ㅡ ... true**** 2 0 0 https://finance.naver.com/item/board_read.nave... 2 2025.02.25 09:35 낼 엔비디아 실적발표후 쪽박찬다 hohy**** 4 0 0 https://finance.naver.com/item/board_read.nave... 3 2025.02.25 09:35 클린봇이 이용자 보호를 위해 숨긴 게시글입니다. ji****** 4 2 0 None 4 2025.02.25 09:35 윤석열 사형집행 후 토리특식 iuit**** 7 3 0 https://finance.naver.com/item/board_read.nave... 반응형'Python > 크롤링' 카테고리의 다른 글
[BeautifunSoup] 파이썬으로 네이버페이 증권 종목토론실 데이터 크롤링하기 (2) 2025.02.24 [Selenium] 파이썬 셀레니움으로 웹사이트 캡쳐하기 (0) 2024.04.19 [BeautifunSoup] 파이썬으로 구글 뉴스 크롤링해보기 (0) 2024.03.08