크롤링 : 웹페이지에서 데이터를 가져오는법
크롤링 종류
- 정적페이지 : 웹브라우저에 화면이 한번 뜨면 이벤트에 의해 화면변경이 없는 페이지
- 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 |