반응형
들어가며
여러 웹사이트를 돌아다니며 크롤링하다 보면 가끔은 내PC에 저장하고 싶은 정보들이 있을 수 있다.
나 같은 경우 필요성을 느낀 포인트가 한가지 있는데,
포털사이트에서 신문기사를 보면 너무 불필요하게 광고가 덕지덕지 있어 늘 불편했다.
인쇄버튼을 누르면 광고 없이 깔끔하게 볼 수 있잖아!
파이썬과 셀레니움에는 언제나 정답이 있다!!
웹페이지 PDF 파일로 저장하기
아래 예시로 사용할 웹페이지가 있다. 기사 시작하기 전부터 영상이 딸린 커다란 광고가 붙어 있다.
URL : https://www.mk.co.kr/news/world/10584572
그리고 기사 헤드라인 아래쪽으로 보면 프린터 모양 '인쇄' 버튼이 있는데 이걸 눌러 보면 URL은 아래와 같다.
URL : https://www.mk.co.kr/print/10584572
웹사이트 마다 다르지만, 보통은 이런 주소체계다. 뉴스기사 키 값이 될 뒤 숫자는 동일하며, 주소 앞쪽으로 'print'라는 단어를 위치 시킨다.
샘플코드
샘플코드에서는 우리가 웹페이지에서 인쇄버튼을 눌렀을 때 URL 주소를 가지고 PDF 파일을 생성해보려고 한다.
import os
import json
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from datetime import datetime
''' 파일 저장을 위한 디렉토리 생성 '''
save_dir = os.path.join(os.getcwd(), str(datetime.today().date()))
if not os.path.isdir(save_dir):
os.mkdir(save_dir)
''' PDF 파일 저장하기 위한 setting '''
settings = {
"recentDestinations": [{
"id": "Save as PDF",
"origin": "local",
"account": "",
}],
"selectedDestinationId": "Save as PDF",
"version": 2,
#"isHeaderFooterEnabled": False,
#"isLandscapeEnabled": True
}
prefs = {'printing.print_preview_sticky_settings.appState': json.dumps(settings),
"download.prompt_for_download": False,
"profile.default_content_setting_values.automatic_downloads": 1,
"download.default_directory": save_dir,
"savefile.default_directory": save_dir,
"download.directory_upgrade": True,
"safebrowsing.enabled": True}
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('prefs', prefs)
chrome_options.add_argument('--kiosk-printing')
# chrome_options.add_argument('headless')
driver = webdriver.Chrome(executable_path=ChromeDriverManager().install(), options=chrome_options)
driver.implicitly_wait(5)
url1 = 'https://n.news.naver.com/article/654/0000028666?cds=news_media_pc&type=editn'
url2 = 'https://n.news.naver.com/article/print/654/0000028666'
driver.get(url1)
driver.execute_script("window.print();")
driver.close()
'SW개발 > python' 카테고리의 다른 글
[pandas] 그룹별 누적합 집계하는 방법 (0) | 2022.07.31 |
---|---|
[python] pandas read_csv 데이터 읽을 때 날짜/시간 파싱 하기 (0) | 2022.06.01 |
[python] pandas rolling 과 shift rolling (0) | 2021.11.22 |
[python] 딕셔너리 Dictionary 구조 활용 (0) | 2021.11.17 |
[python] pandas pivot_table 데이터프레임을 다루는 방법 (0) | 2021.11.07 |