5. 방법
• Python으로 scraper 프로그램 작성
• 동작 순서
1. Google 검색창에 검색어 입력
2. Image Result 페이지의 HTML 문서를 Download
3. DOM 구조 분석
4. Scrapy로 img의 href를 가져오고, file system을 이용해서 다운로드
18. 손으로 해보기
• 큰 이미지의 url를 분석하자.
• https://www.google.co.kr/search?q=cat&biw=1920&bih=947&sourc
nms&tbm=isch&sa=X&ved=0ahUKEwip_KeozerNAhWKnpQKHaIpAU
AUIBigB#imgrc=sKYUQsX9cMoQ0M%3A
• 진한 부분까지는 구글의 이미지 페이지 url과 동일하다.
• 청록색 부분이 새로운 부분이다.
• #imgrc : ID 이름인것 같다.
• sKYUQsX9cMoQ0M : <img> 태그의 name 값과 동일하다.
• %3A : 모르겠다. 빼고 url에 입력하면 다시 생김
• 결론 :: #imgrc=“여기에 name값 넣어주면 됨"
19. 손으로 해보기
• 동작 순서 재정리
1. 검색어 입력 (ex: cat)
2. 구글로 검색
3. 결과 중에서 img 파일이 있는 페이지의 url 저장
4. url#imgrc=name 으로 request
5. 큰 이미지 페이지 response
6. DOM 구조 분석
7. Scrapy로 img의 src를 가져오고, file system을 이용해서 다운로드
22. 실전
• DOM 구조 파악을 했으니 python으로 프로그램을 작성해보자.
• 귀찮으니 c9.io에서 Django workspace를 생성해서 여기다 작업
• 사용 패키지 ( 없으면 설치할 것 )
• Scrapy
• BeautifulSoup
• Requests
• Random
• Urllib
23. BeautifulSoup
• HTML이나 XML파일에서 데이터를 추출하는 Python 언어용 라이브러리
• HTML이나 XML파일을 개발자가 원하는 파서로 파싱해서 개발자가 언하는
결과를 뽑아낼 수 있도록 도와준다.
• 얘는 데이터에 특화
• Scrapy는 크롤링에 특화
24. HTML 문서 다운로드
• 일단 url로 검색이 제대로 되는지 확인을 위해 HTML 문서를 저장
해봄
25. 이미지 name 추출
• img_name = sel.css(‘.rg_di rg_l rg_i::attr(name)’).extract()
• Name을 가져오지 못함
• Requests로 긁어온 문서에는 name 값이 존재하지 않음
27. 삽질 원인
• TED는 DOM 구조를 숨기지 않음
• 당연히 구글도 그럴거라 생각
• 의심하지 않았기 때문에 시간 낭비를 하게됨
28. 저장
• HTML 문서가 가지고 있는 DOM 구조
• #ires > table > tbody > tr:nth-child(1) > td:nth-child(1) > a > img
<img src=“여기 값 추
출”>
29. 폴더에 저장
• 웹에서 파일을 다운로드 하는데 urllib 라는 모듈을 쓴다.
• urllib 가지고 2가지 방법으로 다운로드 할 수 있다.
1. urllib.urlretrieve(fileUrl, fileName)
2. urllib.urlopen(fileUrl) 이걸 읽어다가 write 하면됨
• 여기서 1번을 이용하기로 함
35. 문제
• 구글에서는 원래 Search API를 제공해 왔었으나 11년도 부터는
지원X
• FYI "The Google Image Search API has been officially
deprecated as of May 26, 2011. It will continue to work as per
our deprecation policy, but the number of requests you may
make per day may be limited. We encourage you to use the
Custom Search API, which now supports image search." so don't
use it for anything important as it probably won't be around
much longer.
• Custom Search API사용을 권함
40. Bing에 검색
• Search
• “http://www.bing.com/images/search?q=“ + input + “&FORM=HDRSC2”
• 위 url을 이용해서 HTML 긁어온 후 DOM 구조 분석
• Script에 따라서 DOM 구조가 바뀌기 때문에 크롤링하는 입장에서 긁은 후 분석 해야함