{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "86aa5d41-d68e-4ffe-a438-ba1873cb803d", "metadata": {}, "outputs": [], "source": [ "pip install pytube" ] }, { "cell_type": "code", "execution_count": null, "id": "119327c4-583d-497e-a342-6162c525028d", "metadata": {}, "outputs": [], "source": [ "from bs4 import BeautifulSoup\n", "from lxml import etree\n", "import urllib\n", "import requests\n", "import sys" ] }, { "cell_type": "code", "execution_count": 3, "id": "331b293f-c5c6-42ad-9ab5-759bb8873714", "metadata": {}, "outputs": [], "source": [ "from bs4 import BeautifulSoup\n", "from lxml import etree\n", "import urllib\n", "import requests\n", "import sys\n", "def fetch_titles(url):\n", " video_titles = []\n", " html = requests.get(url)\n", " soup = BeautifulSoup(html.text, \"lxml\")\n", " for entry in soup.find_all(\"entry\"):\n", " for link in entry.find_all(\"link\"):\n", " youtube = etree.HTML(urllib.request.urlopen(link[\"href\"]).read()) \n", " video_title = youtube.xpath(\"//span[@id='eow-title']/@title\") \n", " if len(video_title)>0:\n", " video_titles.append({\"title\":video_title[0], \"url\":link.attrs[\"href\"]})\n", " return video_titles\n", "\n", "def main():\n", " if sys.argv.__len__() == 1:\n", " print(\"Error: You should specifying keyword\")\n", " print(\"eg: python3 ./main.py KEYWORD\")\n", " return\n", "\n", " url=\"https://www.youtube.com/playlist?list=PLwBrtDMzZshuPMEH2gmoBe4JQvlbTRUYX\"\n", " keyword = sys.argv[1]\n", "\n", " video_titles = fetch_titles(url)\n", " for video in video_titles:\n", " if video[\"title\"].__contains__(keyword):\n", " print(video[\"url\"])\n", " break # add this line, if you want to print the first match only\n", "\n", "\n", "if __name__ == \"__main__\":\n", " main()" ] }, { "cell_type": "code", "execution_count": 2, "id": "4edec425-7cfe-4618-8306-ff609a754491", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ ":2: FutureWarning: Passing a negative integer is deprecated in version 1.0 and will not be supported in future version. Instead, use None to not limit the column width.\n", " pd.set_option('max_colwidth',-1)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: []\n", "Index: []" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "pd.set_option('max_colwidth',-1)\n", "\n", "from bs4 import BeautifulSoup as bs\n", "import requests\n", "\n", "my_url = \"https://www.youtube.com/playlist?list=PLwBrtDMzZshuPMEH2gmoBe4JQvlbTRUYX\"\n", "\n", "r = requests.get(my_url)\n", "page = (r.text)\n", "soup=bs(page,'html.parser')\n", "\n", "d = []\n", "for match in soup.find_all('div',class_=\"yt-lockup-content\"):\n", " view = match.find('ul',class_=\"yt-lockup-meta-info\")\n", " d.append(\n", " {\n", " 'Title': match.a.text,\n", " 'View': view.text.split(\"views\")[0],\n", " 'Upload date':view.text.split(\"views\")[1]\n", " }\n", " )\n", "\n", "pd.DataFrame(d)" ] }, { "cell_type": "code", "execution_count": 1, "id": "7da92384-8a80-4507-8229-c28c19b5fbd5", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of videos in playlist: 88\n", "[ChrisP의 STM32F4를 이용한 자작드론 개발] 시작 - 실내비행(수동조종) https://www.youtube.com/watch?v=Pcu4daDNKA0\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 2-3강. UART Rx Interrupt (수신인터럽트) https://www.youtube.com/watch?v=34ebHtXamNU\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 8-4강. FC 데이터 송신 (ID: 0x10 AHRS 메시지, 타이머 사용) (2/2) https://www.youtube.com/watch?v=S9k3DMfwzN8\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 11강. 롤 피치 Cascade 더블 PID 제어 실험 https://www.youtube.com/watch?v=B9BYkA5-7LQ\n", "[ChrisP의 STM32F4 강의 강좌] 0일차 - KEIL 및 ST Link 드라이버 설치, 환경설정 https://www.youtube.com/watch?v=6WcEmepiVDE\n", "[ChrisP의 STM32F4 속성 강의 강좌] 1강 - GPIO로 LED점멸 및 스위치 입력 https://www.youtube.com/watch?v=tN44TFsGLz4\n", "[ChrisP의 STM32F4 속성 강의 강좌] 2강 - USART로 PC와 통신 (폴링 방식) - 기본편 https://www.youtube.com/watch?v=pt_DSU3LPGE\n", "[ChrisP의 STM32 속성 강의 강좌] 2강 - USART를 사용하여 PC로 LED 점멸 (폴링 방식) - 응용편 https://www.youtube.com/watch?v=SVi7h7wpGkw\n", "[ChrisP의 STM32 속성 강의 강좌] 3강 - Text LCD 문자 출력 - 기본편 https://www.youtube.com/watch?v=1vBBXejNn4k\n", "[ChrisP의 STM32 속성 강의 강좌] 3강 - PC(UART)에서 입력받은 문자를 Text LCD 에 출력 - 응용편 https://www.youtube.com/watch?v=rX9JY_hMWGQ\n", "[ChrisP의 STM32 속성 강의 강좌] 4강 - 타이머/카운터 인터럽트 (기본편) https://www.youtube.com/watch?v=K6VUc0c7ELg\n", "[ChrisP의 STM32 속성 강좌 강의] 4강 - 타이머, 7세그먼트(segment), Text LCD로 디지털시계 제작 - 응용편 https://www.youtube.com/watch?v=xaPdXDVv_0E\n", "[ChrisP의 STM32F4 속성 강의 강좌] 5강 - EXTI 외부인터럽트, USART 수신인터럽트 - 기본편 https://www.youtube.com/watch?v=QCygsK6cdek\n", "[ChrisP의 STM32F4 속성 강의 강좌] 6강 - 타이머/카운터로 PWM생성 및 LED밝기 제어 - 기본편 https://www.youtube.com/watch?v=NYJeCZ7L7i8\n", "[ChrisP의 STM32F4 속성 강의 강좌] 6강 - PWM로 부저, 서보, DC모터(BA6208사용) 제어 - 응용편 https://www.youtube.com/watch?v=4q-pj3QZmto\n", "[ChrisP의 STM32F4 속성 강의 강좌] 7강 - ADC와 DMA를 이용한 가변저항 및 CDS 조도센서 입력 - 기본편 https://www.youtube.com/watch?v=jsIX7jMMTEg\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 0강. TrueSTUDIO 설치 (1) https://www.youtube.com/watch?v=WzmPlObIr_c\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 0강. CubeMX 설치 (2) https://www.youtube.com/watch?v=WsO_qSnTTao\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 1강. GPIO로 LED출력 및 스위치 입력 https://www.youtube.com/watch?v=myo3aTcLxzM\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 2-1강. UART통신 (폴링방식) https://www.youtube.com/watch?v=_7Ll95FITn4\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 2-2강. UART printf 사용하기 https://www.youtube.com/watch?v=6uq9v4nfuag\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 3강. Character LCD (Text LCD) 문자열 및 변수출력 https://www.youtube.com/watch?v=BfftcjNR-cI\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 4강. TIM Interrupt (타이머 인터럽트) https://www.youtube.com/watch?v=GtpHPYGYGNo\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 5강. EXTI (외부인터럽트) https://www.youtube.com/watch?v=t9nuAqMAR6c\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 6강. PWM 생성하기(1) https://www.youtube.com/watch?v=2Y_QoSYBJ0U\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 6강. PWM으로 SG90 서보, 부저, DC모터 구동 (2) https://www.youtube.com/watch?v=haWC4s2s90c\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 6강. 실시간 PWM 주기 변경 (3) https://www.youtube.com/watch?v=5GvNBfGvVJQ\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 7강. ADC with DMA https://www.youtube.com/watch?v=o6hZEyv6s88\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 8강. DAC https://www.youtube.com/watch?v=tKfpOOQeaac\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 9강. I2C 통신(AT24C04 EEPROM) https://www.youtube.com/watch?v=gnthBIGKWxo\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 10강. SPI 통신(VS1003 음성코덱) https://www.youtube.com/watch?v=Ahttnd0pfHg\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 11강. SDIO + FATFS 파일입출력 (1) https://www.youtube.com/watch?v=U8X7urxhygw\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 11강. SD카드(FATFS) + VS1003 MP3 플레이어 (2) https://www.youtube.com/watch?v=VyPDOkw2USQ\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 12-1강. ETH + LwIP (UDP Echo Server) https://www.youtube.com/watch?v=4_xE-ZnIefQ\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 12-2강. ETH + LwIP (UDP 수신된 데이터 활용하기) https://www.youtube.com/watch?v=2L9oUyUDGOs\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 13-1강. CAN 통신 개념 https://www.youtube.com/watch?v=84IAJDuJdxc\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 13-2강. CAN 설정 및 송신코드 작성 https://www.youtube.com/watch?v=6vR3lX8ojDA\n", "[HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 속성 강의 강좌] 13-3강. CAN 필터 MASK ID 설정 및 수신코드 작성 (완) https://www.youtube.com/watch?v=T65WpTyv8Po\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] Intro 영상 https://www.youtube.com/watch?v=DnyNhIqLJXw\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 0-1강. 강의 소개 (하드웨어 구성품 소개) https://www.youtube.com/watch?v=ZI_a-fmDvGw\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 0-2강. 강의 소개 (강의 목차 및 CubeIDE 설치) https://www.youtube.com/watch?v=RYrHzdQ3xyc\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 1-1강. FC 전원 연결 및 디버그 LED 점멸(GPIO) https://www.youtube.com/watch?v=JGAF2UraZUM\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 1-2강. 디버그 부저 구동 (TIM-PWM) https://www.youtube.com/watch?v=7sIKzSTfPJI\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 1-3강. 디버그 UART 및 printf 함수 출력 https://www.youtube.com/watch?v=hsjv1SdNLZk\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 2-1강. BNO080 9축 센서 인터페이스(쿼터니언 회전 각도 계산) https://www.youtube.com/watch?v=BkKuUxFzAQU\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 2-2강. ICM-20602 6축 센서 인터페이스(3축 각속도 계산) https://www.youtube.com/watch?v=9HNYw4b8Q_k\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 2-3강. LPS22HH 기압 센서 인터페이스(기압고도 계산) https://www.youtube.com/watch?v=cJpQZ8u2yTg\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 3-1강. U-blox M8N GPS NMEA 데이터 수신 및 u-center 설치 https://www.youtube.com/watch?v=Fg8h73yZYSA\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 3-2강. M8N 설정 및 UBX 프로토콜 수신(u-center 사용) https://www.youtube.com/watch?v=gGCcEVFUai8\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 3-3강. UBX 메시지 프레임 분석 https://www.youtube.com/watch?v=m1i26ofIxMw\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 3-4강. UBX 메시지 수신 및 파싱 https://www.youtube.com/watch?v=5IIv1p_Vn_0\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 3-5강. M8N 설정 코드 작성 https://www.youtube.com/watch?v=n4dRZZLRl-0\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 4-1강. Flysky FS-i6 설정 및 FS-iA6B i-Bus 데이터 수신 https://www.youtube.com/watch?v=_U_wOGcLe3U\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 4-2강. i-Bus 메시지 분석 및 체크섬 검사 https://www.youtube.com/watch?v=ylp-ZKjsPiE\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 4-3강. i-Bus 메시지 파싱 https://www.youtube.com/watch?v=3tUdgiBscNU\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 4-4강. i-Bus Fail-safe 설정 및 파싱 https://www.youtube.com/watch?v=jk-CFKyHqZY\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 5강. 드론 기체 조립 및 셋팅 https://www.youtube.com/watch?v=Z3Yn2qZBhqo\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 6-1강. ESC 프로토콜 설명(Oneshot, Multishot, Dshot, Proshot) https://www.youtube.com/watch?v=gDHL4UgI6Lk\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 6-2강. Oneshot125 PWM 생성 https://www.youtube.com/watch?v=kxnXwIwKto4\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 6-3강. ESC 캘리브레이션 및 모터 구동 https://www.youtube.com/watch?v=iI4gBJo9L5E\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 6-4강. 선택적 ESC 캘리브레이션 모드 진입 (FS-i6 스위치 이용) https://www.youtube.com/watch?v=7LIrF4-dMBc\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 4-5강. FS-i6X i-Bus Fail-safe 설정 및 파싱 (보충 영상) https://www.youtube.com/watch?v=qE8dyCeUg64\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 7-1강. AT24C08 EEPROM 읽기/쓰기 https://www.youtube.com/watch?v=eDR69qklf1U\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 7-2강. EEPROM 데이터 관리 프로토콜 정의 https://www.youtube.com/watch?v=OsNICMJ4Cpg\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 7-3강. 배터리 전압 체크 및 저전압 알람 https://www.youtube.com/watch?v=DJc_jFvng20\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 7-4강. BNO080 캘리브레이션 https://www.youtube.com/watch?v=677mWDAT8xc\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 7-5강. ICM-20602 자이로 DC 바이어스 제거 https://www.youtube.com/watch?v=BhR-Myl3dYw\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 8-1강. 3DR Telemetry 설정 및 데이터 송수신 https://www.youtube.com/watch?v=N4rH9JTPKQA\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 8-2강. M-HIVE Ground Station V0.9.6 소개 https://www.youtube.com/watch?v=kr1NKgEp_e4\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 8-3강. FC ↔ GCS 간 통신 프로토콜 V0.9.1 설명 https://www.youtube.com/watch?v=IAJoQK8eQLU\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 8-4강. FC 데이터 송신 (ID: 0x10 AHRS 메시지, 딜레이 사용) (1/2) https://www.youtube.com/watch?v=NZTzPQugYK4\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 8-5강. FC 데이터 송신 (ID: 0x11 GPS 메시지, 타이머 사용) https://www.youtube.com/watch?v=ATBbcc3VH6c\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 8-6강. FC 데이터 송신 (ID: 0x00~0x05 PID 게인 메시지) https://www.youtube.com/watch?v=3rTQIzFuLnQ\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 8-7강. FC 데이터 수신 (ID: 0x00~0x05 PID 게인 설정 메시지) https://www.youtube.com/watch?v=0c95pR3AbOI\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 8-8강. FC 데이터 수신 (ID: 0x10 PID 게인 요청 메시지) https://www.youtube.com/watch?v=7eKJKGGj4rk\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 9-1강. 센서 연결상태 및 PID 게인 로드상태 검사 https://www.youtube.com/watch?v=1epRvKDbgz0\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 9-2강. 부팅 및 아밍 시, 송신기 쓰로틀 및 SWA 상태 검사 https://www.youtube.com/watch?v=3WFf4Sx6VtU\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 9-3강. 비행 중, Fail-safe 모터 정지 및 저전압 경고음 출력 https://www.youtube.com/watch?v=fkjWanK6R4U\n", "드론 시뮬레이터 소개 - FPV FreeRider Recharged https://www.youtube.com/watch?v=E0AKCclOYtI\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] Part3. 비행제어 - 비행 테스트 (한강드론공원) https://www.youtube.com/watch?v=8CksQ-mAfFw\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 10-1강. PID 제어를 위한 1kHz 타이머 생성 및 센서 부호 일치화 https://www.youtube.com/watch?v=xSUX98q_XPc\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 10-2강. 싱글 PID 제어 이론 - 설명 (1/2) https://www.youtube.com/watch?v=xiDD0eygOPA\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 10-2강. 싱글 PID 제어 이론 - 구현 (2/2) https://www.youtube.com/watch?v=pIUASjslbC8\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 10-3강. 더블 PID 제어 이론 https://www.youtube.com/watch?v=-k9D8edMgCU\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 12-1강. 요 각속도 싱글 PID 제어 https://www.youtube.com/watch?v=iqYLS5YLIJA\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 12-2강. 요 각도 싱글 PID 제어 https://www.youtube.com/watch?v=cfivx15eksQ\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 13강. 강의 마무리 (1/2) https://www.youtube.com/watch?v=U0myrr1GfEk\n", "[STM32CubeIDE를 이용한 STM32F4 자작드론 개발하기] 13강. 강의 마무리 및 기압계 고도제어 시연 (2/2) (완) https://www.youtube.com/watch?v=Y5oSYm4iWP8\n" ] } ], "source": [ "import re\n", "from pytube import YouTube\n", "from pytube import Playlist\n", "\n", "\n", "playlist = Playlist(\"https://www.youtube.com/playlist?list=PLwBrtDMzZshuPMEH2gmoBe4JQvlbTRUYX\")\n", "playlist._video_regex = re.compile(r\"\\\"url\\\":\\\"(/watch\\?v=[\\w-]*)\")\n", "print('Number of videos in playlist: %s' % len(playlist.video_urls))\n", "for url in playlist.video_urls:\n", " yt = YouTube(url)\n", " print(yt.title + \" \" + url)\n", " " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 5 }