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

  1. Open the URL in a browser to confirm the item is gone.
  2. Re-locate the content via the uploader's profile page on motherless.com.
  3. 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

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


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/6cfefbc0b13a6b49. Report an issue: GitHub.