def get_detail(self, detail_page_url: str): detail_api = self._base_url + detail_page_url resp = self.get(detail_api) if resp.status_code != 200: return AnimeDetailInfo() body = self.xpath(resp.text, '//div[@id="container"]')[0] # 详细信息所在的区域 anime_detail = AnimeDetailInfo() anime_detail.title = body.xpath(".//h4/text()")[0] anime_detail.cover_url = "https:" + body.xpath( './/img[@class="poster"]/@src')[0] anime_detail.desc = "".join( body.xpath( './/div[@class="detail_imform_desc_pre"]//text()')).replace( "\r\n", "").strip() anime_detail.category = body.xpath( './/li[@class="detail_imform_kv"][9]/span[2]/text()')[0] play_list_blocks = body.xpath( './/div[@class="movurl"]') # 播放列表所在的区域, 可能有多个播放列表 for i, block in enumerate(play_list_blocks, 1): vc = VideoCollection() vc.name = "播放列表 " + str(i) for video_block in block.xpath('.//li'): video = Video() video.name = video_block.xpath("a/@title")[0] video.raw_url = video_block.xpath("a/@href")[ 0] # /play/20170172?playid=1_1 video.handler = "AgeFansVideoHandler" # 绑定视频处理器 vc.append(video) if vc.num != 0: # 可能有空的播放列表 anime_detail.append(vc) return anime_detail
def get_detail(self, detail_page_url: str): url = self._base_url + detail_page_url logger.info(f"Parsing detail page: {url}") resp = self.get(url) if resp.status_code != 200: logger.warning(f"Response error: {resp.status_code} {url}") return AnimeDetailInfo() body = self.xpath(resp.text, '//div[@class="fire l"]')[0] anime_detail = AnimeDetailInfo() anime_detail.title = body.xpath("./div/h1/text()")[0] anime_detail.category = " ".join( body.xpath('.//div[@class="sinfo"]/span[3]/a/text()')) anime_detail.desc = body.xpath( './/div[@class="info"]/text()')[0].replace("\r\n", "").strip() anime_detail.cover_url = body.xpath( './/div[@class="thumb l"]/img/@src')[0] vc = VideoCollection() vc.name = "播放列表" video_blocks = body.xpath('.//div[@class="movurl"]//li') for block in video_blocks: video = Video() video.name = block.xpath("./a/text()")[0] video.raw_url = block.xpath("./a/@href")[0] # '/v/3849-162.html' video.handler = "YHDMVideoHandler" vc.append(video) anime_detail.append(vc) return anime_detail