본문 바로가기
웹 크롤링/Web Crawling

[Web Crawling]

by Jasonify97 2023. 2. 17.

크롤링 : 웹페이지에서 데이터를 가져오는법

크롤링 종류
  • 정적페이지 : 웹브라우저에 화면이 한번 뜨면 이벤트에 의해 화면변경이 없는 페이지
  • api이용 : 오픈소스
  • 동적페이지 : 웹브라우저에 화면이 한번 뜨면 이벤트에 의해 화면이 변경하는 페이지

만약 웹페이지가 복잡하다면 모바일버전으로 크롤링해도됨!

 

1. 정적페이지 크롤링(네이버 주식)

크롤링할 url 가져오기

오른쪽에서 url 가져오기

# 선언
]import pandas as pd
import requests

# 1. url 가져오기
url = 'https://m.stock.naver.com/api/index/KOSPI/price?pageSize=10&page=2'

# 2. 정상적으로 잘 가져오는지 확인
response = requests.get(url)
response

# 4. 서버에서 받은 데이터를 변환
# json > list > dataframe

data = response.json()
type(data)

df = pd.DataFrame(data)
df

 

  • 동적페이지 크롤링을 위한 예제로 다음 증권의 국가별 환율정보를 크롤링 해보자
  • tip) 크롤링을 할때 web과 모바일이 있다면 모바일의 정보가 더 적기 때문에 편하다.
import warnings
warnings.filterwarnings('ignore') # 경고문구 없애기
import pandas as pd # 데이터 프레임만들기
import requests # 파이썬으로 데이터 요청할 수 있게 해줌

1. 웹서비스 분석(URL) , 서버에 데이터 요청

다음금융 국가환율정보(정적페이지)

위에사진은 네이버증권 - 코스닥 - 일별시세 이며, 주요국 차트에서 우측으로 넘어가는 버튼을 눌러도 url이 바뀌지 않는 동적페이지이다.ctrl + shift + i를 눌러 개발자도구 켜기

ctrl + shift + i를 눌러 개발자도구 켜기

페이지에서 국가별 환율정보만 필요하기 때문에 Name칸에서 환율정보에 대한 내용을 찾았는데 summaries에 있었음 
따라서 Headers에서 url을 복사해서 가져옴

url = 'https://finance.daum.net/api/exchanges/summaries'
response = requests.get(url) #url에 대한 내용을 request
response

 

서버에 데이터요청을 했는데 4xx번대 에러가 뜸 원인은 개발자가 다음에대한 과도한 트래픽을 우려해 파이썬으로 요청한 url을 막아놓은 것임

이걸 해결하는 방법은 Request Headers에서 'referer' 와 user-agent'를 추가해주기

url = 'https://finance.daum.net/api/exchanges/summaries'
headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36',
           'referer': 'https://finance.daum.net/exchanges', }
response = requests.get(url,headers=headers)
response

headers를 추가해주면 200대가 뜸

 

2. 서버에서 받은 데이터 파싱(데이터의 형태를 변경 json > list,dic > dataframe)

df = pd.DataFrame(response.json()['data'])
response를 dic형태인 json으로 받고 ['data']를 가져오고, pd.dataframe으로 바꿈

 

 

'웹 크롤링 > Web Crawling' 카테고리의 다른 글

[Web Crawling] 3. 정적페이지,html  (0) 2023.02.27
[Web Crawling] 2. Web API  (0) 2023.02.26
Web Crawling 하기전 지식 쌓기  (1) 2023.02.17