크롤러를 개발하다 보면 가장 중요한 부분은 불법 요청자로 판별되어 차단을 당하지 않는 것이다.
해당 웹 서버에 부담이 되는 많은 요청은 지양을 하는 것이 좋지만, 비즈니스를 위해 필요할 경우가 많다.
그럴 경우에 사용할 수 있는 방법 하나를 공유하고자 한다.
User-Agent란
유저 에이전트는 웹 크롤러와 같은 웹 클라이언트가 서버에 HTTP 요청을 보낼 때 함께 보내는 정보이다.
해당 요청이 어떤 종류의 소프트웨어나 애플리케이션에서 온 것인지를 식별하기 위해 사용하고, 적합한 응답을 제공한다.
- 브라우저의 종류와 버전 : 예) Chrome/94.0.4606.81 등
- 운영체제 정보 : 예) windows10, macOS, Linux 등
- 디자이스 종류 : 모바일 장치인지 데스크톱 컴퓨터인지 식별
유저 에이전트를 변경하여 서버에 요청을 보낸 클라이언트가 사람이 아닌 프로그램임을 감출 수 있다.
fake-useragent
Python에서는 웹 크롤링이나 웹 스크래핑 등을 할 때 유저 에어전트를 손쉽게 생성하기 위한 라이브러리를 제공한다.
- 다양한 유저 에어전트 문자열을 생성할 수 있다
- 다양한 브라우저 및 디바이스를 지원한다
- 랜덤 하거나 특정한 유저 에이전트를 생성한다.
1. 설치하기
위에 안내한 라이브러리를 설치한다.
pip install fake-useragent
2. 사용하기
from fake_useragent import UserAgent
# 유저 에어전트 객체 생성
ua = UserAgent()
# 랜덤한 유저 에이전트 생성
random_ua = ua.random
print(random_ua)
만약 특정한 플랫폼이나 브라우저에 대한 유저 에이전트를 얻고자 한다면 다음과 같이 메서드를 호출할 수도 있다.
firefox_ua = ua.firefox
chrome_ua = ua.chrome
safari_ua = ua.safari
ie_ua = ua.ie
opera_ua = ua.opera
웹 서버에 요청을 보낼 때 헤더에서 유저 에이전트를 가져올 수도 있다.
headers = {
'User-Agent': ua.random
}
이렇게 fake_useragent를 사용하여 사람처럼 보이는 요청을 보낼 수 있다.
3. 응용하기
fake_useragent는 다양한 브라우저를 지원하는데 개중에 인터넷익스플로어도 있다.
나의 경우에 특정 서비스를 스크래핑을 시도했는데, 일부 요청에서 이상한 응답이 반환되었다.
확인해 보니 웹 사이트를 개편하면서 인터넷익스플로어 지원을 멈춘 것이었다!
이때 브라우저를 특정해서 유저 에이전트를 생성하면 올바른 응답을 받을 수 있다.
from fake_useragent import UserAgent
def create_fake_useragnet() -> str:
ua = UserAgent(browsers=['edge', 'chrome','safari'])
user_agent = ua.random
return user_agent
@dataclass
class ProductsParam:
# url
url: str = field(default="요청 URL")
# headers
headers: dict = field(default_factory=lambda: (
{
"user-agent": ""
}
))
# parameter
prod_cd: str = field(default="")
page: int = field(default=1)
def __post_init__(self):
self.headers["user-agent"] = create_fake_useragnet()
이런 식으로 UserAgent의 브라우저를 edge, chrome, safari로만 지정을 해주고 생성을 해서
Param의 headers에 넣어주면 된다!
'프로그래밍 > Crawling' 카테고리의 다른 글
[Python] json 에러 교정하기 (0) | 2023.10.23 |
---|---|
[Selenium] iframe 변경하는 방법 / 상위 프레임으로 변경하는 방법 (0) | 2022.08.18 |
[Crawling] https 403에러 발생 해결방법 (0) | 2022.08.17 |
[Selenium] 버튼 클릭해서 나오는 값 동적 크롤링 하는 방법 (0) | 2022.08.16 |
[Selenium] 네이버 동적 로그인 하기 - 셀레니움 사용법 (0) | 2022.08.16 |