본문 바로가기
Python/Django(장고)

[Python/Django] 파이썬 주식 정보(뉴스) 페이지 만들기 - 4. 네이버 금융 홈페이지 크롤링 1

by 깐테 2021. 7. 13.

2021.07.07 - [Python/여러가지] - [Python] 파이썬 크롤링 - BeautifulSoup을 이용한 크롤링

 

[Python] 파이썬 크롤링 - BeautifulSoup을 이용한 크롤링

이번 포스트에서는 파이썬에서 자주 사용되는 BeautifulSoup을 이용한 크롤링을 해보려 한다. 1. 크롤링(Crawling) 무수히 많은 컴퓨터에 분산 저장되어 있는 문서를 수집하여 검색 대상의 색인으로 포

kante-kante.tistory.com

이전에 네이버 뉴스 홈페이지를 크롤링하여 웹에 출력했었는데

이번에는 네이버 금융 페이지에서 일부 종목들을 크롤링하여 웹에 간단하게 출력해보려 한다.

 

 

1. 네이버 인기 검색종목 크롤링

 

 

https://finance.naver.com/

 

네이버 금융

국내 해외 증시 지수, 시장지표, 펀드, 뉴스, 증권사 리서치 등 제공

finance.naver.com

네이버 금융 홈페이지.

 

네이버 금융 홈페이지를 보면 여러 정보들을 한눈에 볼 수 있도록 만들어져 있다.

여기서는 인기 검색 종목 부분을 크롤링 해보도록 하겠다.

 

역시 F12를 눌러 구조를 살펴보면 aside라고 감싸진 부분 속에 tbody 태그 내부에 위치한 모습을 확인할 수 있다.

 

마찬가지로 해당 크롤링 할 부분에 오른쪽 마우스를 눌러 selector를 복사해준다.

 

 

소스코드

#django의 경우에는 views.py 부분에 함수를 정의해주면 된다. 이전 포스트 참조

from bs4 import BeautifulSoup
import requests
import json

# naver finance 인기 검색 종목
urls = 'https://finance.naver.com/'
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"}
res = requests.get(urls,headers=headers)
soups = BeautifulSoup(res.text,'html.parser')

top = soups.select("#container > div.aside > div.group_aside > div.aside_area.aside_popular > table > tbody > tr > th")

toplist = list()
top2 = list()

for tops in top:
    toplist.append(tops.text.strip())

for i in range(len(toplist)):
    comp = top[i].text.strip()

    item_objs={
        'comp':comp,
    }
    top2.append(item_objs)
    
comps = top2

 

받아온 데이터를 리스트에 넣어둔 다음, 이를 호출할 때에는 다시 리스트에서 호출할 수 있도록 만들었다.

 

print문으로 표시해보면

 

역시 잘 표시되는것을 확인할 수 있다.

 

 

이를 다시 django에서 출력해보면

 

 

우측에 잘 표시되는것을 확인할 수 있다.

 

<!-- html 코드. django에서 동작 -->

<div class="p-4 mb-3 bg-light rounded">
    <h4 class="font-bold"><b>주요 거래 top5</b></h4>
    
    <!-- django 템플릿 태그. 위에서 받은 comps정보를 index에 삽입 -->
    {%for index in comps %}
    <td>    
      <p style="font-size:15px;"><b>{{index.comp}}</b></p>
    </td>
    {%endfor%}
    
 </div>

 

다음 포스팅은 좀 더 많은, 다른 정보를 크롤링 해보도록 하겠다.

반응형