goodthings4me.tistory.com
파이썬을 가지고 웹 스크래핑을 해봤다면, 동적으로 렌더링 된 웹 사이트에서 BeautifulSoup나 requests로 이미지 등의 콘텐츠를 스크래핑한다는 것이 어렵다는 것을 알 것이다.
파이썬으로 다수의 unsplash 이미지 다운로드 해보기
스크래핑을 연습할 대상 사이트는 unsplash.com이며, 페이지 소스보기를 해서 보면 javascript 소스로 되어있다.
아래 소스코드는, 자바스크립트를 사용하는 동적인 웹 사이트에서 BeautifulSoup 또는 selenium을 사용하지 않고 개발자 도구를 최대한 활용하여 관련 데이터를 찾아낸 후,
requests 라이브러리로만 이미지를 스크래핑하는 것을 보여준다.
개발자 도구(F12)의 Network > XHR에서 search?query=dog&...로 된 부분을 탭으로 open 해서 json 데이터를 확인하고,
이미지를 다운로드하는 클래스를 만들어서 사용하는 방법을 알려주고 있다.
코딩 절차는
- 초기 변수(검색 키워드는 필수, 추출 이미지 개수와 이미지 품질은 선택적임)를 파라미터로 받아서 각각 대입,
- URL에 f-string 포맷으로 변수를 세팅,
- requets로 url에 접근하여 json 데이터 요청,
- 이미지를 저장할 폴더 생성과 이미지명을 등록자 아이디로 만들어서,
- 이미지를 다운로드하는 과정을 밟는다.
서비스 이미지는 검색 키워드 당 30개인 듯하고,
이미지 품질을 raw, full, regular, small, thumb 등으로 설정하여 받을 수 있다.
json 데이터에는 여러 정보가 있다.
그중에서 id와 이미지 url만을 사용한다.
데이터 확인
import requests
url = 'https://unsplash.com/napi/search?query=dog&per_page=20&xp='
r1 = requests.get(url, headers={'user-agent': 'Mozilla/5.0'})
print(r1.text[:1000])
print(r1.text[-200:])
#################################################################
[결과]
{"photos":{"total":10000,"total_pages":500,"results":[{"id":"yihlaRCCvd4","created_at":"2018-06-29T10:15:36-04:00","updated_at":"2022-01-10T06:03:53-05:00","promoted_at":"2018-06-30T10:58:13-04:00","width":4016,"height":6016,"color":"#f3f3f3","blur_hash":"L$Nm~Ht7tlof~VaeV@fk%gogaKax","description":null,"alt_description":"dog running on beach during
daytime","urls":{"raw":"https://images.unsplash.com/photo-1530281700549-e82e7bf110d6?ixid=MnwxMjA3fDB8MXxzZWFyY2h8MXx8ZG9nfHwwfHx8fDE2NDE4NDMzODU\u0026ixlib=rb-1.2.1","full":"https://images.unsplash.com/photo-1530281700549-e82e7bf110d6?crop=entropy\u0026cs=srgb\u0026fm=jpg\u0026ixid=MnwxMjA3fDB8MXxzZWFyY2h8MXx8ZG9nfHwwfHx8fDE2NDE4NDMzODU\u0026ixlib=rb-1.2.1\u0026q=85","regular":"https://images.unsplash.com/photo-1530281700549-e82e7bf110d6?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=MnwxMjA3fDB8MXxzZWFyY2h8MXx8ZG9nfHwwfHx8fDE2NDE4NDMzODU\u0026ixlib=rb-1.2.1\u0026q=80\u0026w=1080","small":"https://images.unsplash.com/phot
.....
.....
{"title":"dog winter"},{"title":"family"},{"title":"dog owner"}],"meta":{"keyword":"dog","title":"500+ Dog Pictures | Download Free Images on Unsplash","description":null,"index":false}}
소스코드
import requests
import os
class Imagescrapper:
def __init__(self, search_keyword, per_page=20, quality='thumb'):
self.search_keyword = search_keyword
self.download_dir = search_keyword
self.per_page = per_page
self.cnt = 1
self.quality = quality
## url setting
def set_url(self):
return f'https://unsplash.com/napi/search?query={self.search_keyword}&per_page={self.per_page}&xp='
## requests()
def make_request(self):
url = self.set_url()
r1 = requests.get(url, headers={'user-agent': 'Mozilla/5.0'})
return r1
## 데이터 변환
def get_data(self):
self.data = self.make_request().json()
## 저장할 디렉토리 생성 / 파일명도 만들어서 리턴
def save_path(self, name):
if not os.path.exists(self.download_dir):
os.mkdir(self.download_dir)
return f'{os.path.join(os.path.realpath(os.getcwd()), self.download_dir, name)}.jpg'
## 이미지 링크(URL)에 대해 requests.get() 다운로드(디렉토리에 저장)
def download_image(self, image_url, name):
filepath = self.save_path(name)
print(filepath)
with open(filepath, 'wb') as f:
f.write(requests.get(image_url, headers={'user-agent': 'Mozilla/5.0'}).content)
## 해당 객체의 메인 메소드 역할
def scrapper(self):
for _ in range(1):
self.make_request()
self.get_data()
for item in self.data['photos']['results']:
name = item['id']
image_url = item['urls'][self.quality]
self.download_image(image_url, str(self.cnt).zfill(3) + '_' + name)
self.cnt += 1
scraping = Imagescrapper('dogs', 30, 'full') # raw, full, regular, small, thumb
scraping.scrapper()
폴더에 저장된 이미지 리스트

※ [출처] : Scrape Dynamically loaded websites with python | python webscraping technique 2020 | python project
블로그 인기글
Windows 10 탐색기 느려지는 증상과 해결하는 방법
잘 작동하던 Windows 10 탐색기가 갑자기 느려지는 증상이 발생했을 때 어떻게 조치를 하는지 구글에서 찾아보니 많은 해결책들이 있었으나 어떤 것이 정확한 해결책인지는 알 수가 없었다. 그래서 해결방법이라고 제시한 것들을 정리해 보았다. 윈도우 탐색기가 느려지는 증상 해결 방법 어느 순간부터 응용프로그램(VS Code 등)에서 폴더 열기나 파일 불러오기를 했을 때 검색 팝업창이 안 뜨거나 열리는 시간이 엄청 느려지는 증상과, 더불어서 탐색기도 실행이 많이 느려지는 증상이 있었다. 기존에 사용하던 VS Code에 openpyxl 설치 후 실행이 느려지는 증상이 발생하더니 윈도우10 탐색기도 느려져서 사용할 수가 없었다. 노트북에 OS(Windows10)를 설치한지 1년이 다 되어가긴 했지만, 1개월 전..
goodthings4me.tistory.com
엑셀 시트 분리 저장 - 엑셀 파일의 시트를 분리하여 저장하기
엑셀을 사용하다 보면 엑셀 시트를 분리해서 저장해야 할 때가 있다. 최근에도 이런 경우가 발생하여 구글링 후 엑셀 시트 분리 업무를 수행하고 내친김에 다른 사람들도 사용할 수 있도록 파이썬 tkinter로 프로그램으로 만들어 보았다. Excel Sheets 분리 저장하는 프로그램(with 파이썬 Tkinter) ※ 프로그램 다운로드(네이버 MYBOX에서 공유) : ExcelSeparateSheets.zip ▶ 프래그램을 실행하면 다음과 같이 초기 화면이 보인다. 찾아보기 : 엑셀 파일이 있는 폴더를 선택한다. (프로그램이 있는 최상위 디렉터리가 열린다) 실행하기 : 프로그램 실행 버튼 상태 변경 순서 : 실행전 → 실행 중 → Sheet "OOO" 분리 저장 중 → 실행 완료 실행 결과 확인 : 엑셀 파..
goodthings4me.tistory.com
[국세청] 현금영수증가맹점으로 가입바랍니다. 메시지 해결방법(개인사업자)
▶ 현금영수증 가맹점 가입 메시지를 받고... 온라인 쇼핑몰 사업을 시작하려고 사업자등록증을 발급받고 난 후 얼마 안 있어서 국세청으로부터 어느 시점까지 '현금영수증 가맹점'으로 가입하라는 문자메시지가 받았었다. 그 메시지 기한이 오늘 도래했는데, 인터넷에서 찾아보니 홈택스에서 현금영수증 발급 사업자 신청을 할 수가 있었다. [관련내용] 홈>국세정책/제도>전자(세금)계산서/현금영수증/신용카드>현금영수증∙신용카드>가맹점가입 ▶ 홈택스 사이트에서 신청하는 절차는 다음과 같다. 우선, 홈택스에 로그인을 해야 합니다. 세상이 좋아져서 공인인증서 없이도 손쉽게 간편인증 로그인이 가능하다. 여러 인증방법 중 카카오톡 인증이 가장 편리한 거 같다. 간편인증 로그인 후 상단 '조회/발급' 탭 클릭 후 '현금영수증>현금..
goodthings4me.tistory.com
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
네이버 쇼핑 아이디별 등록 상품 추출하는 법(파이썬 script 태그 스크래핑 가이드) (3) | 2022.01.14 |
---|---|
이미지 다운로드 관련 requests와 requests-html 비교 (0) | 2022.01.11 |
11번가 실시간 쇼핑 검색어 추출해서 저장하기(python tkinter) (0) | 2022.01.10 |
단축 URL 스크래핑에 파이썬 비동기 처리 개념 적용해보기 (0) | 2022.01.07 |
selenium으로 네이버 쿠키를 얻고 세션을 유지하는 방법 (2) | 2022.01.03 |
댓글