이번시간에는 크롤링 시 차단되었을 경우의 대처방법 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:"의 정보를 복사하여 코드에서 활용한 헤더 변수에 삽입해주시면 됩니다.
이상 크롤링 차단 시 대안방법에 대해서 알아보았습니다.
참고문헌
데이터공방 네이버 블로그. 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
'ITStudy > Python' 카테고리의 다른 글
[Python]Jupyter Lab 설치 및 활용 (0) | 2021.03.05 |
---|---|
[Python] openpyxl로 excel 다루기03 (urllib, BeautifulSoup) (0) | 2021.02.24 |
[Python] openpyxl로 excel 다루기02 (urllib, BeautifulSoup) (0) | 2021.02.19 |
[Python] openpyxl로 excel 다루기01 (excel 구조, sheet 및 cell) (0) | 2021.02.18 |
[Python] BeautifulSoup로 웹 데이터 분석 with DART (0) | 2021.02.01 |