Last active
October 14, 2015 21:16
-
-
Save ramhiser/70a2d2c6dfcf10a1a548 to your computer and use it in GitHub Desktop.
Python script to download YouTube videos from a YouTube user ID.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
import logging | |
import requests | |
from lxml import html | |
from pytube import YouTube | |
def get_youtube_links(youtube_userid): | |
YT_ROOT = r'http://www.youtube.com' | |
videos_url = r'https://www.youtube.com/channel/%s/videos' % youtube_userid | |
get_params = {'view': 0, 'sort': 'dd', 'flow': 'list'} | |
response = requests.get(videos_url, params=get_params) | |
html_tree = html.fromstring(response.text) | |
yt_xpath = r'//*[@id="browse-items-primary"]//div[@class="yt-lockup-content"]//a' | |
youtube_links = [v.attrib['href'] for v in html_tree.xpath(yt_xpath)] | |
for link in youtube_links: | |
yield YT_ROOT + link | |
def main(args): | |
youtube_links = get_youtube_links(args.userid) | |
for yt_link in youtube_links: | |
yt = YouTube(yt_link) | |
video = yt.get(args.extension, args.resolution) | |
logging.info("Downloading video from: %s" % yt_link) | |
try: | |
video.download(args.directory) | |
except OSError: | |
logging.info("File already exists. Skipping: %s" % yt.filename) | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser() | |
parser.add_argument("-u", "--userid", | |
required=True, | |
type=str, | |
help="YouTube User ID") | |
parser.add_argument("-e", "--extension", | |
type=str, | |
help="File extension to grab. Default: %(default)s", | |
default="mp4") | |
parser.add_argument("-r", "--resolution", | |
type=str, | |
help="Video resolution to grab. Default: %(default)s", | |
default="720p") | |
parser.add_argument("-d", "--directory", | |
type=str, | |
help="Directory to put files. Default: %(default)s", | |
default=".") | |
args = parser.parse_args() | |
main(args) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment