책 쓰는 엔지니어
아이돌 사진 수 천장을 한 번에 다운로드해 보자 (2) 본문
2020/05/31 - [일반인을 위한 업무자동화] - 아이돌 사진 수 천장을 한 번에 다운로드해 보자 (1)
이번 글의 소스코드는 깃허브에서 받으실 수 있습니다. 앞 글들을 참고하셔서 git pull origin master를 재실행주시면 폴더 안에 image_crawler 라는 폴더가 새로 생겨 있을 것입니다.
앞 글들을 읽고 오지 않으신 분들은 아래 링크에서 바로 다운로드 하시면 됩니다.
이 글은 전편에서 이어지는 글입니다. 사실 전편에서 본격적인 내용은 시작을 안 한 상태라서 여기서부터 읽으셔도 문제 없습니다. 촤하핫.
구글 검색창에 키워드를 입력하면 위와 같은 페이지가 펼쳐진다. 구글은 수 많은 사이트에서 키워드와 관련된 정보를 불러와 사용자에게 제공한다. 위 페이지에서 박효신의 사진이 차지하는 면적은 그렇게 넓지 않다. 이미지만 보기 위해서 이미지 탭으로 넘어가 보자. 검색창 바로 밑의 '이미지'를 클릭하면 된다.
구글에 박효신을 검색한 상태로 이미지 탭을 누르면 박효신과 관련된 이미지가 좌라락 정돈되어 나온다. 하. 정말 잘생겼다. 대장나무 박효신, 얼른 8집 내 주세요!
여기서 어떻게 하면 이 사진들을 주르륵 긁어와 다운로드할 수 있을까? 구글 홈페이지에 일일이 접속해서 키워드를 입력하고, 이미지 탭을 클릭하도록 코드를 짜면 쉬울 것 같기는 하다. 그런데, 그건 너무 비효율적인 방법이 아닐까?
물론 필자가 아주 급한 상황이고, 프로그램 설계나 검색에 시간을 투자할 여력이 부족했다면 그렇게 구현 했을 것 같다. 프로그래머는 한 시간 걸릴 일을 10시간 걸려서 자동화 해 놓고 뿌듯함을 느끼는 종족이기 때문이다. 하지만 지난번 우편등기 정리사건때 느낀 것인데 가능한한 줄일 수 있는 작업은 줄여 놓고 시작하는 것이 성능 면에서나 정신건강 면에서나 좋다.
자, 주소창을 한번 클릭해 보자. 복잡한 문자열 사이에 '박효신'이라는 글자가 눈에 들어온다. 검색창에 '박효신'이라고 검색한 것과 주소창의 '박효신'이라는 글자는 서로 깊은 연관이 있을 것 같다. 주소창에 적혀 있는 복잡한 글자들을 한번 분석해 보고 싶었다. 필자가 웹에 대한 지식은 없지만, 적어도 컴퓨터가 아주 논리적인 방식으로 작동한다는 것은 알고 있다. 분명히 관계가 있을 것이다.
우선 주소창에서 가장 눈에 띄는 것은 google.co.kr이라는 문자였다. 지금 필자가 보고 있는 화면은 구글의 한국 서버에서 보내 주고 있는 검색 결과물인 것 같다. ".co.kr"은 각각 company와 Korea의 줄임말이다. 그러면 한번 .co.kr을 .com으로 바꾸어 보도록 할까?
놀랍게도 정상적으로 작동했다. 주소창에서 co.kr을 com으로 변경해도 정상적으로 박효신의 존엄하신 용안을 알현할 수 있다. 저 긴 주소 중에서 핵심적인 기능을 하는 녀석은 지우거나 변경하면 작동하지 않을 것이다. 핵심적인 역할을 수행하지 못하는 부분은 삭제해도 정상적으로 작동할 것 같다. 자, 이 가설을 토대로 한번 주소를 면밀하게 뜯어보도록 하자.
물음표와 앤드(&)표시마다 엔터키를 쳐서 구분해 보기 좋게 정리해 봤다. 맨 앞의 "https://www.google.com"은 구글의 홈페이지 주소라는 뜻일 것이다. 슬래시(/)는 하위에 있다는 뜻으로 생각하면 될 것 같다. A라는 폴더 내의 B라는 파일은 A/B라고 표현할 수 있지 않은가? 아마 인터넷 주소도 비슷한 원리로 작동할 것이다.
녹색으로 표시된 search는 검색 기능을 의미하는 것 같다. 눈치껏 때려맞추어 보자면, (구글주소)/(search) 라는 구조니까 아마 "https://www.google.com/search"는 구글 서버에 접속해서, 검색 기능을 불러오라는 뜻이 아닐까? search 바로 뒤의 빨간 물음표는 "무엇을 검색할 건데?" 라는 뜻으로 대충 받아들이기로 했다.
그러니 위 주소는 큰 틀에서 보면 "구글 서버에 접속해서/검색 기능을 활성화해/근데 뭘 검색할거냐면~~" 이라는 구조인 것 같다.
q, hl, source, tbm 등 등호의 왼쪽에 있는 문자들은 함수의 파라미터와 역할이 같을 것이다. 함수가 무엇이고 파라미터가 무엇인지 여러분들은 이미 예전 글을 통하여 배웠을 것이다. 박효신 이라는 한글이 q에 대응하고 있으므로 q의 정체를 가장 쉽게 유추할 수 있을 것 같다. q는 검색어라는 뜻일 것이다. 아마 query의 줄임말이 아닐까?
나머지는 무슨 의미인지 전혀 모르겠다. 그러니 일단 하나씩 지워보자.
위 주소들 중 맨 뒤에 있는 bin=982라는 문자를 삭제해 봤다. 아, 물론 바로 앞에 있는 &도 삭제했다. 왠지 그래야 문법에 맞을 것 같아서. bin=982라는 문자를 삭제해도 검색 결과가 정상적으로 표출된다. bin이라는 파라미터는 우리 목표에 별로 영향을 끼치지 못 하는 녀석이라는 뜻이다. 하나 더 지워보자.
이번에는 biw 파라미터를 삭제했다. 역시 정상적으로 작동한다. 자, 이제 검색 결과가 이상하게 나올 때까지 계속해서 삭제해 나가 보도록 하겠다. 그나저나 박효신은 정말 잘 생겼다.
이번에는 ved 파라미터도 삭제했다. 가장 분량이 긴 파라미턴데도 삭제했을 때 별로 문제가 안 생기는 것 같다. 주소가 갑자기 확 짧아진 것 같지 않은가?
sa 파라미터를 삭제했으나 여전히 박효신은 잘생겼고 필자는 박효신 노래를 들으면서 글을 쓰고 있고 박효신은 진짜 완벽한 존재가 틀림없다는 확신이 들 뿐이고.
드디어 찾았다. tbm=isch라는 글자를 주소에서 삭제하면 결과가 이상해 진다. 아마도 tbm은 '어디에서 검색해 올까요?' 라는 뜻의 파라미터일 것이며 isch는 '이미지 검색'이라는 뜻일 것이다. tbm이 무엇의 약자인지는 모르겠으나 isch는 아마 image search(이미지 검색)의 줄임말일 것이다. 자, 일단 tbm=isch라는 글자는 포함시켜야 한다는 정보를 얻을 수 있었다.
source 파라미터는 삭제해도 된다. 자, 다음.
hl파라미터를 삭제해도 여전히 결과가 멀쩡하게 나온다.
자, 일련의 과정을 통해서 구글에서 이미지를 검색할 때 실질적으로 필요한 주소가 무엇인지를 찾아낼 수 있었고, 구글 이미지 검색 주소가 어떻게 작동하는지도 대충은 안 것 같다. 이제 이걸 정리하면 아래와 같은 일반화를 할 수 있을 것이다.
한번 테스트해 보도록 하자.
검색어에 필자의 이름을 넣어 봤다. 잘 작동한다. 다른 검색어를 넣어도 잘 작동한다. 우리는 저 주소를 이용해서 이미지를 검색할 것이다.
자 그러면 다시 박효신으로 돌아가자. 웹브라우저에서 개발자 도구를 켜 준다. 필자가 사용하는 웨일브라우저는 오른쪽 클릭 후 "검사"를 누르면 개발자 도구가 나타난다. 크롬 관련 브라우저에서 단축키가 Ctrl + Shift + I로 동일한가? 잘 모르겠다. 한번 눌러 보기 바란다.
위 사진에서 동그라미 쳐진 부분을 클릭하고, 좌측의 박효신 용안을 클릭해 보자. 우측에 음영으로 표시된 부분이 생길 것이다. 우측에 음영으로 표기된 부분이 좌측의 박효신 사진과 깊은 연관이 있을 것이다. 이제부터 선택지가 두 개가 생긴다.
좌측을 기준으로 코딩할 것인가? 우측을 기준으로 코딩할 것인가?
필자는 오른손잡이이므로 우측을 기준으로 코딩해 보겠다. 다음편부터는 셀레늄(selenium)과 크롬드라이버를 사용할 예정이니 미리 설치해 두면 다음편을 더욱 수월하게 따라올 수 있을 것이다.
'일반인을 위한 업무자동화' 카테고리의 다른 글
트위터, 인스타그램 자동화 예제 (0) | 2020.06.19 |
---|---|
키보드, 마우스를 자동으로 움직이는 매크로 (1) | 2020.05.31 |
사진 수 천 장을 인스타그램에 올리기 좋게 편집하기 (0) | 2020.05.31 |
아이돌 사진 수 천장을 한 번에 다운로드해 보자 (3) (3) | 2020.05.31 |
아이돌 사진 수 천장을 한 번에 다운로드해 보자 (1) (0) | 2020.05.31 |
수 천 개의 텍스트 파일을 엑셀 하나로 합쳐 보자(2) (0) | 2020.05.31 |
수 천 개의 텍스트 파일을 엑셀 하나로 합쳐 보자(1) (0) | 2020.05.31 |
수 천 개의 텍스트 파일을 1초 안에 합쳐 보자 (2) (1) | 2020.05.30 |