본문 바로가기

Data Project/Mini Project1

네이버 금융 웹페이지 스크래핑 0201업종스크래핑-목록

이번 건 비교적 easy...

업종별 시세 페이지 스크래핑은 1) 목록 수집 2) 각 업종의 내용 수집, 두 단계로 진행한다.
이번 포스팅에서는 목록 수집만!

2-1. 업종별 시세 페이지 스크래핑-목록

우선 업종별 시세 페이지 스크래핑을 위한 파이썬 코드를 짜보자. 순서는 다음과 같다.

1. 필요 라이브러리 로드
2. 수집할 페이지 URL 설정
3. requests 요청
4. table 정보 확인 + 간단한 전처리
5. BeautifulSoup으로 html parsing
6. 업종별(목록) 링크 태그 찾기 + 목록별 링크 번호만 가져오기
7. 업종 목록 데이터프레임 완성 + 파일 저장하기. 

1) 필요 라이브러리 로드

import time
import pandas as pd
import numpy as np
import requests
from bs4 import BeautifulSoup as bs

데이터 스크래핑에 필요한 라이브러리를 모조리 로드해준다. 

2) 수집할 페이지 URL 설정

url = "https://finance.naver.com/sise/sise_group.naver?type=upjong"
print(url)

네이버 증권 업종별 시세 페이지 URL을 url 변수에 넣어준다.

3) requests 요청

검사(F12) > Network > Doc

업종별 링크 정보 수집을 위해 requests 요청을 하자. 해당 페이지는 GET 방식을 사용하고 있음을 알 수 있다. 따라서,

response = requests.get(url)
response.status_code # 200이 출력되면 ok

4) table 정보 확인 + 간단한 전처리

table = pd.read_html(response.text)[0]
table

pd.read_html로 업종별 시세 테이블 정보를 읽어온다. 확인해보면

이렇게 컬럼도 요상하고, 결측치도 보인다. 간단한 전처리가 필요하므로

# 결측치 제거
table = table.dropna()

# 컬럼명 변경
table.columns = ['업종명', '전일대비', '전일대비 등락현황 전체', '전일대비 등락현황 상승', '전일대비 등락현황 보합', '전일대비 등락현황 하락', '등락그래프']

table.head(10)

위 코드 실행 결과는 다음과 같다.

결측치 제거도 되었고, 컬럼명도 잘 변경되었다. 그런데 결측치를 제거한 탓에 인덱스값이 중간중간 비어 보인다. 따라서 인덱스도 초기화 해주자.

# 인덱스 초기화
table = table.reset_index(drop=True)

table.head(10)

이렇게 간단한 전처리를 마친다.

5) BeautifulSoup으로 html parsing

html 태그 파싱을 위해 BeautifulSoup을 활용한다.

html = bs(response.text)
html

대충 이런식 ㅇㅇ

6) 업종별(목록) 링크 태그 찾기 + 목록별 링크 번호만 가져오기

마우스 오른쪽 > copy > copy seletor

.select로 업종명 링크 태그만 선택하여 변수에 담아준다.

# #contentarea_left > table > tbody > tr:nth-child(4) > td:nth-child(1) > a

upjong_a_list = html.select("#contentarea_left > table > tr > td > a")
upjong_a_list

.select로 가져온 링크 태그를 슬라이싱하여 no만 가져와 리스트로 만든다.

# 업종별 링크 번호만 가져와서 리스트로 만들기, split
upjong_a_list_no = []
upjong_a_list_no = [a["href"].split("=")[-1] for a in upjong_a_list]
upjong_a_list_no

7) 업종 목록 데이터프레임 완성 + 파일 저장하기

위에서 만든 링크 번호 리스트를 기존 데이터프레임(table)에 추가한다.

# 업종별 링크 번호 데이터 프레임에 추가 : 컬럼 "링크번호"
table["링크번호"] = upjong_a_list_no
table.head(10)

맞게 들어갔는지 확인!

# 업종명과 링크 번호가 맞는지 확인
no = 0
upjong_url = "https://finance.naver.com/sise/sise_group_detail.naver?type=upjong&no="
print(table["업종명"][no])
print(upjong_url + table["링크번호"][no])

저장까지 하면 목록 수집은 끝!

# 저장할 파일명
file_name = "naver-upjong-list.csv"

# CSV 파일로 저장하기
table.to_csv(file_name, index=False)

# 저장한 파일 확인
pd.read_csv(file_name)

 

다음 포스팅 : 업종별 시세 페이지 내용 스크래핑