使用Python Beautiful Soup爬取IMDB提取导演信息问题求助
问题根因
你现有代码直接提取目标p标签下的第一个<a>标签内容,当电影条目无导演信息时,该位置的第一个<a>标签对应就是演员信息,因此会出现导演列表混入演员数据的问题。
修复方案
利用IMDB该区块的固定结构特征:导演信息前一定会带有Director:(单人导演)或Directors:(多人导演)的文本标识,我们只需要定位到该标识后再提取紧邻的<a>标签内容即可:
修改后的提取函数
def getDirector(text_muted): try: # 匹配导演标识文本,兼容单/多人导演场景 director_label = text_muted.find(string=lambda content: content and content.strip().startswith(('Director:', 'Directors:'))) if director_label: # 提取标识后第一个a标签的文本,即为导演名 return director_label.find_next_sibling("a").get_text(strip=True) # 无导演标识直接返回NA return 'NA' except: return 'NA'
补充说明
- 原有调用代码无需修改,直接复用即可
- 如果需要提取全部导演(多人导演场景),可以将
find_next_sibling替换为循环查找后续同层级<a>标签,直到碰到|分隔符或Stars:标识为止 - 该方案依赖IMDB的页面结构约定,适配你给出的目标列表页面结构
内容的提问来源于stack exchange,提问作者Anthony X.
相关产品推荐
相关产品推荐

