d여기에서 네이버 증권 주식 금융 데이터 크롤링 하는법 간단정리!! (1편 실시간 주가 정보) – 네이버 증권 크롤링 주제에 대한 세부정보를 참조하세요
안녕하세요. 초보자를 위한 쉬운 IT 교육 컨텐츠를 만드는 스타트코딩입니다. 이번 영상에서는 네이버 증권 크롤링 하는 방법을 알려드리겠습니다. 주식을 하다 보면 엑셀에 관심 종목이나 현재 가지고 있는 종목을 정리하는 데요. 실시간 주가 정보는 계속 바뀌기 때문에 수작업으로 바꾸어 줘야 합니다. 이는 매우 불편하고 시간이 걸리는 작업이죠. 웹크롤링을 이용하면 클릭 한번에 모든 종목의 실시간 주가 정보를 가지고 올 수 있습니다. 네이버 금융 크롤링을 따라 하면서 자동화의 묘미를 느껴보세요.
해당 강의는 인프런에서 무료로 수강할 수 있습니다 ^^ https://inf.run/SSPf
네이버 증권 크롤링 주제에 대한 자세한 내용은 여기를 참조하세요.
[파이썬 크롤링]네이버 주식 시가 총액 코스피전체 항목 출력하기
이전 포스팅에서는 네이버 주식에서 시갈총액의 첫번째 화면에 있는 항목과 가격에 대해서 출력을 하는 방법에 대해서 포스팅을 해봤습니다. 갑자기 …
주제와 관련된 더 많은 사진을 참조하십시오 네이버 증권 주식 금융 데이터 크롤링 하는법 간단정리!! (1편 실시간 주가 정보). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 네이버 증권 크롤링
Author: 스타트코딩
Views: 조회수 4,989회
Likes: 좋아요 62개
Date Published: 2021. 9. 23.
Video Url link: https://www.youtube.com/watch?v=QlgQ_CCCWXM
[파이썬 크롤링]네이버 주식 시가 총액 코스피전체 항목 출력하기
반응형
[파이썬 크롤링]네이버 주식 시가 총액 코스피전체 항목 출력하기
[파이썬 크롤링]네이버 주식 시가 총액 코스피전체 항목 출력하기
이전 포스팅에서는 네이버 주식에서 시갈총액의 첫번째 화면에 있는 항목과 가격에 대해서 출력을 하는 방법에 대해서 포스팅을 해봤습니다. 갑자기 이번에는 전체 항목에 대해서 출력을 해볼까라는 생각을 하게되었습니다. 일단, 약간의 규칙성을 찾기 위해서 화면 하단에 있는 부분을 번호로 되어 있는 부분들을 마우스를 올려놓아봤습니다.
여기에서 requests.get를 이용하여 불러올 부분에 대해서 약간의 변경이 불가피합니다. 그래서 위에서 보이는 부분들에 대해서 함수 처리를 하고, 주소 부분에 대해서만 반복적으로 사용할 수 있게 변경을 해보도록 하겠습니다.
import requests from bs4 import BeautifulSoup def return_value(address): res = requests.get(address) soup = BeautifulSoup(res.content, ‘html.parser’) section = soup.find(‘tbody’) items = section.find_all(‘tr’, onmouseover=”mouseOver(this)”) for item in items: basic_info = item.get_text() sinfo = basic_info.split(”
“) print(“\t” + sinfo[1] + “\t\t” + sinfo[2] + “\t\t\t” + sinfo[3]) baseaddress = ‘https://finance.naver.com/sise/sise_market_sum.naver?&page=’ for i in range(1,35): return_value(baseaddress+str(i))
위와 같이 변경을 하였습니다. 위에서 보이는 기본 주소는 페이지에 상관없이 동일한 부분을 넣어두고, 실제 페이지 변경될 때마다 변경되는 부분에 대해서 반영될 수 있게 하여 이 부분을 함수의 인자로 주어서 동일한 효과를 얻을 수 있게 작업을 하였습니다. 위의 코드를 실행화면 다음과 같은 화면이 나타나는 것을 알 수 있습니다.
date는 “YYYYmmdd” (ex.20210210) 양식으로 넣어주셔야 하고 market은 “KOSPI”, “KOSDAQ”, “KONEX”를 넣어주시거나
모두 수집하고 싶다면 “ALL”을 넣어주시면 됩니다. (전부 수집할 경우 시간이 오래 걸리기 때문에 권장하지 않습니다)
CSS Selector 수집하기
# 수집할 증권 데이터의 셀렉터 저장 per_selector = “#_per” pbr_selector = “#_pbr” dividend_yield_selector = “#_dvr”
일단 크롤링을 위해서 css selector를 사용할 것이므로 수집 방법을 알려드리겠습니다.
1. 네이버 금융 페이지에서 아무 주식명을 검색합니다.
2. f12를 눌러 개발자 도구를 엽니다.
3. 요소를 선택하기 1번 표시된 부분을 클릭합니다.
4. 사이트 내에서 수집하고자 하는 데이터 위에 마우스를 클릭합니다.
(간단한 수집을 위해 PER, PBR, 배당수익률의 숫자 부분을 클릭하시길 권장합니다)
5. html코드에서 파란색 줄이 쳐진 곳을 마우스 우클릭합니다.
6. copy -> copy selector를 클릭합니다.
자 이제 html 태그를 사용해 수집하려는 데이터의 css selector를 가져오는 데 성공했습니다!
이제 css selector를 사용하여 크롤링을 할 수 있습니다.
아무 곳에나 붙여 넣기를 해보면 “#_per” 이런 식으로 수집된 것을 볼 수 있습니다.
(#은 id를 의미합니다)
크롤링을 사용하여 증권 데이터 수집하기
float변환을 위해 따옴표 제거# 모듈 가져오기 import requests from bs4 import BeautifulSoup # 크롤링을 사용하여 증권 데이터 수집하기 pers = [] pbrs = [] dividend_yields = [] for ticker in ticker_list: url = f”https://finance.naver.com/item/main.nhn?code={ticker}” html = requests.get(url, headers={‘User-agent’:’Mozilla/5.0′}) soup = BeautifulSoup(html.text, “lxml”) per = soup.select(per_selector) pbr = soup.select(pbr_selector) dividend_yield = soup.select(dividend_yield_selector) if not per: # 리스트가 비어있을 경우 None으로 변환 per = [None] for pe in per: if pe != None: per_text = pe.text per_text = per_text.replace(“,”, “”) # float변환을 위해 따옴표 제거 pers.append(float(per_text)) else: per_text = pe pers.append(per_text) if not pbr: # 리스트가 비어있을 경우 None으로 변환 pbr = [None] for pb in pbr: if pb != None: pbr_text = pb.text pbr_text = pbr_text.replace(“,”, “”) # float변환을 위해 따옴표 제거 pbrs.append(float(pbr_text)) else: pbr_text = pb pbrs.append(pbr_text) if not dividend_yield: # 리스트가 비어있을 경우 None으로 변환 dividend_yield = [None] for d in dividend_yield: if d != None: dividend_yield_text = d.text dividend_yield_text = dividend_yield_text.replace(“,”, “”) # float변환을 위해 따옴표 제거 dividend_yields.append(float(dividend_yield_text)) else: dividend_yield_text = d dividend_yields.append(dividend_yield_text)
코스피 상장 주식의 PER, PBR, 배당률 데이터를 수집합니다.
기본적인 크롤링 모듈인 request와 beautifulsoup을 사용하여 크롤링합니다.
웹사이트 캡처 사진의 url을 보면 빨간 밑줄 쳐진 곳에 주식의 티커가 들어가는 것을 알 수 있습니다.
따라서 url 변수에 f스트링을 사용하여 각 주식의 웹사이트에 접속할 수 있도록 해줍니다.
headers={‘User-agent’:’Mozilla/5.0′}를 넣은 이유는 수집하는 주체가 봇이 아닌 유저임을 알리기 위해서입니다.
(위 코드를 삽입하지 않을 경우 봇으로 인지해 크롤링을 할 수 없습니다.)
soup = BeautifulSoup(html.text, “lxml”)
“html.parser”보다 “lxml”으로 파싱 하는 것이 더 빠릅니다.
단 “lxml”은 추가 설치가 필요하므로 작동이 안 될 경우 “html.parser”을 삽입해 주십시오.
데이터가 수집될 때 리스트 형식으로 수집되므로 for문으로 리스트를 풀어주고 append로 새로운 리스트에 담아줍니다.
(예를 들어 per = soup.select(per_selector)에서 per은 per데이터 한 개가 들어있는 리스트입니다)
수집하려는 데이터가 비어있는 경우에는 None으로 변환해줍니다.
(배당금을 주지 않는 주식의 경우 배당률 데이터가 비어있습니다)
코랩으로 위 코드를 돌릴 경우 약 10분 ~ 15분 정도 소요됩니다.
pers, pbrs, dividend_yields를 출력해보면 데이터가 잘 수집된 것을 볼 수 있습니다.
수집한 데이터를 모아 보기 좋게 시각화를 하고, 데이터프레임에 정리하고 엑셀로 변환하는 작업은 다음에 진행해 보도록 하겠습니다.
https://bigdata-doctrine.tistory.com/4
파이썬으로 네이버 금융 뉴스 크롤링하기 (코드
이번 포스트에서는 네이버 금융 사이트에서 파이썬으로 주식 뉴스를 크롤링 해보겠습니다. 과도한 크롤링은 문제가 될 수 있으니 자제해 주시기 바랍니다.
사용하는 파이썬 라이브러리는 다음과 같습니다.
pip install requests
pip install beautifulsoup4
그럼 네이버 금융 사이트로 가보겠습니다. 여기서 뉴스 탭을 누르면 이렇게 뉴스 포털이 뜹니다.
https://finance.naver.com/news/
소소한 일상 및 업무TIP 다루기 :: [크롤링기초] 네이버 주식 현재가 가져오기
728×90
네이버 주식 정보 페이지에서 내가 원하는 정보만 가져오기 위해서 먼저 크롬브라우저에서 F12키를 눌러서 html 소스코드 보기를 한다.
아래 번호 순서대로 해보자. 먼저 1번을 눌러주면 마우스를 가져가는 곳에 해당되는 html 코드를 반환해준다.
2번 위치에 마우스를 가져가면 해당되는 태그 정보를 알려준다.
이제 파이썬 소스 코드를 작성하면서 중간 중간에 찍어보면서 원하는 결과를 추출하면 된다.
# 네이버 주식정보 가져오기 # BeautifulSoup은 HTML 과 XML 파일로부터 데이터를 수집하는 라이브러리 # pip install bs4 # pip install requests # pip install fake-useragent from bs4 import BeautifulSoup import requests from fake_useragent import UserAgent from datetime import datetime import time def getCode(company_code): # company_code : 기업코드 url = “https://finance.naver.com/item/main.nhn?code=” + company_code ua = UserAgent() # 헤더 정보 (http 해킷 헤더에 브라우저 정보가 존재하는지 확인할 경우) headers = { ‘User-agent’ : ua.ie } response = requests.get(url, headers = headers) soup = BeautifulSoup(response.content, “html.parser” ) return soup def getPrice(company_code): soup = getCode(company_code) # no_today = soup.find(“p”, {“class”: “no_today”}) no_today = soup.select_one( ‘p.no_today’ ) # print(no_today) # 출력을 한 다음에 더 세부적인 정보를 파싱처리한다. # blind = no_today.find(“span”, {“class” : “blind”}) blind = no_today.select_one( ‘span.blind’ ) return blind.text # 증시 기업코드 company_codes = [ “030200” , “005930” , “068270” , “035720” ] if __name__ = = ‘__main__’ : now = datetime.now() print ( “-” * 60 ) print (now) print ( “-” * 60 ) for elm in company_codes: nowPrice = getPrice(elm) print (nowPrice) print ( “-” * 60 )
결과 출력 화면
샘플 소스코드
crawling_10.py 0.00MB
파이썬 초간단 주식 정보 크롤링 예제 : BeautifulSoup(bs4) 이용
반응형
파이썬 네이버 주식 정보 크롤링 예시
이번 포스팅에서는 BeautifulSoup 모듈을 활용하여
매우 간단하게 네이버 주식 사이트의 정보를 크롤링해보는
예제를 다루어보도록 하겠습니다.
먼저 네이버 금융의 국내증시 사이트에 접속을 해보도록 하겠습니다.
금융 정보에 대한 굉장히 많은 정보가 있는데요.
여기서는 이 중 현재 코스피의 수치와 등락률을 대상으로
크롤링을 진행해보는 예제를 다루어보도록 하겠습니다.
참고로, 여기서는 크롬 브라우저를 기준으로 설명을 진행해보도록 하겠습니다.
(다른 브라우저들도 방법은 대체로 비슷합니다.)
개발자 도구를 열어 크롤링 준비
크롤링을 위하여 F12를 눌러 개발자 도구를 켠 뒤, 아래 그림의 파란색으로 표시한 부분의
화살표 모양 버튼을 클릭하여 크롤링 준비를 마치겠습니다.
BeautifulSoup 웹사이트 크롤링 준비
먼저 코스피 수치의 데이터를 가져오기 위하여 해당 값의 HTML태그를 분석해야 합니다.
아래 그림처럼 원하는 위치에 커서를 갖다대면, 해당 위치의 태그가 나타나게 됩니다.
두 가지 방법으로 코스피의 수치인 2967.82라는 값(변동 가능)에 접근이 가능합니다.
첫 번째는 span 클래스의 num 이름을 가지는 객체를 기준으로 삼는 것이고,
두 번째는 KOSPI.now라는 id 이름을 기준으로 삼는 것입니다.
두 방법의 예시를 보여드리기 전에, bs4 라이브러리에서 해당 웹페이지의 태그를
가져와 정보를 추출할 준비를 하도록 하겠습니다.
import urllib.request from bs4 import BeautifulSoup # 네이버 금융 국내증시 메인 사이트 주소 url = “https://finance.naver.com/sise/” # 웹사이트 정보 요청 page = urllib.request.urlopen(url) # 해당 페이지는 cp949 방식의 인코딩 사용 html = page.read().decode(‘cp949’) # html.parser로 html 형식 태그에서 데이터 추출 준비 soup = BeautifulSoup(html, ‘html.parser’)
다른 웹사이트에서는 ‘utf8’, ‘euc-kr’ 등의 인코딩 방식을 사용하는 경우도 있어,
이 부분은 시도를 여러번 해보시는 것이 좋습니다.
반응형
클래스 이름 기준 크롤링 방법 : select 메소드
span 클래스의 num 객체라는 정보를 사용한 경우는
select 메소드를 사용하여 가져올 수 있습니다.
아래처럼 코드를 작성하고 결과를 확인해보겠습니다.
soup.select(‘span.num’) # 결과 [@code@, 2,965.88, 987.57, 393.71]
span.num이라는 이름을 input으로 넣어주시면 됩니다.
여기서는 span 클래스의 num 객체가 총 4개가 존재하는데요.
이 중 2번째(1번 위치) 값이 저희가 추출을 원하는 값이기에,
인덱싱을 진행한 뒤, string 속성을 가져와 원하는 정보까지 도달해보겠습니다.
이후, 문자열 메소드로 천의 자리 수 콤마를 제거하고 float 자료형 변환까지 가능합니다.