from yt_dlp.extractor.pornhub import PornHubIE import re # 不起作用,还是修改了源码 class CustomPornHubIE(PornHubIE): def _real_extract(self, url): # 打印当前解析的 URL self.to_screen(f"调试: 处理的 URL 是: {url}") # 调用父类的提取逻辑 original_data = super()._real_extract(url) # 下载网页内容 webpage = self._download_webpage(url, url) self.to_screen(f"调试: 收藏原始内容: {webpage}") # 提取收藏次数(favoritesCounter 的内容) favorites_raw = self._search_regex( r'\s*([\dKkMm,. ]+)\s*', webpage, 'favorites count', fatal=False) # 调试:打印收藏原始内容 self.to_screen(f"调试: 收藏原始内容: {favorites_raw}") self.to_screen(f"调试: 收藏原始内容: {original_data}") # 如果找到收藏次数,则进行解析和单位转换 if favorites_raw: # 清理空格、换行,并解析数字和单位 favorites_cleaned = favorites_raw.strip().replace(',', '') favorites_count = self._convert_to_number(favorites_cleaned) original_data['favorites_count'] = favorites_count else: original_data['favorites_count'] = 0 return original_data def _convert_to_number(self, value): """ 将字符串解析为实际数字,支持 K(千)和 M(百万)等单位 """ match = re.match(r'^([\d.]+)([KkMm]?)$', value) if not match: return None number = float(match.group(1)) unit = match.group(2).upper() if unit == 'K': # 千 return int(number * 1000) elif unit == 'M': # 百万 return int(number * 1000000) return int(number) # 无单位,直接返回数字