ITStudy/Python

[python] BeautifulSoup를 통한 크롤링 차단 시 해결 방법

Todays Goal 2021. 2. 22. 12:00
728x90
반응형

이번시간에는 크롤링 시 차단되었을 경우의 대처방법 User Agent 지정에 대해서 알아보도록 하겠습니다. 

 

BeautifulSoup를 사용해서 웹을 크롤링하던 와중에 페이지에서 아무것도 받아오지 못하는 문제가 발생해서 당혹스러운 경우가 발생했습니다. 구글링 해보았을 때 다양한 경우에서 이러한 문제가 발생할 수 있는 것으로 보입니다. 

그 중에서 가장 흔한 경우는 웹 서버측에서 크롤러를 로봇의 부적절한 접근으로 인식한 경우 문제가 발생할 수 있습니다(robots.txt 파일에서 제외의 경우). 이 경우 해결방법은 Header에 User Agent 정보를 기입하여 웹 서버로 페이지를 요청할 시에 같이 보내는 방법을 사용할 수 있습니다. 

 

User Agent란

 HTTP 통신 시 브라우저가 웹서버에 연결을 시작할 때 전달되는 정보로 OS, 브라우저, 브라우저가 사용하는 플랫폼 등의 다양한 정보를 담고 있습니다. 

예를 들어, 아이패드에서 사파리를 사용하면 다음과 같은 내용으로 적용되는 것을 확인할 수 있습니다. 

Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405

*인용: wikipedia.org

 

일반적인 경우 아래의 코드를 사용하였을 때 장애 없이 정상적으로 html 문서를 가지고 오는 것을 볼 수 있습니다. 하지만 아래의 방법의 경우 user-agent 검사 시 차단 당할 수 있습니다. 

import urllib.request
from bs4 import BeautifulSoup

url='크롤링 대상 URL'
url_open=urllib.request.urlopen(url)

bs=BeautifulSoup(url_open,'html.parser')
print(bs.html)

 

user-agent 추가 방법

1) urllib.request를 이용한 header 추가

import urllib.request
from bs4 import BeautifulSoup

hdr={'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
url='크롤링 대상 URL'
req=urllib.request.Request(url=url, headers=hdr)
url_open=urllib.request.urlopen(req)

bs=BeautifulSoup(url_open,'html.parser')
print(bs.html.title)

 

2) requests를 이용한 header 추가

import requests
from bs4 import BeautifulSoup

hdr = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
url='크롤링 대상 URL'
get_url = requests.get(url=url, headers=hder).text
print(html)

bs=BeautifulSoup(html, "html.parser")
tag=(bs.html.title)

 

 

use-agent 확인방법

개인이 user-agen를 완벽하게 기입하기는 사실 힘든 부분이라고 생각합니다. 따라서 간단하게 본인의 정보를 확인할 수 있는 참고 사이트를 활용할 수 있습니다. 아래의 사이트에 접속하여 "User Agent Stirng explained:"의 정보를 복사하여 코드에서 활용한 헤더 변수에 삽입해주시면 됩니다. 

 

UserAgentString.com - unknown version

 

www.useragentstring.com

UserAgentString.com

 

이상 크롤링 차단 시 대안방법에 대해서 알아보았습니다.


참고문헌

데이터공방 네이버 블로그. m.blog.naver.com/PostView.nhn?blogId=kiddwannabe&logNo=221185808375&proxyReferer=https:%2F%2Fwww.google.com%2F. 인용: 21.02.21

개발하자 티스토리 블로그. pcmc.tistory.com/entry/190311-Bot-Detection-%ED%81%AC%EB%A1%A4%EB%9F%AC-%EC%B0%A8%EB%8B%A8-%ED%81%AC%EB%A1%A4%EB%9F%AC-%EC%9A%B0%ED%9A%8C-1?category=809836. 인용: 21.02.21

 

728x90
반응형