1. User-Agent란?
우리가 보통 컴퓨터로 들어가는 사이트의 화면과 휴대폰으로 들어가는 사이트의 화면은 다르다.
pc에서의 네이버 화면과, 휴대폰에서의 네이버 화면이 다르다.
이는 우리가 웹사이트에 접속할 때, 우리의 정보를 가지고 웹사이트에서 스마트폰인지 데스크탑인지
판단해서 보여주는 그런 정보를 담고 있다.
라고 한다.
즉, 나에 대한 정보라고 쉽게 생각하면 될 것 같다.
내가 직접 접속을 하는 것과, requests를 통해 접속을 하는 것 또한 user-agent가 다르다.
2. 왜 알아야 하는가?
무분별한 크롤링과 서버 과부하를 막기 위해 사람이 직접 접속한게 아니라 프로그램을 통하여 접속하는 것을 차단하는 사이트들이 있다.
내가 직접 검색을 해서 들어가면 상관이 없지만, requests를 통해서 접속을 하려고 하면 막아 놓는 사이트가 있다.
예를 들어서 "https://www.melon.com"이다. 멜론 같은 경우에는 옆의 링크를 통해 접속하면 정상적으로 접속이 된다.
하지만, requests를 통해서 접속을 하려고 하면??
'406' 코드와 함께 아무것도 가져 오지 않는다.
다른 예로 response.stauts_code가 아닌 raise_for_status()를 사용해보자
와우
이렇게 오류가 떠버린다.
즉, 멜론 사이트는 내가 직접 접속한 것은 허용하지만, requests를 통해 크롤링하려는 것은 차단한다.
(아마 순위 조작 이런 이유가 아닐까???)
하여튼 이럴 때 써야 하는 것이 User-Agent이다. 내가 순위 조작 이런 이유가 아니라 뭐 다른 이유에 의해서
멜론 사이트를 크롤링 해야할 때, User-Agent를 바꿔서 내가
"requests를 통해 HTTP를 요청한게 아니라 내가 직접 사이트에 들어가서 HTTP를 요청하는거야 "
라고 속일 수가 있다.
3. 나의 User-Agent
내가 requests, 즉 프로그램을 통하여 접속하는 User-Agent는 알 수 없지만,
내가 직접 접속할 떄의 User-Agent는 쉽게 알 수 있다.
https://www.whatismybrowser.com/detect/what-is-my-user-agent
위의 사이트에 들어가면
저기에 있는 Your User Agent is: 에 있는 이상한 값이 나의 User-Agent이다.
그리고, 내가 크롬에서 접속할 때와 인터넷 익스플로러에서 접속했을 때의 User-Agent는 또 다르다.
4. 사용법
User-Agent가 뭐하는 정보인지, 그리고 내가 직접 접속했을 때의 나의 User-Agent는 무엇인지 알았으니 이제 써먹을 일만 남았다.
일단 저기 User-Agent의 정보를 복사하자.
복사를 한 후 내가 쓴 코드처럼 똑같이 한 번 써보자.
header = {"User-Agent": "나의 User-Agent"}
response = requests.get(url, headers=header)
똑같이 쓰지는 말고, 나의 User-Agent에 나의 User-Agent를 복사해서 넣으면 된다.
그리고 나서 requests.get 파라미터에 'headers=' 에 내가 위에서 만든 header를 넣어주면 된다.
그러면 이 requests는 내가 직접 접속하는 것과 같은 효과?를 가질 수 있게 된다.
한 번 실행해보자.
단순히 User-Agent만 바꿔줬을 뿐인데, 다른 결과가 나왔다. 아까는 '406' 코드가 왔지만 지금은 '200' 코드, 즉, 정상 응답 코드가 나왔다.
또한 response.text를 출력하면,
정상적으로 값이 나온다.
따라서 User-Agent를 바꿔줌으로써 크롬에서 가져온 것과 똑같은 웹사이트를 가져올 수가 있다.
이렇게 해서 제대로된 HTML 문서를 가지고 웹 스크래핑을 할 수가 있다.
5. 요약
쉽게 말해서 User-Agent는 나의 정보를 담은 것이다.
크롬으로 직접 접속한 것과 requests를 통해 접속한 것은 다른 User-Agent를 갖는다.
하지만 몇몇 웹사이트는 requests를 통해 접속하는 것을 막는 사이트가 있다.
따라서 requests를 통해 접속을 할건데, 크롬에서 접속하는 것과 똑같이 받아오고 싶다면,
나의 User-Agent를 크롬에서 접속하는 것과 똑같이 만들어 주면 된다.
header = {"User-Agent": "나의 User-Agent"}
response = requests.get(url, headers= header)
를 통해 requests를 통해 접속하는 것이, 크롬에서 접속하는 것과 동일한 User-Agent를 만들어 주었다.
참고 : 나도 코딩
'Python Library > 웹 크롤링' 카테고리의 다른 글
[웹 크롤링 - Python] Selenium 프레임워크 및 웹 드라이버 (0) | 2022.02.01 |
---|---|
[웹 크롤링 - Python] 응용 및 홈페이지 url 변경 크롤링 (2) | 2022.01.31 |
[웹 크롤링 - Python] BeautifulSoup 사용법 (2) | 2022.01.28 |
[웹 크롤링 - Python] BeautifulSoup4 라이브러리, lxml 모듈 (2) | 2022.01.28 |
[웹 크롤링 - Python] Requests 라이브러리 (0) | 2022.01.28 |