使用BeautifulSoup抓取IMDb电影时如何将多名演员信息追加到列表同一行
实现方案
核心逻辑是不要单独追加单个演员到总列表,先把单部电影的所有信息抓取完整后,再作为一个整体追加到总列表中即可实现对应关系。
存储结构选择
你可以任选以下两种常用存储方式:
- 子列表形式:每个子列表对应一部电影,首位存标题,后续元素存所有演员
- 字典形式:每个字典对应一部电影,用明确的键区分标题和演员列表,后续数据处理更灵活
示例代码(Python)
# 第一步:初始化存储电影数据的总列表 movies = [] # 第二步:循环处理每一部Top10电影的页面 for movie_page in top10_movie_pages: # 抓取当前电影的标题 title = get_title(movie_page) # 临时列表存储当前电影的所有演员 actors = [] # 遍历当前页面所有演职人员节点 for actor_node in movie_page.find_all("span", class_="actor"): actor_name = actor_node.text.strip() actors.append(actor_name) # 单部电影所有信息抓取完成后,统一追加到总列表 # 子列表存储写法 movies.append([title, *actors]) # 字典存储可选写法 # movies.append({"title": title, "actors": actors})
最终效果
总列表的结构会完全符合你的需求:
[ ["肖申克的救赎", "蒂姆·罗宾斯", "摩根·弗里曼", "鲍勃·冈顿"], ["教父", "马龙·白兰度", "阿尔·帕西诺", "詹姆斯·肯恩", "理查德·卡斯特尔诺", "罗伯特·杜瓦尔"], # 剩余8部电影依次排列 ]
如果后续需要导出为csv等格式,直接用','.join(actors)即可把同部电影的所有演员拼接为单个字符串,写入同一行的同一个单元格。
内容的提问来源于stack exchange,提问作者yo doggy dogg
相关产品推荐
相关产品推荐

