ytdl-org/youtube-dl · error · ExtractorError
Video %s does not exist
Error message
Video %s does not exist
What it means
Raised by the Motherless extractor when the downloaded webpage contains either the '<title>404 - MOTHERLESS.COM<' marker or '>The page you're looking for cannot be found.<' — the two known 404-page fingerprints. Expected=True, so it cleanly reports that the video id does not exist rather than failing on later title/URL scraping.
Source
Thrown at youtube_dl/extractor/motherless.py:91
'categories': list,
'upload_date': '20210104',
'uploader_id': 'anonymous',
'thumbnail': r're:https?://.*\.jpg',
'age_limit': 18,
},
'params': {
'skip_download': True,
},
}]
def _real_extract(self, url):
video_id = self._match_id(url)
webpage = self._download_webpage(url, video_id)
if any(p in webpage for p in (
'<title>404 - MOTHERLESS.COM<',
">The page you're looking for cannot be found.<")):
raise ExtractorError('Video %s does not exist' % video_id, expected=True)
if '>The content you are trying to view is for friends only.' in webpage:
raise ExtractorError('Video %s is for friends only' % video_id, expected=True)
title = self._html_search_regex(
(r'(?s)<div[^>]+\bclass=["\']media-meta-title[^>]+>(.+?)</div>',
r'id="view-upload-title">\s+([^<]+)<'), webpage, 'title')
video_url = (self._html_search_regex(
(r'setup\(\{\s*["\']file["\']\s*:\s*(["\'])(?P<url>(?:(?!\1).)+)\1',
r'fileurl\s*=\s*(["\'])(?P<url>(?:(?!\1).)+)\1'),
webpage, 'video URL', default=None, group='url')
or 'http://cdn4.videos.motherlessmedia.com/videos/%s.mp4?fs=opencloud' % video_id)
age_limit = self._rta_search(webpage)
view_count = str_to_int(self._html_search_regex(
(r'>([\d,.]+)\s+Views<', r'<strong>Views</strong>\s+([^<]+)<'),
webpage, 'view count', fatal=False))
like_count = str_to_int(self._html_search_regex(
(r'>([\d,.]+)\s+Favorites<',View on GitHub (pinned to 956b8c5855)
Solutions
- Open the URL in a browser to confirm the item is gone.
- Re-locate the content via the uploader's profile page on motherless.com.
- No client-side workaround recovers deleted content; source it elsewhere.
Defensive patterns
Strategy: validation
Validate before calling
# Pre-flight HEAD check before handing the URL to the extractor
import urllib.request
req = urllib.request.Request(url, method='HEAD', headers={'User-Agent': 'Mozilla/5.0'})
assert urllib.request.urlopen(req).status == 200, 'Motherless item unreachable' Type guard
def motherless_page_is_404(html):
return ('<title>404 - MOTHERLESS.COM<' in html) or (">The page you're looking for cannot be found.<" in html) Try / catch
try:
info = ydl.extract_info(url, download=False)
except ExtractorError as e:
if 'does not exist' in str(e) or 'for friends only' in str(e):
mark_unavailable(url) # dead or private; remove from queue permanently
else:
raise Prevention
- Validate motherless ids against the uploader's profile before batching.
- Classify 'does not exist' and 'for friends only' as permanent skips in queue tooling.
When it happens
Trigger: self._download_webpage returns a 404 error page (served with a 200-level body the downloader accepted) whose HTML contains one of the two marker strings.
Common situations: Gallery item or video deleted/removed by moderation; mistyped or truncated video id in the URL; old links from forums whose ids have been purged; site template change making both markers stale (error then shifts to a title-scrape failure instead).
Related errors
- %s
- Course %s does not exist
- That clip does not exist.
- The video is not found.
- This video is no longer available.
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/6cfefbc0b13a6b49.
Report an issue: GitHub.