import requests
import re
import time

# 配置参数
BASE_URL = "shturl.cc/1GMCWQHDjtMsUtX31a{}&fpage=422"
START_TID = 21025177
OUTPUT_FILE = "magnet_links.txt"
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

def get_magnet_from_html(html):
    """正则提取所有磁力链接"""
    # 匹配data-magnet="磁力链接"
    pattern = r'data-magnet="(magnet:\?xt=urn:btih:[0-9A-Fa-f]+)"'
    magnets = re.findall(pattern, html)
    return magnets

def save_magnets(magnet_list):
    """追加写入磁力链接到文件"""
    if not magnet_list:
        return
    with open(OUTPUT_FILE, "a", encoding="utf-8") as f:
        for link in magnet_list:
            f.write(link + "\n")
    print(f"成功写入{len(magnet_list)}条磁力链接")

def crawl_tid(start_tid, loop_count=10):
    """批量爬取tid，loop_count为循环次数可自行修改"""
    current_tid = start_tid
    for _ in range(loop_count):
        url = BASE_URL.format(current_tid)
        print(f"\n正在访问：{url}")
        try:
            resp = requests.get(url, headers=HEADERS, timeout=10)
            resp.raise_for_status()
            html = resp.text
            magnet_list = get_magnet_from_html(html)
            if magnet_list:
                save_magnets(magnet_list)
            else:
                print("当前页面未找到磁力链接")
        except requests.exceptions.RequestException as e:
            print(f"网页访问/解析失败：{str(e)}，跳过当前tid")
        # tid自增
        current_tid += 1
        # 防封禁延迟，单位秒
        time.sleep(1)

if __name__ == "__main__":
    # 第二个参数代表爬取多少个页面，按需修改
    crawl_tid(START_TID, loop_count=20)
