ytdl-org/youtube-dl · error · ExtractorError

No videos found

Error message

No videos found

What it means

Raised by BioBioChileTVIE._real_extract when the article page HTML contains no iframe whose src points at rudo.video/vod/... — the embedded player BioBioChile articles use. The regex search returns None (the search was non-fatal), and the extractor converts that into 'No videos found'. It means the URL matched the extractor but the article genuinely has (or appears to have) no video.

Source

Thrown at youtube_dl/extractor/biobiochiletv.py:70

        },
    }, {
        'url': 'http://tv.biobiochile.cl/notas/2015/10/22/ninos-transexuales-de-quien-es-la-decision.shtml',
        'only_matching': True,
    }, {
        'url': 'http://tv.biobiochile.cl/notas/2015/10/21/exclusivo-hector-pinto-formador-de-chupete-revela-version-del-ex-delantero-albo.shtml',
        'only_matching': True,
    }]

    def _real_extract(self, url):
        video_id = self._match_id(url)

        webpage = self._download_webpage(url, video_id)

        rudo_url = self._search_regex(
            r'<iframe[^>]+src=(?P<q1>[\'"])(?P<url>(?:https?:)?//rudo\.video/vod/[0-9a-zA-Z]+)(?P=q1)',
            webpage, 'embed URL', None, group='url')
        if not rudo_url:
            raise ExtractorError('No videos found')

        title = remove_end(self._og_search_title(webpage), ' - BioBioChile TV')

        thumbnail = self._og_search_thumbnail(webpage)
        uploader = self._html_search_regex(
            r'<a[^>]+href=["\'](?:https?://(?:busca|www)\.biobiochile\.cl)?/(?:lista/)?(?:author|autor)[^>]+>(.+?)</a>',
            webpage, 'uploader', fatal=False)

        return {
            '_type': 'url_transparent',
            'url': rudo_url,
            'id': video_id,
            'title': title,
            'thumbnail': thumbnail,
            'uploader': uploader,
        }

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Open the article in a browser and confirm a video player actually exists; many articles are text-only.
  2. If a player exists, view source and check the iframe src — if Rudo's URL format changed, update the regex (host/path pattern).
  3. If the iframe is JS-injected, the extractor would need to parse the embed URL from a script variable instead; report upstream.
  4. For the direct video case, extract the Rudo URL yourself (rudo.video/vod/<id>) and pass it to the Rudo extractor.

Example fix

// before - caller feeds any biobiochile article URL to youtube-dl
YoutubeDL().extract_info('https://www.biobiochile.cl/noticias/...', download=True)

// after - pre-check the page for a rudo embed before invoking the extractor
import re, requests
html = requests.get(article_url).text
m = re.search(r'<iframe[^>]+src=["\'](https?:)?//rudo\.video/vod/[0-9a-zA-Z]+["\']', html)
if not m:
    print('article has no embedded video; skip')
else:
    YoutubeDL().extract_info(m.group(0).split('src=')[1].strip('"\''), download=True)
Defensive patterns

Strategy: validation

Validate before calling

import re, requests

def biobio_article_has_video(url):
    html = requests.get(url).text
    return bool(re.search(r'<iframe[^>]+src=["\'](?:https?:)?//rudo\.video/vod/[0-9a-zA-Z]+["\']', html))

Try / catch

try:
    ydl.extract_info(article_url)
except ExtractorError as e:
    if str(e) == 'No videos found':
        skip_article(article_url)  # text-only article or embed format change; not transient
    else:
        raise

Prevention

When it happens

Trigger: Extracting a BioBioChile article URL that embeds no Rudo video (text-only or photo article), or one whose player iframe uses a different host/format (rudo URL pattern changed, lazy-loaded src, or a new player domain) so the regex at biobiochiletv.py:70 fails to match.

Common situations: Article links shared from news feeds where only some articles contain video; Rudo changing embed URL shape (e.g. rudo.video/vod vs new path); iframes injected by JavaScript after initial HTML so the downloaded source lacks them; ad/tracking iframes confusing manual inspection.

Related errors


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