""" Script Name: Description: 获取 u9a9 数据, prompt: 我们需要访问 https://u9a9.org/?type=2&search={q}&p=4 这个地址,并返回数据,以下是需求详细描述: q 参数,我们有一个数组,分别是 qlist = ['[BD', '合集2'] p 参数,是要访问的页码,它通常从1开始。 我们循环遍历 qlist,对每一个值,从 p=1 开始,组成一个访问的 URL, 获取该 URL 的内容,它是一个页面,页面结构简化之后,就是我刚才发给你的内容。我们需要做的是: 解析 tbody 标签中的若干个 tr,对每个 tr,获取第二个 td 中的 title 文本,并去掉 [BD/{}] 的部分,记为title; 获取第三个td中的第一个链接,它是一个 .torrent 文件,我们下载它,命名为 {title}..torrent ; 然后我们解析
中的内容,它是一个页码导航,我们只需要关注 li 中文本为 >> 的这一行,解析出 href 字段,并取出 p 值,这个值与上面的URL拼起来,就是我们要访问的下一页。如果没有 匹配到这一行,那就代表访问结束了。 请你理解上面的需求,并写出相应的 python脚本。 Author: [Your Name] Created Date: YYYY-MM-DD Last Modified: YYYY-MM-DD Version: 1.0 Modification History: - YYYY-MM-DD [Your Name]: - YYYY-MM-DD [Your Name]: - YYYY-MM-DD [Your Name]: """ import requests from bs4 import BeautifulSoup import re import os import time # 模拟头部,避免被认为是爬虫 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0' } # 定义搜索词数组 qlist = ['[BD'] # 定义下载路径 download_path = "./torrents/" if not os.path.exists(download_path): os.makedirs(download_path) def download_torrent(torrent_url, title): try: # 获取 .torrent 文件 response = requests.get(torrent_url, headers=headers, stream=True) torrent_file_name = f"{title}.torrent" torrent_path = os.path.join(download_path, torrent_file_name) # 保存文件 with open(torrent_path, 'wb') as f: f.write(response.content) print(f"Downloaded: {torrent_file_name}") except Exception as e: print(f"Error downloading {torrent_url}: {str(e)}") # 解析页面内容 def parse_page(html_content): soup = BeautifulSoup(html_content, 'html.parser') # 获取 tbody 标签中的所有 tr 行 tbody = soup.find('tbody') rows = tbody.find_all('tr', class_='default') for row in rows: # 获取第二个td中的标题文本,并去掉 [BD/{}] 部分 title_td = row.find_all('td')[1] raw_title = title_td.find('a')['title'].strip() #title = re.sub(r'\[BD/\d+\.\d+G\]', '', raw_title).strip() title = re.sub(r'\[.*?\]', '', raw_title).strip() # 获取第三个td中的第一个链接 magnet_td = row.find_all('td')[2] torrent_link = magnet_td.find('a', href=re.compile(r'.torrent'))['href'] # 拼接完整的链接并移除 host 中的 '-' full_torrent_link = f"https:{torrent_link}".replace('-', '') # 下载 torrent 文件 download_torrent(full_torrent_link, title) time.sleep(3) # 避免请求过快 # 解析页码导航,获取下一页链接 pagination = soup.find('div', class_='center').find('nav').find('ul', class_='pagination') next_page = pagination.find('a', text='»') if next_page: next_page_url = next_page['href'] next_p_value = re.search(r'p=(\d+)', next_page_url).group(1) return next_p_value return None # 爬取指定 q 和 p 的页面 def scrape(q, start_p=1): p = start_p while True: url = f"https://u9a9.org/?type=2&search={q}&p={p}" print(f"Fetching URL: {url}") response = requests.get(url, headers=headers) if response.status_code != 200: print(f"Failed to fetch {url}") break next_p = parse_page(response.text) if next_p: p = next_p else: print(f"No more pages for query {q}.") break # 循环遍历 qlist for q in qlist: scrape(q, start_p=1)