PYTHON으로 데드링크(Dead Link) 찾기

Yura Gang·2022년 6월 14일
0

빅데이터 전공으로 대학원에 입학한 지 1년이 넘었는데
그동안 내가 현업에서 쓰고 있는 코드들을 포스팅해야지 맘만 먹고
바쁘다는 이유로 포스팅을 한 번도 하지 못했다.

시작이 반이라고 최근에 사용한 코드를 올려보도록 하자.

첫 번째로 포스팅할 코드는 데드 링크 찾기 코드다.
회사 앱에 상세페이지마다 관련 url을 넣는데
십수 년 전 DB에 쌓기 시작한 이유로 유효성 테스트를 한 번도 안 한듯하다...;;

url이 안 열린다는 VOC를 심심치 않게 받던 차라 시간 날 때 틈틈이 관련 코드를 검색해 봤지만
데드링크 찾을 일이 자주 없기 때문인지 서치하고 적용하는데 시간이 좀 걸렸다.

결론적으로 완성한 코드는 다음과 같다. (Jupyter Notebook 사용)

urllib.error 모듈에서 예외 사항은 3가지로 나뉜다.
1) HTTPError
2) URLError
3) ContentTooShortError

여기서는 url이 데드링크인지 아닌지만 확인하면 되기 때문에 HTTPError과 URLError 만 사용했다.

url_list.txt 파일에 url리스트를 넣은 후 툴을 돌리면
url_list_result.txt 파일에 url 접속 성공, 실패 여부 및 실패 코드를 반환해 저장된다.

<url_list.txt 예시>

확인할 url을 txt 파일에 한 줄씩 넣는다.

<url_list_result.txt 예시>

실제 사용한 url은 문제가 될까 봐 테스트 url로 입력함.
url이 정상적으로 접속 가능하다면 "|성공|"을 반환하고
데드링크라면 "|실패|" 코드와 함께 실패한 이유도 반환한다.
각 에러코드의 의미는 위키백과에서 http 상태코드 검색하면 됨. (아래 링크)

HTTP 상태 코드


+) 특정 url (정부 기관, 금융사 홈페이지 등)은 철저한 보안때문에
실제론 접속이 됨에도 파이썬 툴을 오류 나게 했다. (오류코드도 반환 안 됨)

따라서 확인할 url 수량이 많고 귀찮은 일이 싫다면 (오류 날 때 마다 해당 url 지우고 다시 작동 시켰다..ㅠ)

처음부터 리스트에서 go.kr 과 같은 도메인은 삭제하고 진행하는 편이 나은 듯 하다.

파이썬 초보자라 코드 짜는데 시간이 좀 걸렸지만
이 코드 덕에 5만 건이 넘는 url의 데드링크를 빠른 시간 안에 확인할 수 있었다.

<url에 한글이 포함된 경우>

만약 url에 한글이 포함되어 있는 경우 ('www.네이버.com' 과 같은)
한글만 인코딩 시켜준 다음 툴을 돌리면 된다.

www.네이버.com --> ​www.%EB%84%A4%EC%9D%B4%EB%B2%84.com

이런 식으로 변환하는 클래스를 사용하거나 url 인코딩 사이트가 있음.

profile
배움은 즐겁다.

0개의 댓글