Python 웹 컨텐츠를 보기 좋게 가져오는 Lassie 라이브러리 알아보기
오늘은 Python에서 웹 소스코드를 보기 좋게 가져와주는 Lassie 라이브러리를 알아보려 합니다.
Lassie 설치
우선 virtualenv로 파이썬 환경을 분리해줍니다.
pip3 install virtualenv
virtualenv -mvenv env
env라는 이름의 가상 환경을 생성합니다.
source env/bin/activate
가상환경을 폴더에서 활성화합니다.
pip3 install --upgrade pip
pip의 업그레이드가 존재하는지 확인하고 진행합니다.
pip install lassie
pip로 Lassie를 설치합니다.
예제
import lassie
from pprint import pprint
sample = lassie.fetch('https://www.youtube.com/watch?v=R6IT_f0XPT8')
pprint(sample)
lassie로 웹 컨텐츠를 가져와서 pprint로 출력하면 보기 좋게 출력합니다.
{'images': [{'height': 360,
'src': 'https://i.ytimg.com/vi/R6IT_f0XPT8/hqdefault.jpg',
'width': 480},
{'src': 'https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico',
'type': 'favicon'},
{'src': 'https://s.ytimg.com/yts/img/favicon_32-vflOogEID.png',
'type': 'favicon'},
{'src': 'https://s.ytimg.com/yts/img/favicon_48-vflVjB_Qk.png',
'type': 'favicon'},
{'src': 'https://s.ytimg.com/yts/img/favicon_96-vflW9Ec0w.png',
'type': 'favicon'},
{'src': 'https://s.ytimg.com/yts/img/favicon_144-vfliLAfaB.png',
'type': 'favicon'}],
'locale': 'ko_KR',
'oembed': {'author_name': '백종원의 요리비책',
'author_url': 'https://www.youtube.com/channel/UCyn-K7rZLXjGl7VXGweIlcA',
'height': 270,
'html': '<iframe width="480" height="270" '
'src="https://www.youtube.com/embed/R6IT_f0XPT8?feature=oembed" '
'frameborder="0" allow="accelerometer; autoplay; '
'encrypted-media; gyroscope; picture-in-picture" '
'allowfullscreen></iframe>',
'provider_name': 'YouTube',
'provider_url': 'https://www.youtube.com/',
'thumbnail_height': 360,
'thumbnail_url': 'https://i.ytimg.com/vi/R6IT_f0XPT8/hqdefault.jpg',
'thumbnail_width': 480,
'title': '[백종원의 백종원 레시피] 강식당2 화제의 메뉴! 김치밥이 피오씁니다',
'type': 'video',
'version': '1.0',
'width': 480},
'status_code': 200,
'title': '[백종원의 백종원 레시피] 강식당2 화제의 메뉴! 김치밥이 피오씁니다',
'url': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'videos': [{'height': 270,
'src': 'https://www.youtube.com/embed/R6IT_f0XPT8?feature=oembed',
'width': 480}]}
위와 같이 이미지나 비디오같은 각종 정보들이 출력됩니다.
sample = lassie.fetch('https://www.youtube.com/watch?v=R6IT_f0XPT8', all_images=True)
pprint(sample)
lassie로 웹 컨텐츠를 가져와서 pprint로 출력하면 보기 좋게 출력할 때에 all_images와 같이 다양한 옵션으로 값을 다르게 가져올 수 있습니다.
{'images': [{'height': 360,
'src': 'https://i.ytimg.com/vi/R6IT_f0XPT8/hqdefault.jpg',
'width': 480},
{'src': 'https://s.ytimg.com/yts/img/favicon-vfl8qSV2F.ico',
'type': 'favicon'},
{'src': 'https://s.ytimg.com/yts/img/favicon_32-vflOogEID.png',
'type': 'favicon'},
{'src': 'https://s.ytimg.com/yts/img/favicon_48-vflVjB_Qk.png',
'type': 'favicon'},
{'src': 'https://s.ytimg.com/yts/img/favicon_96-vflW9Ec0w.png',
'type': 'favicon'},
{'src': 'https://s.ytimg.com/yts/img/favicon_144-vfliLAfaB.png',
'type': 'favicon'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '[[emojiAlt(item)]]',
'height': 24,
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image',
'width': 24},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '[[altLabelForImage]]',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '[[getSimpleText(instruction.previewInstruction.previewHeader)]]',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '[[getSimpleText(instruction.previewInstruction.fullImageHeader)]]',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '[[data.alt]]',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'height': 1,
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image',
'width': 1},
{'alt': '',
'height': 1,
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image',
'width': 1},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.gstatic.com/youtube/img/creator/merch/labs_header_cropped.png',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'type': 'body_image'},
{'alt': '',
'src': 'https://www.gstatic.com/youtube/img/branding/youtubeicon/svg/youtube_main_icon.svg',
'type': 'body_image'}],
'locale': 'ko_KR',
'oembed': {'author_name': '백종원의 요리비책',
'author_url': 'https://www.youtube.com/channel/UCyn-K7rZLXjGl7VXGweIlcA',
'height': 270,
'html': '<iframe width="480" height="270" '
'src="https://www.youtube.com/embed/R6IT_f0XPT8?feature=oembed" '
'frameborder="0" allow="accelerometer; autoplay; '
'encrypted-media; gyroscope; picture-in-picture" '
'allowfullscreen></iframe>',
'provider_name': 'YouTube',
'provider_url': 'https://www.youtube.com/',
'thumbnail_height': 360,
'thumbnail_url': 'https://i.ytimg.com/vi/R6IT_f0XPT8/hqdefault.jpg',
'thumbnail_width': 480,
'title': '[백종원의 백종원 레시피] 강식당2 화제의 메뉴! 김치밥이 피오씁니다',
'type': 'video',
'version': '1.0',
'width': 480},
'status_code': 200,
'title': '[백종원의 백종원 레시피] 강식당2 화제의 메뉴! 김치밥이 피오씁니다',
'url': 'https://www.youtube.com/watch?v=R6IT_f0XPT8',
'videos': [{'height': 270,
'src': 'https://www.youtube.com/embed/R6IT_f0XPT8?feature=oembed',
'width': 480}]}
all_images를 참으로 변경하면 페비콘, 비디오 썸네일뿐만 아니라 해당 웹 페이지의 모든 이미지를 가져오게 됩니다.
l = Lassie()
sample = l.fetch('https://www.youtube.com/watch?v=R6IT_f0XPT8')
pprint(sample)
Lassie 객체를 만들어서 웹 컨텐츠를 가져올 수도 있습니다.
l.request_opts = {
'headers': {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) '
'Version/12.1.1 Safari/605.1.15 '
}
}
l.request_opts = {
'timeout': 0.1
}
sample = l.fetch('https://www.youtube.com/watch?v=R6IT_f0XPT8')
pprint(sample)
request_opts로 헤더나 타임아웃을 설정할 수 있으며, 만약 타임아웃이 걸린다면 lassie.exceptions.LassieError가 발생됩니다.
Written on July 20, 2019