Programming/Python

파이썬 크롤링 Response에러 해결하기(Feat. User-Agent)

remake 2022. 12. 21. 09:51

저번에 파이선 사이트 크롤링에 대해서 알아보았는데요.

 

먼저 사이트 상태가 정상적인지 Response를 통해서 확인하였습니다.

 

response 에러

하지만 일부 멀쩡하게 표시된 사이트도 에러 메시지를 뿜는경우가 있는데요.

아래 사이트의 경우 저번에 알려준 크롤링 방법으로 크롤링하면 정상 페이지지만 404 에러코드를 보냅니다.

2022.08.22 - [Programming/Python] - 파이썬 웹사이트 크롤링하기- 1. request

 

파이썬 웹사이트 크롤링하기- 1. request

파이썬의 웹사이트 크롤링의 기초 나도코딩 사이트로 파이썬 웹사이트 크롤링을 공부하고 있는데요. 나도코딩 이 사이트를 통해서 하나씩 배워가고 있습니다. 먼저 requests 패키지를 통해서 사

remake.tistory.com

사용한 코드는 가장 간단하게 혹시 ssl에러가 뜨면 예외처리하는 ssl 코드와

 

그리고 url을 불러와서 status_code를 불러오는 코드인데요.

 

404에러가 발생합니다.

import pandas as pd
from bs4 import BeautifulSoup
import requests
import re
import ssl


if hasattr (ssl, '_create_unverified_context') :
    ssl._create_default_https_context = ssl._create_unverified_context

urls= 'https://www.hankyung.com/thepen/lifeist/article/202210160742Q'

r = requests.head(urls)

print(r)
http_status = r.status_code

print(http_status)

이는 해당 사이트가 이런 봇으로 접근하는 경우를 차단하는 것인데요.

 

무분별한 크롤링과 서버 과부하를 막기 위해 사람이 직접 접속한게 아니라 프로그램을 통하여 

 

접속하는 것을 차단하는 사이트들이 있기 때문입니다.

 

이 경우 우리가 브라우저를 통한 접속은 아무 문제가 없으나, 

python의 requests를 통해서 접속을 하려고 하면 막아 놓았기 때문입니다.

 

하지만 우리는 이를 해결할 수 있습니다.

 

바로 User-agent 기능인데요.

User-Agent?

User-agent는 바로 사용자가 어떤 디바이스와 운영체제 웹브라우저 등으로 서버에 접속했는지를 알려주는 기능입니다.

 

이를 활용해서 우리는 모바일 페이지에 맞는 페이지를 보여주거나, 태블릿에 맞춰서

 

반응형 페이지 등을 보내줄 수 있습니다. 보다 자세한 설명은 아래 사이트에서 참고하시면 좋구요.

 

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

 

User-Agent - HTTP | MDN

The User-Agent request header is a characteristic string that lets servers and network peers identify the application, operating system, vendor, and/or version of the requesting user agent.

developer.mozilla.org

크롬을 사용한다면 F12 개발자 도구를 들어가신 다음

 

Console 메뉴 하단에 navigator.userAgent라고 명령어를 치시면

 

본인의 User-agent값을 알수 있습니다.

그리고 이를 request에 포함시켜 주시면 됩니다

import pandas as pd
from bs4 import BeautifulSoup
import requests
import re
import ssl


if hasattr (ssl, '_create_unverified_context') :
    ssl._create_default_https_context = ssl._create_unverified_context

urls= 'https://www.hankyung.com/thepen/lifeist/article/202210160742Q'

r = requests.head(urls,  headers={'User-agent': 'Mozilla/5.0'})

print(r)
http_status = r.status_code

print(http_status)

이렇게 명령어를 실행시키면 아까와 달리 정상적으로 데이터를 가져오는 것을 알 수 있습니다.

혹시 크롤링을 하다가 잘 안되는 사이트가 있다면 user-agent 기능을 활용해보시기 바랍니다.

 

그럼 즐거운 하루 보내세요.