파이썬 정규식 + 파일 확장자 = 웹페이지 파일 이름 가져오기
Python
Tip
WebScraping
2023.01.05.
1. 미리 보는 결론
file_name = re.findall("/([\w]+\.jpg$", url)[0]
file_name = re.search("/([\w]+\.jpg$", url).group(1)
file_name = re.findall("/([\w]+\.(?:(?:jpg)|(?:png)))$", url)[0]
file_name = re.search("/([\w]+\.(?:(?:jpg)|(?:png)))$", url).group(1)
- 확장자는 원하는 대로 변경가능합니다. 밑의 2줄은 복수의 확장자를 지원합니다.
2. 문제 인식
Web Scraping을 하다 보면 웹페이지 주소 마지막에 있는 사진 파일이 필요한 경우가 있습니다.
https://global.unitednations.entermediadb.net/…/image1170x530cropped.jpg
해당 주소에서 사진 파일 이름만 가져오고 싶을 때, 보통 파이썬 문자열을 활용하여 추출하는 경우가 많습니다.
하지만 정규식을 이용하면 훨씬 더 직관적이고 간단하게 추출이 가능합니다.
예를 들어 위의 링크에서 맨 마지막 /
뒤의 image1170x530cropped.jpg
부분을 가져오는 정규식은 다음과 같습니다.
file_name = re.findall("/([\w]+\.(?:(?:jpg)|(?:png)))$", url)[0]
3. 설명
앞에서부터 하나씩 분석해 보겠습니다.
/
는 웹페이지 주소에서 제일 마지막/
를 의미합니다. 8번과 연계됩니다.- 가장 바깥
()
는 그룹이자 캡처를 의미합니다.findall
함수의 리턴 범위를 지정합니다. [\w]
는 영문자와 숫자 그리고 밑줄 문자를 의미하며 다음과 같습니다.[A-Za-z0-9_]
+
는 앞선[\w]
가 최소 한번 이상 반복되는 모든 문자열을 포함합니다.\.
는 메타 문자.
이 아닌 일반 문자.
을 나타냅니다.[.]
과 동일합니다.(?:)
는 비캡처 그룹화입니다. 캡처하지 않으므로 리턴에 포함되지 않습니다.(?:jpg)|(?:png)
는jpg
나png
두 그룹 중 하나라도 나오는지 확인합니다.$
는url
문자열의 맨 마지막에서 정규식을 찾는다는 표현입니다. 1번과 연계됩니다.
(?:jpg)|(?:png)
부분은 얼마든지 다른 확장자로 대체하거나 수를 더 늘릴 수도 있습니다.
코드 마지막의 [0]
는 re.findall()
함수 때문에 사용하였으며, re.search()
를 사용할 경우 .group(1)
을 붙이면 됩니다.
Source
- wikidocs 08-2 정규 표현식 시작하기
https://wikidocs.net/4308