인프런 커뮤니티 질문&답변

sun4461637님의 프로필 이미지
sun4461637

작성한 질문수

빅데이터 파이프라인 마스터; 성공을 위한 도구와 기술

[실습] Crawling and Scraping (Urllib, BS4, Selenium)

select_one 질문있습니다!

해결된 질문

작성

·

165

1

크롤링 연습을 위해 다음의 금융페이지에서 랭킹의 코스닥 상승률 부분의 데이터 하나를 가져와 보려고 합니다. 추출하려고 하는데이터를 copy_select해서 넣어봤는데 왜 None이 뜨는지 모르겠습니다..ㅠ 어느부분이 잘못된 걸까요??

import requests
import urllib.request as req
from bs4 import BeautifulSoup

url = "https://m.finance.daum.net/myfeed"
res = requests.get(url)
#res = req.urlopen(url).read()
print(res)
soup = BeautifulSoup(res.text, 'html.parser')
#soup = BeautifulSoup(res, 'html.parser')
upstream = soup.select_one('#root > div > main > section > article:nth-child(4) > div.ranking.kosdaq > ul > li:nth-child(1) > a > p.rAlign > span')
print(upstream)

답변 2

0

J.PHIL님의 프로필 이미지
J.PHIL
지식공유자

안녕하세요 sun4461637님,

질문해주신 내용 다양하게 검토해본 결과, 제시한 url 사이트 다음은 html 다운을 받아보면 div root 밑에 다 비어서 오게 됩니다. 즉 제가 예제에 진행한 네이버 금융 사이트는 html 다운시 (urlopen()) dom이 채워서 옵니다 :)

그러므로 저희가 진행하려했던 copy selector 값은 다음 금융에서는 찾을 수 없게 됩니다. 다양한 이유가 있겠지만, 많은 확률로 추측해보자면 네이버와 다르게 다음은 동적으로 javascript를 통해 dom을 그리는데 그 시점이 저희가 다운받은 후입니다. (서버사이드, 클라이언트 사이드까지 나오면 복잡해질 수 있으므로 이렇게 표현하겠습니다. )

첨언하면 우클릭후 inspect를 누르면 기능 특성상 그 이후에 다 그리고 불러오는데, 우클릭후 view page source를 누르면 inspect 결과와 상이하게 (view-source:https://m.finance.daum.net/myfeed) 대표 div 밑으로 비어져있을 겁니다. 참고하세요~

감사합니다

sun4461637님의 프로필 이미지
sun4461637
질문자

웹을 잘 모르지만 말씀해 주신대로 소스 비교해보니 무슨말인지 이해했습니다!

감사합니다!

0

J.PHIL님의 프로필 이미지
J.PHIL
지식공유자

안녕하세요 sun4461637님,

제가 출장중이어서 계속 외부라 현재 테스트 머신이 없습니다.
며칠 안 남았는데 주말에 테스트 및 검증하여 피드백 드려도 괜찮을까요?

sun4461637님의 프로필 이미지
sun4461637
질문자

넵!

sun4461637님의 프로필 이미지
sun4461637

작성한 질문수

질문하기