import time import requests from loguru import logger from bs4 import BeautifulSoup from dataService.dto.SeedInfo import SeedInfo from dataService import MySqlService as mysql from ariaDownloaderService import AriaDownloader as ariaDownloader """ 获取页面信息 """ def get_page(url): logger.debug("开始获取页面信息:{}", url) try: response = requests.get(url) soup = BeautifulSoup(response.content, 'html.parser') logger.debug("页面信息获取成功。URL: {}", url) return soup except Exception as e: logger.error("获取页面信息失败。URL: {}, 错误: {}", url, str(e)) return None """ 用于获取目标元素上的详情页url """ def get_target_element_list(page_content): logger.debug("开始提取可下载内容的链接") downloadable_url_list = [] try: for element in page_content.find_all("div", {"class": "card-body"}): if "可下" in element.find("div", {"class": "video-list-item-tag-wrapper"}).text: url = element.find("a")["href"] downloadable_url_list.append(url) logger.debug("发现可下载链接: {}", url) logger.debug("链接提取完成。共发现 {} 个链接。", len(downloadable_url_list)) return downloadable_url_list except Exception as e: logger.error("提取链接时出现错误: {}", str(e)) return [] def get_seed_from_element_detail(element_detail): logger.debug("开始解析页面中的种子信息") seedInfoList = [] time.sleep(2) try: from_url = element_detail.find("link")["href"] title = element_detail.find("meta", {"name": "description"})["content"] for e in element_detail.find("tbody").find_all("a", class_="magnet-name text-truncate d-block small"): seedInfo = SeedInfo(title, e["href"], "1", url=from_url) seedInfoList.append(seedInfo) logger.debug("解析到种子信息: 标题:{},链接:{}", title, e["href"]) logger.debug("页面种子信息解析完成。共 {} 个种子。", len(seedInfoList)) return seedInfoList except Exception as e: logger.error("解析种子信息时出现错误: {}", str(e)) return [] def main(): # 1-18 for page in range(5): url = f"https://freejavbt.com/censored/filter?c=212&page={page+1}" logger.info("程序启动。开始处理 URL: {}", url) new_seed = [] # 获取页面信息 page = get_page(url) if page is not None: # 获取页面中的目标元素所包含的详情页信息(url列表) targetElementList = get_target_element_list(page) for targetElement in targetElementList: element_detail = get_page(targetElement) if element_detail is not None: seed_list = get_seed_from_element_detail(element_detail) # 将新发现的种子存储进new_seed列表 for seed in seed_list: if not mysql.seed_is_exist(seed): new_seed.append(seed) logger.debug("新增种子到下载列表: {}", seed.name) # 推送new_seed进入aria2进行种子下载 for seed in new_seed: logger.info("开始下载种子: {}", seed.name) status = ariaDownloader.download_by_seed(seed) # 返回值取值1,0,-1 seed.haveDownload = status seed.seave_to_dataBase() logger.info("种子下载完成。标题: {}, 状态: {}", seed.name, "成功" if status == "1" else "失败") else: logger.error("无法获取网页内容。URL: {}", url) logger.info("程序处理完成。") if __name__ == "__main__": main()