저번에 파이선 사이트 크롤링에 대해서 알아보았는데요.
먼저 사이트 상태가 정상적인지 Response를 통해서 확인하였습니다.
response 에러
하지만 일부 멀쩡하게 표시된 사이트도 에러 메시지를 뿜는경우가 있는데요.
아래 사이트의 경우 저번에 알려준 크롤링 방법으로 크롤링하면 정상 페이지지만 404 에러코드를 보냅니다.
2022.08.22 - [Programming/Python] - 파이썬 웹사이트 크롤링하기- 1. request
사용한 코드는 가장 간단하게 혹시 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
크롬을 사용한다면 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 기능을 활용해보시기 바랍니다.
그럼 즐거운 하루 보내세요.
'Programming > Python' 카테고리의 다른 글
python No module named 'PIL' 에러 해결하기 (0) | 2023.03.30 |
---|---|
파이썬 폴더 관리 명령어 os - 빈폴더, 파일 존재 확인 (0) | 2022.12.22 |
파이썬 패키지 수동 설치하는 방법(pip 오프라인 설치) (0) | 2022.12.05 |
파이썬 QR코드 생성하기 - qrcode (0) | 2022.11.17 |
유튜브 실시간 방송 댓글 크롤링 (0) | 2022.11.08 |