KT AIVLE School/웹크롤링
403 문제가 생겼을 시
Rabet
2024. 9. 20. 12:13
403문제 이유
파이썬으로 접근하면 클라이언트가 기본 브라우저가 아니기 때문에
request를 할 때, 헤더의 UserInterface가 python이어서 WAS가 response로 403을 출력하는 것인데요.
(어뷰징을 막음)
이는 headers를 변경해 줌으로써 해결이 가능합니다.
Daum 금융 사이트 해결
- https://finance.daum.net
- status code : 4xx
- setting headers로 해결
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)