당신은 주제를 찾고 있습니까 “네이버 금융 크롤링 – 네이버 증권 주식 금융 데이터 크롤링 하는법 간단정리!! (1편 실시간 주가 정보)“? 다음 카테고리의 웹사이트 you.maxfit.vn 에서 귀하의 모든 질문에 답변해 드립니다: you.maxfit.vn/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 스타트코딩 이(가) 작성한 기사에는 조회수 4,989회 및 좋아요 62개 개의 좋아요가 있습니다.
네이버 금융 크롤링 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 네이버 증권 주식 금융 데이터 크롤링 하는법 간단정리!! (1편 실시간 주가 정보) – 네이버 금융 크롤링 주제에 대한 세부정보를 참조하세요
안녕하세요. 초보자를 위한 쉬운 IT 교육 컨텐츠를 만드는 스타트코딩입니다.
이번 영상에서는 네이버 증권 크롤링 하는 방법을 알려드리겠습니다.
주식을 하다 보면 엑셀에 관심 종목이나
현재 가지고 있는 종목을 정리하는 데요.
실시간 주가 정보는 계속 바뀌기 때문에 수작업으로 바꾸어 줘야 합니다.
이는 매우 불편하고 시간이 걸리는 작업이죠.
웹크롤링을 이용하면 클릭 한번에 모든 종목의 실시간 주가 정보를 가지고 올 수 있습니다.
네이버 금융 크롤링을 따라 하면서 자동화의 묘미를 느껴보세요.
해당 강의는 인프런에서 무료로 수강할 수 있습니다 ^^
https://inf.run/SSPf
네이버 금융 크롤링 주제에 대한 자세한 내용은 여기를 참조하세요.
파이썬으로 네이버 금융 뉴스 크롤링하기 (코드/영상 포함)
이번 포스트에서는 네이버 금융 사이트에서 파이썬으로 주식 뉴스를 크롤링 해보겠습니다. 과도한 크롤링은 문제가 될 수 있으니 자제해 주시기 바랍니다.
Source: contents.premium.naver.com
Date Published: 3/30/2022
View: 5964
[무작정 크롤링 #1] 파이썬으로 네이버 금융에서 주가와 거래량 …
주식 투자자라면 반드시 보는 사이트가 네이버 금융이다. 아래 그래프는 투자자 예탁금과 네이버 금융 검색량의 추이인데, 상관계수가 0.88로 매우 …
Source: popooly.tistory.com
Date Published: 4/11/2021
View: 8687
[Python] (1)네이버 금융 증권 데이터(PER,PBR,배당률) 수집
https://finance.naver.com/ 네이버 금융 웹사이트 오늘은 크롤링을 사용하여 네이버 금융에서 증권 데이터를 수집해보도록 하겠습니다.
Source: bigdata-doctrine.tistory.com
Date Published: 10/3/2022
View: 3979
[파이썬 크롤링]네이버 주식 시가 총액 코스피 50위까지 순위 …
그래서 이번 포스팅에서는 많은 사람들이 사용하는 네이버 금융에 있는 정보를 바탕으로 원하는 정보를 취합하는 형태에 대해서 이야기를 해보고자 합니다 …
Source: appia.tistory.com
Date Published: 5/4/2022
View: 7761
[python&웹 크롤링] 11. 네이버 금융 정보 가져오기
BeautifulSoup을 사용하여 네이버 금융( finance.naver.com/sise/ ) 인기종목 top10, 상한가종목 top10을 가져와보겠다. section2 환경에서 atom 실행 …
Source: jun-itworld.tistory.com
Date Published: 10/28/2021
View: 9097
웹 크롤링 – 네이버 금융 기사 가져오기(정적 페이지 응용) – Haries
웹 크롤링 – 네이버 금융 기사 가져오기(정적 페이지 응용) · 1. 명확한 주소 찾아내기. 일단 가운데 뉴스공시에 한국콜마에 대한 기사가 있습니다. · 2. 웹 …
Source: haries.tistory.com
Date Published: 8/15/2022
View: 5978
네이버 금융 크롤링 in R – 춤추는초코칩
검색된 내용을 살펴보니, 네이버가 2021년 1월 7일 저녁부터 네이버 금융에서 웹 크롤러의 스크레이핑을 차단하기 시작했다고 합니다. 그리고 본문에 웹 …
Source: stat-and-news-by-daragon9.tistory.com
Date Published: 10/21/2022
View: 9931
[파이썬 웹 크롤링] 네이버 금융 코스피지수 크롤링 – KPU CE
파이썬으로 네이버 금융 크롤링 ; import bs4 #뷰티풀수프를 이용하기 위한 라이브러리 ; from urllib.request import ; # url의 소스코드를 긁어오는 기능의 …
Source: kpumangyou.tistory.com
Date Published: 8/11/2022
View: 3231
주제와 관련된 이미지 네이버 금융 크롤링
주제와 관련된 더 많은 사진을 참조하십시오 네이버 증권 주식 금융 데이터 크롤링 하는법 간단정리!! (1편 실시간 주가 정보). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 네이버 금융 크롤링
- Author: 스타트코딩
- Views: 조회수 4,989회
- Likes: 좋아요 62개
- Date Published: 2021. 9. 23.
- Video Url link: https://www.youtube.com/watch?v=QlgQ_CCCWXM
파이썬으로 네이버 금융 뉴스 크롤링하기 (코드
이번 포스트에서는 네이버 금융 사이트에서 파이썬으로 주식 뉴스를 크롤링 해보겠습니다. 과도한 크롤링은 문제가 될 수 있으니 자제해 주시기 바랍니다.
사용하는 파이썬 라이브러리는 다음과 같습니다.
pip install requests
pip install beautifulsoup4
그럼 네이버 금융 사이트로 가보겠습니다. 여기서 뉴스 탭을 누르면 이렇게 뉴스 포털이 뜹니다.
https://finance.naver.com/news/
[무작정 크롤링 #1] 파이썬으로 네이버 금융에서 주가와 거래량 크롤링하기 1. 주가 정보 URL 접속하기
반응형
주식 투자자라면 반드시 보는 사이트가 네이버 금융이다.
아래 그래프는 투자자 예탁금과 네이버 금융 검색량의 추이인데, 상관계수가 0.88로 매우 높다.
투자자 예탁금이 많아지는 것은 주식 투자자가 많아진다고 추정할 수 있으므로, 많은 투자자가 네이버 금융을 이용한다고 볼 수 있다.
투자자 예탁금 vs 네이버 금융 검색량 차트
네이버 금융에서 가장 많이 이용하는 것 중 하나는 개별 종목의 차트일 것이다.
그런데 인터넷의 기본 원리만 알면 이 차트에서 개별 종목의 주가와 검색량을 매우 빠르게 수집할 수 있다.
네이버 증권에서 NAVER(035420)의 주가 차트
인터넷은 기본적으로 정보가 저장되어 있는 서버에서 우리가 원하는 정보를 불러오는 것이다.
즉, 네이버 금융에서 개별 종목의 차트를 본다는 것은 해당 종목의 주가가 저장되어있는 서버에서 주가 정보를 불러와서 차트의 형태로 표현하는 것이다. (관련 내용을 쉽게 알고 싶으면 생활코딩님의 아래 영상을 참고하면 된다)
따라서 우리는 주가 정보가 어디에 저장되어 있는지만 알면 개별종목의 주가를 빠르게 수집할 수 있다.
그렇다면 주가 정보가 어디에 저장되어 있는지는 어떻게 알 수 있을까?
주가 정보가 저장되어있는 서버에서 주가 정보를 불러오는 데이터의 흐름은 개발자도구의 Network에서 확인할 수 있다.
크롬, 익스플로러 등 사용하는 인터넷에서 F12를 누르거나 ‘마우스 우측>검사’를 클릭하면 개발자도구가 활성화된다.
개발자도구의 Network를 보면 아래 URL이 반복적으로 나오는 것을 볼 수 있는데, 해당 URL에 접속하면 [날짜, 시가, 고가, 저가, 종가, 거래량, 외국인소진율]이 저장되어 있는 것을 확인할 수 있다.
https://api.finance.naver.com/siseJson.naver?symbol=035420&requestType=1&startTime=20200728&endTime=20211004&timeframe=day
NAVER(035420)의 주가 차트에서 주가 정보 가져오기
네이버 금융은 주가 정보가 저장되어있는 URL을 직관적으로 설정해두어서, 조금만 만져보면 원하는 종목의 주가 정보에 접근할 수 있다.
https://api.finance.naver.com/siseJson.naver? symbol=035420 &requestType=1& startTime=20200728 & endTime=20211004 & timeframe=day
위 URL은 크게 symbol, startTime, endTime, timeframe을 조절하여 원하는 주가 정보를 확인할 수 있는데, 각각의 의미는 아래와 같다.
1. symbol : 주식 종목 코드
2. startTime : 검색 시작일자
3. endTime : 검색 종료일자
4. timeframe : 검색 시간 간격 (일: day, 주: week, 월: month)
예를 들어 삼성전자(005930)의 주가정보를 1990년 1월부터 2021년 10월까지 월간격으로 확인하고 싶으면 아래 URL로 수정하여 접속하면 된다.
https://api.finance.naver.com/siseJson.naver? symbol=005930 &requestType=1& startTime=19900101 & endTime=20211004 & timeframe=month
네이버 금융에서 주가와 거래량을 크롤링하기 위한 사전 작업은 모두 완료했다.
다음 글에서는 본격적으로 파이썬을 이용해서 주가와 거래량을 수집하는 코드를 작성해보겠다.
[Python] (1)네이버 금융 증권 데이터(PER,PBR,배당률) 수집 : 크롤링
https://finance.naver.com/ 네이버 금융 웹사이트
오늘은 크롤링을 사용하여 네이버 금융에서 증권 데이터를 수집해보도록 하겠습니다.
두 번째 포스팅에 프로그램을 실행해 볼 수 있도록 코랩 링크 달아놓겠습니다.
코딩에 대한 지식이 없는 분들도 단순히 프로그램을 실행하여 코스피 증권 데이터를 엑셀로 가져가실 수 있습니다.
리스트에 코스피에 상장된 주식들의 티커 저장하기
# 모듈 가져오기 !pip install pykrx from pykrx import stock # 오늘날 코스피에 상장되어 있는 주식의 이름과 티커 수집 today = datetime.today().strftime(“%Y%m%d”) ticker_list = stock.get_market_ticker_list(date = today, market=”KOSPI”) symbol_list = [] for ticker in ticker_list: symbol = stock.get_market_ticker_name(ticker) symbol_list.append(symbol) # 코스피 상장 주식의 개수 확인 print(len(ticker_list)) print(len(symbol_list))
pykrx라이브러리에 저장되어 있는 코스피 상장 주식들을 리스트에 저장합니다.
get_market_ticker_list 메서드를 사용해 상장된 주식의 티커를 수집하고
get_market_ticker_name 메소드를 사용해 상장된 주식의 이름을 수집합니다.
주식의 이름을 담은 리스트는 symbol_list에, 주식의 티커를 담은 리스트는 ticker_list에 저장합니다.
stock.get_market_ticker_list(date = today, market=”KOSPI”)
부분에서 date와 market을 자신이 원하는 대로 변경할 수 있습니다.
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
[파이썬 크롤링]네이버 주식 시가 총액 코스피 50위까지 순위 항목 가격 출력하기(bs4, requests)
반응형
[파이썬 크롤링]네이버 주식 시가 총액 코스피 50위까지 순위 항목 가격 출력하기(bs4, requests) [파이썬 크롤링]네이버 주식 시가 총액 코스피 50위까지 순위 항목 가격 출력하기(bs4, requests)크롤링을 하는 이유는 가장 쉽게 인터넷에 있는 취합하는 것이라고 생각합니다. 그 정보를 이용하여 사용자마다 각기 다양한 목적으로 사용할 수 있습니다. 그래서 이번 포스팅에서는 많은 사람들이 사용하는 네이버 금융에 있는 정보를 바탕으로 원하는 정보를 취합하는 형태에 대해서 이야기를 해보고자 합니다. 그 중에서 가장 쉽게 시가 총액 기준으로 표시해주는 부분이 있는데 이 부분에 첫페이지에 있는 정보를 출력해보도록 하겠습니다.
먼저, 다음에 있는 사이트를 클릭해보도록 하겠습니다.
https://finance.naver.com/sise/sise_market_sum.naver
아마도 다음과 같은 화면이 나타날 것입니다. (날짜에 따라서, 순서가 약간 다를 수 있습니다.) 그럼 빨간색으로 되어 있는 부분위주로 출력을 해보도록 하겠습니다.
네이버 금융 – 시가총액 화면
먼저, 크롤링을 하기 전에 어떤 부분을 대상을 잡고 크롤링을 해야할지에 대해서 먼저 살펴보겠습니다. 크롬에서는 각 항목들이 HTML에서 어떻게 보이는지에 대해서 확인할 수 있습니다. 관련해서는 다음 링크 부분을 검토해주시길 바랍니다.
[윈도우10 Windows10]크롬(Chrome) 웹사이트 HTML 코드 확인하기일단, 보이는 부분과 같이 tbody부분을 보니, 관련된 데이터를 1차적으로 구별할 수 있을 것 같습니다. 따라서, find 명령어를 통해서 tbody 부분을 전체 파싱을 할 예정입니다.
네이버금융 html부분에서의 데이터 확인
그럼 각 항목들을 살펴보도록 하겠습니다. 그리고 추가적으로 각항목들을 검토해보니 다음 태그와 속성를 바탕으로 정보를 추출할 수 있겠다는 생각을 합니다.
‘tr’, onmouseover=”mouseOver(this)”
이 부분을 바탕으로 find_all()메소드를 통해서 각 항목들을 선별해보도록 하겠습니다.
네이버 금융 각 항목 확인
여기에서 추가로 다음과 같은 부분을 검토할 수 있었습니다. 먼저, 다음과 같은 코드를 바탕으로 디버깅 모드로 실행을 해보았습니다.
import requests from bs4 import BeautifulSoup res = requests.get(‘https://finance.naver.com/sise/sise_market_sum.naver’) 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() print(basic_info)
그 결과 다음과 같은 결과가 나타나는 것을 보았습니다.
1 삼성전자 77,400 200 +0.26% 100 4,620,612 5,969,783 51.93 16,991,216 16.30 9.99
여기에서 보이는 부분들을 행간 문자들로 구별할 수 있겠다는 생각이 들었습니다. 그래서 다음과 같은 split 명령어를 이용하여 저 부분들을 나누어보기로 하였습니다. 그래서 다음과 같은 부분들을 추가하였습니다.
sinfo = basic_info.split(”
“)
위의 코드에서의 행간(
)문자를 이용하여 split을 하니 다음과 같은 결과가 나타나는 것을 볼 수 있었습니다.
split 결과
그럼 여기에서 원하는 정보를 바탕으로 사용하면 됩니다. 그래서 다음과 같은 전체 코드를 작성하실 수 있습니다.
import requests from bs4 import BeautifulSoup res = requests.get(‘https://finance.naver.com/sise/sise_market_sum.naver’) 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])
위의 코드를 실행하면 다음과 같은 결과가 나타나는 것을 알 수 있습니다.
1 삼성전자 77,400 2 SK하이닉스 105,500 3 NAVER 400,000 4 삼성바이오로직스 920,000 5 삼성전자우 71,800 6 LG화학 760,000 7 카카오 115,000 8 삼성SDI 731,000 9 현대차 208,500 10 셀트리온 284,500 11 기아 84,200 12 카카오뱅크 66,400 13 POSCO 346,500 14 현대모비스 263,000 15 크래프톤 500,000 16 삼성물산 130,500 17 LG전자 140,500 18 SK이노베이션 245,500 19 SK텔레콤 310,000 20 KB금융 51,500 21 LG생활건강 1,337,000 22 신한지주 38,950 23 SK바이오사이언스 259,000 24 SK 271,500 25 SK아이이테크놀로지 220,000 26 한국전력 24,200 27 HMM 37,850 28 LG 95,300 29 삼성생명 71,800 30 하나금융지주 44,300 31 삼성전기 177,000 32 엔씨소프트 584,000 33 삼성에스디에스 165,500 34 포스코케미칼 158,000 35 대한항공 34,200 36 S-Oil 104,000 37 KT&G 80,900 38 아모레퍼시픽 189,500 39 두산중공업 21,100 40 삼성화재 227,500 41 하이브 270,500 42 넷마블 121,000 43 고려아연 510,000 44 롯데케미칼 258,500 45 현대중공업 99,100 46 한온시스템 16,300 47 SK바이오팜 109,500 48 KT 32,500 49 우리금융지주 11,100 50 한화솔루션 42,100
이와 같은 방식으로 코스피 부분에 대한 시가총액 1~50위의 순위와 항목, 가격등에 대한 정보를 출력할 수 있습니다.
[파이썬 크롤링]네이버 스포츠 추천 뉴스 크롤링 하여 제목과 링크주소출력하기 (bs4, requests)이번 포스팅에서는 [파이썬 크롤링]네이버 주식 시가 총액 코스피 50위까지 순위 항목 가격 출력하기(bs4, requests)라는 주제로 간단히 포스팅을 해봤습니다. 혹 궁금하신 점이나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다.
반응형
[python&웹 크롤링] 11. 네이버 금융 정보 가져오기
BeautifulSoup을 사용하여 네이버 금융( finance.naver.com/sise/ ) 인기종목 top10, 상한가종목 top10을 가져와보겠다.
section2 환경에서 atom 실행시켜보자.
먼저, 인기종목 top10의 구조를 보자.
네이버 금융 홈페이지 인기검색 top10 종목 분석
인기검색 종목의 html을 보면 간단하다.
id값이 popularItemList 의 자식들이 li로 감싸져있는것을 확인할 수 있다.
BeautifulSoup의 select 함수를 사용하여 리스트 값으로 가져 올 수 있는것이 느껴진다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from bs4 import BeautifulSoup import urllib.request as req import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = ‘utf-8’ ) sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = ‘utf-8’ ) url = ‘https://finance.naver.com/sise/’ #네이버 금융 url 주소 res = req.urlopen(url).read().decode( ‘cp949’ ) #utf-8 : 한글 깨짐, unicode_escape : 한글 깨짐, cp949로 변환해야한다. soup = BeautifulSoup(res, “html.parser” ) top10 = soup.select( ‘#popularItemList > li > a’ ) #선택자 id인 popularItemList에 존재하는 li값들의 a 태그들만 리스트 형태로 담는다. print (top10) #리스트 형태로 담긴 정보들 for i, e in enumerate(top10, 1 ) : print ( “순위 : {}, 이름 : {}” . format (i, e.string)) Colored by Color Scripter cs
download2-7-1.py
#popularItemList > li > a 를 통해 a태그의 값을 top10에 담아서 출력해보면, 리스트 형태로 볼 수 있다.
top10을 for문을 통해 a태그의 string값만 출력해보면 아래와 같이 검색 순위 리스트를 확인할 수 있다.
검색 순위 확인
다음으로는 상한가 top10 종목을 확인해 보겠다.
네이버 금융 홈페이지 인기검색 top10 종목 분석
html 코드를 보게되면 siselist_tab_0인 아이디 내 tr값들이 정렬되어 있는데,
tr 태그의 개수가 top10 개수보다 더 많이있다.
top10 영역 이외의 tr들도 함께 묶여있기 때문인데, 이는 분기처리를 통해 top10 값만 가져올 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from bs4 import BeautifulSoup import urllib.request as req import sys import io sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = ‘utf-8’ ) sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = ‘utf-8’ ) url = “http://finance.naver.com/sise/” #네이버 금융 url 주소 res = req.urlopen(url).read().decode( ‘cp949’ ) #utf-8 : 한글 깨짐, unicode_escape : 한글 깨짐, cp949로 변환해야한다. soup = BeautifulSoup(res, “html.parser” ) top10 = soup.select( “#siselist_tab_0 > tr” ) i = 1 for e in top10 : if e.find( “a” ) is not None : #tr 중 a태그가 존재하지 않는 html은 제외 print (i,e.select_one( “.tltle” ).string) i + = 1 Colored by Color Scripter cs
download2-7-2.py
siselist_tab_0 > tr 를 통해 tr값들을 담은 후, tr값에 a태그가 존재하지 않는 경우는 모두 제외시키고 출력했다.
상한가 top10 순위 확인
웹 크롤링 – 네이버 금융 기사 가져오기(정적 페이지 응용)
오늘은 네이버 금융 기사를 가져오려고 합니다. 그 중에서 한국콜마라는 기업에 대한 뉴스기사를 가져올 거에요.
며칠 전에 교양 수업에 한국콜마 대표님이 오셔서 강의하신 기억이 나서, 어떤 기업인지 궁금하니까 크롤링 해보겠습니다. ㅋ 참고로 코딩은 주피터로 하는 것을 추천드리며, 크롤링은 기본적으로 코랩에서는 작동하지 않는 점 참고하시면 될 것 같습니다.
주소 : finance.naver.com/item/main.nhn?code=161890
오늘도 떨어졌군요… 아무튼 시작해보겠습니다.
1. 명확한 주소 찾아내기
일단 가운데 뉴스공시에 한국콜마에 대한 기사가 있습니다.
여기를 클릭해보면 주소가 finance.naver.com/item/news.nhn?code=161890가 뜹니다.
그런데 이게 우리가 찾는 뉴스공시 주소일까요? 좀 더 스크롤 하면
이렇게 1~10페이지를 클릭 할 수 있는데, 2페이지를 눌러보고 주소를 다시 확인해보세요!
finance.naver.com/item/news.nhn?code=161890 으로
1페이지와 2페이지 주소가 똑같은 것을 확인할 수 있습니다. 이러면 크롤링을 제대로 할 수가 없습니다.
따라서 우리는 저 뉴스 공시만 보여주는 페이지를 찾아야 합니다.
찾는 방법은 간단합니다.
1) 크롬에서 F12를 누르기
2) network 클릭
3)Name에 대충 가운데를 보면
news_news.nhn?으로 시작하는게 있는데 더블클릭을 하시면 됩니다.
4) 뉴스만 있는 페이지 확인
정말 뉴스만 있는 페이지를 확인할 수 있습니다. 이제 이 페이지의 주소는
finance.naver.com/item/news_news.nhn?code=161890&page=&sm=title_entity_id.basic&clusterId=입니다.
근데 자세히 보시면 page=&sm이라고 되어있는데, 뭔가 찝찝합니다. 이거는 2페이지로 넘어갔다가 다시 1페이지로 오면 finance.naver.com/item/news_news.nhn?code=161890&page=1&sm=title_entity_id.basic&clusterId= 로 살짝 바뀐 것을 확인할 수 있는데, 이 상태로 크롤링을 할 것입니다. page=1을 하는 이유는 나중에 2페이지 이상 한 번에 크롤링을 할 때, 주소에서 저 숫자 1만 바꿔주는 코딩을 해주면 되기 때문에 일부로 page=1을 나타나게 했습니다.
2. 웹 페이지 html가져오기
from bs4 import BeautifulSoup import requests url = “https://finance.naver.com/item/news_news.nhn?code=161890&page=1&sm=title_entity_id.basic&clusterId=” html = requests.get(url).content bs = BeautifulSoup(html,’html.parser’) bs
이 페이지 전체의 html을 잘 가져오는 모습을 볼 수 있습니다. 대충 보니 td안에 기사 제목이 하나씩 들어가 있는 것을 확인할 수 있습니다.
all_td = bs.findAll(‘td’, {‘class’ : ‘title’})
1페이지의 기사들이 td class = ‘title’안에 다 들어가 있는 것을 확인할 수 있네요
for td in all_td: print(td.find(‘a’).get_text())
1페이지에 있는 기사를 다 가져왔습니다. 깔끔하네요. 여기서 만족할 수는 없죠. 2페이지 이상 가져와보겠습니다.
3. 2페이지 이상 기사 긁어오기
from bs4 import BeautifulSoup import requests titles = [] for page_num in range(1,11): url_front = “https://finance.naver.com/item/news_news.nhn?code=161890&page=” url_last = “&sm=title_entity_id.basic&clusterId=” url = url_front + str(page_num) + url_last html = requests.get(url).content bs = BeautifulSoup(html,’html.parser’) all_tr = bs.findAll(‘td’, {‘class’ : ‘title’}) for tr in all_tr: titles.append(tr.find(‘a’).get_text())
1~10페이지 기사를 다 긁어왔습니다.
네이버 금융의 경우 내가 코딩한 결과만으로 사이트에 접속해서 데이터를 가져올 수 있었는데요. 어떤 사이트는 자신이 사람임을 밝혀줘야 사이트 접속을 허용해줘서 우리가 크롤링 할 수 있습니다. 대표적으로 멜론사이트가 그렇습니다. 다음 포스팅에서는 웹사이트에게 내가 사람인 것을 보여주는 headers와 쿠키를 이용하는 방법을 알려드리겠습니다.
네이버 금융 크롤링 in R
반응형
https://stat-and-news-by-daragon9.tistory.com/107
## 작성일: 2022.02.23
## 작성자: 춤추는초코칩
## 네이버 금융 크롤링 in R
지난 포스트 후 4년이 지났습니다. 댓글 중에 네이버에서 막은 거 같다는 의견이 있어 확인해 봤습니다.
우선 “네이버 금융 크롤링”으로 검색하니 연관 검색어에 “막힘”, “불법”, “차단”이 연관검색어로 검색이 됩니다.
https://github.com/INVESTAR/StockAnalysisInPython
검색된 내용을 살펴보니, 네이버가 2021년 1월 7일 저녁부터 네이버 금융에서 웹 크롤러의 스크레이핑을 차단하기 시작했다고 합니다. 그리고 본문에 웹 스크레이핑을 하려면 웹 브라우저 정보(User-Agent)를 보내야 한다고 합니다.
그래서, 웹 브라우저 정보(User-Agent)에 대해 알아봤습니다.
https://blog.naver.com/kiddwannabe/221185808375
네이버 서버에서 봇으로 인지하고 원하는 정보를 제공하지 않은 것 같습니다. 여기서, User-Agent 용어가 등장합니다. User-Agent란 사용자의 소프트웨어 식별 정보를 담고 있습니다. R에서 User-Agent를 설정해서 자료를 조회해보겠습니다. 다행히, httr이라는 패키지에 User-Agent를 설정할 수 있는 방법이 있을 거 같습니다.
https://stackoverflow.com/questions/66975138/change-user-agent-when-using-rvestread-html
우선, 나의 User-Agent 정보를 확인합니다. 브라우저에 아래 주소를 입력해서 확인합니다.
http://httpbin.org/user-agent
저의 경우 이렇게 조회됩니다. 이제 코딩하고 조회가 되는지 확인해보겠습니다.
# 패키지 인스톨 # install.packages(“rvest”) # install.packages(“R6”) # install.packages(“httr”) # 라이브러리 불러오기 library(“rvest”) library(“R6”) library(“httr”) # user_agent 확인URL: http://httpbin.org/user-agent # user_agent 설정하기 ua <- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36" # naver 금융 사이트 설정 url <- 'http://finance.naver.com/item/sise_day.nhn?code=005930&page=1' # 자료가져오기(기존코드) url %>% read_html() %>% html_nodes(‘.type2’) # 자료가져오기(신규코드) price <- GET(url, user_agent(ua)) %>% read_html() %>% html_nodes(‘.type2’) %>% html_table # dataframe으로 변환하기 stock_price <- data.frame(price) stock_price 정상적으로 자료가 조회되는 것을 확인할 수 있습니다. 코드도 기존에 비해 훨씬 깔끔해져서 마음에 듭니다. 크롤링에 도움이 되셨으면 좋겠습니다. 반응형
[파이썬 웹 크롤링] 네이버 금융 코스피지수 크롤링
반응형
파이썬으로 네이버 금융 크롤링
1. 사이트 접속
https://finance.naver.com/sise/sise_index.nhn?code=KPI200 에 접속한 후
일별 시세표를 확인하다.
2. url 구하기
일별 시세 표의 오른쪽 마우스 클릭으로 프레임 소스 코드보기를 클릭한다. 그리고 해당 url에서 앞에 view-source를 제외한 https://finance.naver.com/sise/sise_index_day.nhn?code=KPI200 가 우리가 구하고싶은 표의 url이다. 직접들어가보면 해당표만 있는 것을 볼 수 있다. 여기서 페이지를 이동하면 url뒤에 page=2 이런식으로 표기 되기때문에 https://finance.naver.com/sise/sise_index_day.nhn?code=KPI200&page=2 이런식의 페이지까지 표기된것이 표의 정확한 url이다.
3. 해당 url 소스코드 파이썬으로 가져오기
import bs4 #뷰티풀수프를 이용하기 위한 라이브러리 from urllib.request import urlopen # url의 소스코드를 긁어오는 기능의 파이브러리 code = ‘KPI200′ page = 1 url = https://finance.naver.com/sise/sise_index_day.nhn?code={code}&page={page}.format(code = code,page = page) source = urlopen(url).read() # 소스코드 긁어오기 source = bs4.BeatifulSoup(source,’lxml’) # 뷰티풀수프의 객체로 바꾸어준다, 뷰티풀수프는 소스코드를 파이썬에서 쉽게 작업하기 위한 객체 print(source.prettify()) # 불러온 소스코드 확인, prettify() = 불러온 데이터를 예쁘게 태그별로 보여준다.
4. 날짜,가격 소스코드에서 찾기
다시 네이버 금융 페이지에서 표에서 아무 날짜에 오른쪽 마우스를 클릭해서 검사를 클릭한다.
그러면 위와 같이 굵은 밑줄로 표시가된다. 이것이 해당 날짜의 태그이다.
여기서 알수있는 사실은 태그는 ‘td’이고 클래스는 ‘date’라는 것이다. 이것을 가지고 파이썬에서 찾아보면 다음과 같다.
date = source.find_all(‘td’,’date’)
find_all은 소스코드에서 찾고자하는 태그들을 찾아 리스트 형식으로 반환한다. 뒤에 인자는 클래스도 써줄 수 있다.
이러면 태그가 td이고 클래스가 date인 태그들이 리스트형식으로 주어진다.
가격도 마찬가지로 데이터를 가지고 오면 다음과 같다.
price = source.find_all(‘td’,’number_1′)
하지만 가격은 이렇게 가져오면 문제가 발생한다. 리스트를 확인해보면 알겠지만 체결가,등락률,거래량,거래대금까지 리스트에 포함되어있다. 그러므로 체결가는 0,4,8순이므로 후에 작업을 해줘야한다.
작업은 다음과 같다.
def date_format(d): d = str(d).replace(‘-‘,’.’) # 년,월,일 분리 yyyy = int(d.split(‘.’)[0]) mm = int(d.split(‘.’)[1]) dd = int(d.split(‘.’)[2]) this_date = dt.date(yyyy,mm,dd) #date타입으로 바꿈 return this_date for n in range(len(date)): if date[n].text.split(‘.’)[0].isdigit(): #isdigit : 알파벳인지 확인, 알파벳이면 True반환 this_date = date[n].text this_date = date_format(this_date) this_close = price[n*4].text # 0,4,8..인덱스 순으로 체결가 값이 들어 있으므로 this_close = float(this_close) # 소수점이므로 형변환을 해준다.
text는 참고로 태그의 내용을 알려주는 함수이다.
여기까지 page1에 대한 날짜와 체결가를 크롤링한 것이다. 이제 마지막 페이지까지 크롤링하는 방법을 알아보자.
5. 마지막 페이지 구하기
https://finance.naver.com/sise/sise_index_day.nhn?code=KPI200 에 다시 들어가서 ‘맨뒤’에 오른쪽 마우스 클릭 후 검사를 클릭해서 소스코드를 본다.
다음과 같이 맨뒤 페이지가 잡히게된다. 우리가 원하는것은 640이라는 값이다. 이것을 위와 같은 방법으로 뽑아내면 다음과 같다.
paging = source.find_all(‘table’)[1].find_all(‘tr’)[0].find_all(‘td’)[11].find_all(‘a’)[0] paging = paging[‘href’] paging = paging.split(‘&’)[1] paging = paging.split(‘=’)[1] paging = int(paging)
이러면 paging에 640의 값이 잡히게 된다.
1~5의 방법을 종합해서 함수로 연결하면 다음과 같다.
완성된 코드
historical_prices = [] def date_format(d): d = str(d).replace(‘-‘,’.’) yyyy = int(d.split(‘.’)[0]) mm = int(d.split(‘.’)[1]) dd = int(d.split(‘.’)[2]) this_date = dt.date(yyyy,mm,dd) return this_date def historical_index_naver(index_cd,page_n,last_page): naver_index = ‘https://finance.naver.com/sise/sise_index_day.nhn?code={code}&page={page}’.format(code = index_cd,page = page_n) source = urlopen(naver_index).read() source = bs4.BeautifulSoup(source,’lxml’) date = source.find_all(‘td’,’date’) price = source.find_all(‘td’,’number_1′) for n in range(len(date)): if date[n].text.split(‘.’)[0].isdigit(): #isdigit : 알파벳인지 확인, 알파벳이면 True반환 this_date = date[n].text this_date = date_format(this_date) this_close = price[n*4].text this_close = float(this_close) line = [] line.append(this_date) line.append(this_close) historical_prices.append(line) if last_page == 0: last_page = source.find(‘td’,’pgRR’).find(‘a’)[‘href’] last_page = last_page.split(‘&’)[1] last_page = last_page.split(‘=’)[1] last_page = int(last_page) if page_n < last_page: page_n = page_n+1 historical_index_naver(index_cd,page_n,last_page) historical_index_naver('KPI200',1,0) 반응형
키워드에 대한 정보 네이버 금융 크롤링
다음은 Bing에서 네이버 금융 크롤링 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 네이버 증권 주식 금융 데이터 크롤링 하는법 간단정리!! (1편 실시간 주가 정보)
- 네이버 금융 크롤링
- 네이버 증권 크롤링
- 네이버 주식 크롤링
- 주식 데이터 크롤링
- 파이썬 주식 크롤링
- 실시간 주가 크롤링
- 파이썬 네이버 주식 크롤링
- 주가 크롤링
- 주식 정보 크롤링
- 파이썬 주가 크롤링
- 네이버 주가 크롤링
- 파이썬 주식 데이터 크롤링
- 파이썬 네이버 금융 크롤링
- 스타트코딩
- 스타트코딩크롤링
네이버 #증권 #주식 #금융 #데이터 #크롤링 #하는법 #간단정리!! #(1편 #실시간 #주가 #정보)
YouTube에서 네이버 금융 크롤링 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 네이버 증권 주식 금융 데이터 크롤링 하는법 간단정리!! (1편 실시간 주가 정보) | 네이버 금융 크롤링, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.