필요한 모듈 가져오기
import os.path
from DrissionPage import ChromiumPage
from DrissionPage.easy_set import set_paths
os.system("pip install loguru lxml pandas")
import time
import pandas as pd
from loguru import logger
import requests
from lxml import etree
비디오 다운로드
def download_video(url_list, save_name):
if url_list:
req = requests.get(url_list[0].replace("//", "http://"))
logger.info({"Downloading video": save_name})
with open(save_name, "wb") as f:
f.write(req.content)
def get_download_link(url):
# URL이 //로 시작하는 경우 http로 바꿔야 합니다.://
if url.startswith("//"):
url = "http:" + url
if "https://..com" not in url:
url = "https://..com" + url
logger.info({"get url": url})
file_name = url.split("/")[-1][:15]
save_name = os.path.join(save_download_video_path, "{}.mp4".format(file_name))
if os.path.exists(save_name):
logger.info({"already save": save_name})
else:
page.get(url)
time.sleep(1)
logger.info({"run": url})
logger.info({"wait for loading": "10s"})
time.sleep(10)
root = etree.HTML(page.html)
res = root.xpath("//video//source/@src")
logger.info({"start downloading url": res})
download_video(res, save_name)
브라우저 동작 예시를 만들고, 웹 페이지를 열고, 드롭다운을 3초간 기다린 다음, 드롭다운을 N번 반복합니다.
# 브라우저 드라이버 인스턴스 생성, 웹 페이지 열기, 3초간 기다린 후 아래로 스크롤, 10회 아래로 스크롤.
def create_selenium_driver(url):
page.get(url)
logger.info({"wait for loading": "3s", "msg": "웹 페이지 정보 로딩 대기"})
time.sleep(3)
for i in range(scroll_times):
page.scroll.down(200)
time.sleep(1)
page_source = page.html
root = etree.HTML(page_source)
res = root.xpath("//a/@href")
for i in res:
if "video" in i:
logger.info({"get a video url": i})
get_download_link(i)
기타 기본 매개 변수
# edge브라우저 드라이버 경로
driver_path = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
# 드라이버 설정
set_paths(browser_path=driver_path)
# 브라우저 드라이버 인스턴스 생성
page = ChromiumPage()
page.get("https://..com/")
# 다운로드한 데이터 저장 경로
save_download_video_path = "./video"
if not os.path.exists(save_download_video_path):
os.makedirs(save_download_video_path)
# 아래로 스크롤할 횟수
try:
scroll_times = int(input("페이지를 몇 번 아래로 내릴지, 매번 자동으로 200픽셀을 가져올지, 다음과 같은 숫자를 입력합니다.:10>>>"))
except Exception as e:
logger.error({"입력 오류":str(e)})
scroll_times = 10
else:
while True:
res = input("please input a url")
if res == "q":
break
if "video" in res:
logger.info({"get a video url": i})
get_download_link(i)
else:
create_selenium_driver(res)
# 인스턴스 닫기
page.quit()