KT AIVLE School/웹크롤링

403 문제가 생겼을 시

Rabet 2024. 9. 20. 12:13

 

403문제 이유

파이썬으로 접근하면 클라이언트가 기본 브라우저가 아니기 때문에 

request를 할 때, 헤더의 UserInterface가 python이어서 WAS가 response로 403을 출력하는 것인데요.

(어뷰징을 막음)

이는 headers를 변경해 줌으로써 해결이 가능합니다.

 

Daum 금융 사이트 해결

import requests
import pandas as pd

# 1. URL
url = 'https://finance.daum.net/api/exchanges/summaries'

# 2. request(url) > response(json)
response = requests.get(url)
response # <Response [403]>

.

 

 

Headers에 User-Agent와 Referer를 바꿔서 넣으면 정상적으로 작동합니다. [200]

만약, 안된다면 다른 부분들도 바꿔가면서 찾아야 합니다.

# 2. request(url) > response(json)
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
          'referer':'https://finance.daum.net/exchanges'}
response = requests.get(url,headers=headers)
response # <Response [200]>

 

 

 

이제 데이터를 불러옵니다.

# 3. json > list,dict > DataFrame
data = response.json()['data']
df = pd.DataFrame(data)[['currencyCode','currencyName','country','basePrice']]
df.tail(3)

 

- 전체 코드

import requests
import pandas as pd

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/129.0.0.0 Safari/537.36',
          'referer':'https://finance.daum.net/exchanges'} 
response = requests.get(url,headers=headers)

data = response.json()['data']
df = pd.DataFrame(data)[['currencyCode','currencyName','country','basePrice']]
df.tail(3)