Skip to content

Instantly share code, notes, and snippets.

@ramhiser
Last active October 14, 2015 21:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ramhiser/70a2d2c6dfcf10a1a548 to your computer and use it in GitHub Desktop.
Save ramhiser/70a2d2c6dfcf10a1a548 to your computer and use it in GitHub Desktop.
Python script to download YouTube videos from a YouTube user ID.
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