inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[신규 개정판] 이것이 진짜 크롤링이다 - 기본편

CSS 선택자 copy + 네이버 미국증시

361

곽수민

작성한 질문수 2

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
안녕하세요, 강의 정말 잘 들었습니다.
 
네이버 증권에서 다른 수치를 불러오는 중 막혔습니다.
현재가, 종목명, 종목코드 같은 경우에는 알려주신 것을 응용하면 돼서 전혀 문제가 없었습니다.
하지만 '52주 최고' 수치를 불러들이지 못하고 있습니다.
그 수치만을 위한 class나 id... 별명? 그런 것이 없습니다.
 
https://finance.naver.com/item/sise.naver?code=005930
 
이 부분입니다.
<span class = "tah p11">이 있지만, 다른 수치에도 같은 tah p11 class가 있고,
그 위의 <td class = "num">도 똑같습니다.
다른 질답에서 보면 copy를 사용하라고 하셨는데 그러면 다른 엉뚱한 수치가 떠요...
 
 
https://m.stock.naver.com/index.html#/worldstock/stock/V/total
 
반면 미국증시의 경우에는 더 처참한데 현재가도 이름도 프린트해보면 NONE이라고 뜹니다.
왜 이러는걸까요...
야후 파이낸스로도 셀레늄이 잘 안돼서 네이버로 하고 싶었는데 야후 파이낸스로 해보는 것이 나을까요?
 
tickers = ['APPL.O', 'GOOGL.O']

for ticker in tickers:                                          

    url = f"https://m.stock.naver.com/index.html#/worldstock/stock/{ticker}/total" 
    response = requests.get(url)                                 
    html = response.text                                           
    soup = BeautifulSoup(html, 'html.parser')        
    price = soup.select_one("#content > div.GraphMain_mainGraph__3npcJ.UNCHANGED > div.GraphMain_frameGraph__19k0w > div.GraphMain_stockInfo__2-Uf6 > strong")                   
    name = soup.select_one("#content > div.GraphMain_mainGraph__3npcJ.UNCHANGED > div.GraphMain_frameGraph__19k0w > div.GraphMain_stockInfo__2-Uf6 > span.GraphMain_name__3XazJ")              
   
    print(name, price)
 
 
 
 
 
도와주세요!!
 

크롤링 css선택자 웹-크롤링 python

답변 3

3

스타트코딩

미국증시는 제가 수업에서 다룬 예제가 아니라서

답변 드리기 어렵지만

내친김에 같이 알려 드리겠습니다 ^^

 

1. 문제의 원인

말씀해 주신 미국증시 사이트는 정보를 "동적으로" 가져오고 있습니다.

페이지가 로딩되고나서 서버에 데이터를 가져오고 있죠.

그래서 None이 뜨는 겁니다. 

 

2 . 해결방법

1) 이때 초보자의 경우 셀레니움을 이용합니다.

(대부분 크롤링 됩니다)

 

2) requests를 사용하고 싶다면 서버와 통신하는 api를 찾아야 하는데요.

자세히 알려드리기엔 내용이 많고 조금 어렵습니다. ㅎㅎ

(개발자 도구의 Network 탭을 분석합니다) 

소스 코드를 첨부해 드리겠으니 활용해 보세요 :)

 

import requests
import json

# naver stock api 활용해서 52주 최고가 확인하기

url = 'https://api.stock.naver.com/stock/AAPL.O/basic'
response = requests.get(url)                                 
data = json.loads(response.text)
print(data['stockItemTotalInfos'][8]['key']) 
print(data['stockItemTotalInfos'][8]['value']) # 8번째 요소에 52주 최고가 

 

 

0

곽수민

감사합니다 한번 해볼게요!! 

2

스타트코딩

안녕하세요.

class 나 id 가 없어서 당황하셨군요!

 

저는 보통 세가지 방법을 사용하는데요.

 

1. 개발자도구의 copy 기능을 이용한다

2. 셀렉터를 자세하게 짠다 (nth-child이용)

3. 반복문과 조건문을 이용해서 찾는다 (노가다)

 

52주 최고가는 1번을 이용하면 잘 불러와지네요 코드 첨부해 드릴테니 확인해 보세요! 

import requests
from bs4 import BeautifulSoup

codes = [
    '005930',
    '000660',
    '035720'
]

for code in codes:
    url = f"https://finance.naver.com/item/sise.naver?code={code}"

    response = requests.get(url)
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    price = soup.select_one("#content > div.section.inner_sub > div:nth-child(1) > table > tbody > tr:nth-child(11) > td:nth-child(2) > span").text
    price = price.replace(',', '')
    print(price)

0

곽수민

 

말씀하신대로 해봤더니 오류가 나서, 인터넷에 찾아봤더니 nth-child 지원이 안되서 오류가 뜨는거고 nth-of-type로 바꿔야 한다고 하더라구요...

그러면 숫자가 다행히도 떴는데 52주 최저가의 수치가 뜨더라구요!

도대체 왜 이러는지는 모르겠지만 웹사이트 자세히 보면서 마지막에 td:nth-of-type (1)로 바꾸니까 해결이 되었습니다. 

 

친절한 설명 감사합니다! 

0

스타트코딩

*답변 정책 변경  (2022.01.13 이후)

 

강의 내용 외 타사이트 질문에 대한 답변은

실전편 수강생들에게만 제공해 드리도록 변경되었습니다. 

 

- 기존 답변은 유지 

Live server 를 이용 해보고 싶은데 확장메뉴 설치가 막혀 있어요

0

64

2

'팀 단위 AI 업무 혁신' 자문 관련하여 문의드리고자 합니다. (연락처 요청)

0

39

1

import requests from bs4 import BeatifulSoup 이 단계에서 안 되네요

0

77

2

requests 관련 질문

1

138

2

설치 관련

0

132

2

vs code 결과출력이 안됩니다

0

143

1

크롤링 관련 질문입니다

0

210

2

word wrap 체크 후에도 콘솔 한줄로 출력되는현상

0

190

1

주피터에서 pip오류가 계속납니다

0

1084

3

강의 "requests, Beautifulsoup4 사용법 빠르게 알아보기"에서 질문이있습니다.

0

172

2

네이버쇼핑 검색창 넘어가기전 팝업창이 안사라져요

0

366

1

html주소를 다른 컴터에서도 접속하기

0

243

2

pandas 설치하는데 오류가 나서요

0

2709

1

실행오류

0

215

1

네이버쇼핑 무한스크롤 안되시는분들 모바일네이버로 실습해보세요

0

263

1

뉴스 페이지에 페이지 번호가 없는데 어떻게 가져오나요?

0

233

2

네이버 쇼핑에 팝업창이 뜨기 시작했어요 도와주세요 ㅠㅠ

0

724

3

셀레니움 실습 시 창이 자동 차단되면서 꺼집니다.

0

665

2

낮은 가격순을 클릭하는 문을 추가하고싶습니다.

0

305

2

pip는 내부 또는 외부명령 ,실행할 수 있는 프로그램

0

3393

2

이런오류는 어떤 오류인가요

0

661

1

창이 두개떠요/쇼핑검색도 안되요 ㅜ

0

334

2

약간 변태(?)같지만 해당 코드를 깔끔하게 함수로 리팩토링해보았습니다

0

338

2

과제 답안을 보지않고 스스로 구글링해서 만든 웹 크롤링 프로그램(10페이지 단위) 코드입니다.

0

760

2