You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web Scraping问题:opensubtitle.org无法识别href链接及标题

解决OpenSubtitles爬取时无法识别链接和标题的问题

我帮你排查了下代码和目标网站的结构,发现两个核心问题导致你拿不到想要的数据:

1. 被网站的反爬机制拦截了

OpenSubtitles会检测请求的User-Agent,默认requests.get()用的是python-requests/x.x.x这类标识,很容易被识别为爬虫,直接返回的页面里可能根本没有你要的搜索结果内容。解决办法很简单,给请求加个模拟浏览器的请求头就行。

2. DOM结构解析逻辑不对

你代码里直接遍历#search_results下的所有<td>,但实际上网站的搜索结果是按行(<tr>)组织的,而且不是所有<td>里都有<a>标签——比如有些td是显示评分、语言的,根本没有链接,强行取film.find("a")["href"]肯定会报错。

修改后的完整代码

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/114.0.0.0 Safari/537.36'
}
URL = 'https://www.opensubtitles.org/it/search/sublanguageid-eng/searchonlymovies-on/genre-horror/movielanguage-english/moviecountry-usa/subformat-srt/hd-on/offset-4040'

def scarica_pagina(link):
    # 带请求头发送请求
    page = requests.get(link, headers=HEADERS)
    soup = BeautifulSoup(page.text, 'lxml')
    
    # 找到搜索结果的表格主体
    results_table = soup.find(id="search_results")
    if not results_table:
        print("未找到搜索结果,可能被反爬拦截或链接无效")
        return
    
    # 遍历每一行结果(排除表头)
    cnt = 0
    for row in results_table.find("tbody").find_all("tr"):
        cnt += 1
        # 找到包含标题链接的td(第一个带有bnone类的td)
        title_td = row.find("td", class_="bnone")
        if not title_td:
            continue
        
        # 提取链接和标题
        title_link = title_td.find("a")
        if title_link:
            link = title_link["href"]
            title = title_link.text.strip()
            print(f"序号: {cnt} | 标题: {title} | 链接: {link}")

if __name__ == '__main__':
    scarica_pagina(URL)

代码里的关键调整说明

  • 新增了HEADERS字典,模拟Chrome浏览器的请求标识,绕过基础反爬
  • 改为遍历搜索结果表格的每一行(<tr>),精准定位包含标题链接的<td class="bnone">
  • 添加了空值判断,避免因为个别异常行导致程序崩溃
  • 输出内容更清晰,包含序号、标题和链接,方便你查看结果

你可以运行这段代码试试,应该能正常获取到你要的href链接和标题了。

内容的提问来源于stack exchange,提问作者PdF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:19:34