无需Selenium,用BeautifulSoup获取链接后如何继续导航下载字幕?
如何用BeautifulSoup无需Selenium导航到字幕下载链接
嘿,我看你已经搞定了搜索请求和初始页面的解析,接下来完全不用依赖Selenium,靠requests+BeautifulSoup就能完成后续的导航和字幕下载!我给你拆解一下步骤,直接补全你的代码就行:
第一步:提取搜索结果的有效链接
首先你需要从搜索页面里定位到每个字幕对应的详情页链接。以yifysubtitles的页面结构为例,搜索结果里的每个条目标题通常是带title类的<a>标签,你可以这样提取:
import requests from bs4 import BeautifulSoup # 添加请求头,避免被网站反爬拦截 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } usearch = input("Movie Name? : ") url = "https://www.yifysubtitles.com/search?q="+usearch print(url) # 发送搜索请求 resp = requests.get(url, headers=headers) soup = BeautifulSoup(resp.content, 'lxml') # 提取搜索结果中的字幕详情页链接 subtitle_page_links = soup.find_all('a', class_='title') base_url = "https://www.yifysubtitles.com"
第二步:循环导航到每个详情页,提取下载链接
拿到详情页链接后,我们逐个发送请求,在详情页里找到字幕的下载按钮链接,然后直接请求下载:
for link in subtitle_page_links: # 拼接完整的详情页URL full_subtitle_url = base_url + link['href'] # 请求详情页 subtitle_resp = requests.get(full_subtitle_url, headers=headers) subtitle_soup = BeautifulSoup(subtitle_resp.content, 'lxml') # 提取下载字幕的链接(这里对应页面里的下载按钮,class通常是download-subtitle) download_buttons = subtitle_soup.find_all('a', class_='download-subtitle') for dl_btn in download_buttons: # 拼接完整的下载URL download_url = base_url + dl_btn['href'] # 请求下载字幕文件 subtitle_file = requests.get(download_url, headers=headers) # 提取文件名并保存(假设下载的是zip压缩包) filename = dl_btn['href'].split('/')[-1] + ".zip" with open(filename, 'wb') as f: f.write(subtitle_file.content) print(f"✅ 字幕文件 {filename} 已成功下载!")
关键注意事项
- 请求头一定要加:很多网站会拦截无标识的爬虫请求,加上
User-Agent模拟浏览器访问,能大大降低被拦截的概率。 - 页面结构可能变化:如果后续发现提取不到链接,要打开网页检查元素,确认标签和类名有没有更新,调整
find_all的参数即可。 - 为什么不用Selenium?:这个网站的页面内容都是静态渲染的,所有链接和内容都直接写在HTML里,不需要模拟浏览器的动态加载,
requests完全能拿到所有数据。
内容的提问来源于stack exchange,提问作者Aakash Hirve




