ytdl-org/youtube-dl · error · ExtractorError
No episodes found
Error message
No episodes found
What it means
Raised by YoukuShowIE._extract_entries when the playlist/show HTML returned by the show API does not contain the expected drama-list markup. The code looks for an element with class 'p-drama-grid' or 'p-drama-half-row' via get_element_by_class; if neither is present in playlist_data, it concludes there are no episodes and raises. This means the show page either truly has no listed episodes or Youku changed its playlist HTML structure.
Source
Thrown at youtube_dl/extractor/youku.py:264
'url': 'http://list.youku.com/show/id_zefbfbd61237fefbfbdef.html',
'only_matching': True,
}, {
# Wrong number of reload_id.
'url': 'http://list.youku.com/show/id_z20eb4acaf5c211e3b2ad.html',
'only_matching': True,
}]
def _extract_entries(self, playlist_data_url, show_id, note, query):
query['callback'] = 'cb'
playlist_data = self._download_json(
playlist_data_url, show_id, query=query, note=note,
transform_source=lambda s: js_to_json(strip_jsonp(s))).get('html')
if playlist_data is None:
return [None, None]
drama_list = (get_element_by_class('p-drama-grid', playlist_data)
or get_element_by_class('p-drama-half-row', playlist_data))
if drama_list is None:
raise ExtractorError('No episodes found')
video_urls = re.findall(r'<a[^>]+href="([^"]+)"', drama_list)
return playlist_data, [
self.url_result(self._proto_relative_url(video_url, 'http:'), YoukuIE.ie_key())
for video_url in video_urls]
def _real_extract(self, url):
show_id = self._match_id(url)
webpage = self._download_webpage(url, show_id)
entries = []
page_config = self._parse_json(self._search_regex(
r'var\s+PageConfig\s*=\s*({.+});', webpage, 'page config'),
show_id, transform_source=js_to_json)
first_page, initial_entries = self._extract_entries(
'http://list.youku.com/show/module', show_id,
note='Downloading initial playlist data page',
query={
'id': page_config['showid'],View on GitHub (pinned to 956b8c5855)
Solutions
- Open the show URL in a browser and confirm episodes are actually listed for your region; if none, the error is correct.
- Dump the playlist_data HTML (print or log it before the check) and inspect what container class the episodes now use.
- Add the new class name to the get_element_by_class fallback chain in _extract_entries, e.g. get_element_by_class('p-drama-<new-class>', playlist_data).
- Verify the JSONP transform still yields valid JSON — if .get('html') returns an error page, fix the query params (callback='cb') or endpoint first.
Example fix
// before
drama_list = (get_element_by_class('p-drama-grid', playlist_data)
or get_element_by_class('p-drama-half-row', playlist_data))
// after
drama_list = (get_element_by_class('p-drama-grid', playlist_data)
or get_element_by_class('p-drama-half-row', playlist_data)
or get_element_by_class('p-drama-new-grid', playlist_data)) // class observed in current HTML Defensive patterns
Strategy: validation
Validate before calling
def has_episode_grid(playlist_html: str) -> bool:
return ('p-drama-grid' in playlist_html
or 'p-drama-half-row' in playlist_html) Try / catch
try:
entries = ydl.extract_info(show_url)
except ExtractorError as e:
if 'No episodes found' in str(e):
# verify manually: page may genuinely be empty or markup changed
log_and_flag_for_review(show_url)
else:
raise Prevention
- Before bulk-crawling shows, spot-check one show page's HTML for the drama-grid class.
- Track upstream extractor commits when Youku redesigns pages; HTML-scraping breakage is routine.
When it happens
Trigger: Extracting a Youku show URL (show.youku.com) where the returned html field lacks both 'p-drama-grid' and 'p-drama-half-row' containers — empty/removed shows, region-served fallback pages, or a template change by Youku.
Common situations: Shows taken down or not yet published in the requested region; Youku shipping a new CSS class scheme for episode grids; the JSONP payload (parsed via js_to_json(strip_jsonp(...))) containing an error/placeholder page instead of the drama grid.
Related errors
- Invalid url for track %d of album url %s
- The page doesn't contain any tracks
- Unable to login: %s
- An extractor error has occurred.
- Course %s does not exist
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/81b49c799fdb98e7.
Report an issue: GitHub.