如何在Python DataFrame中添加IMDB电影缩略图以适配Power BI
修复IMDB电影缩略图爬取代码的方案
问题分析
原代码存在两个核心问题:
- 未定义
image_url变量就直接调用,会触发NameError - 没有定位到IMDB页面中电影主缩略图的具体元素
修复后的代码
import requests from bs4 import BeautifulSoup import pandas as pd import numpy as np import time # 初始化存储图片链接的列表 images = [] # 模拟浏览器请求头,避免被IMDB反爬拦截 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" } # 遍历DataFrame中的每一个电影链接 for url in df_database_url['Url Film']: try: # 发送请求,添加延迟避免频繁请求被封 time.sleep(1) r = requests.get(url, headers=headers) r.raise_for_status() # 捕获HTTP请求错误 soup = BeautifulSoup(r.content, "html.parser") # 定位IMDB电影主缩略图(匹配当前IMDB页面的主图元素类) img_element = soup.find("img", class_="ipc-image--base ipc-image--poster-l ipc-image--loaded") if img_element and "src" in img_element.attrs: # 处理图片链接,移除尺寸限制参数以获取清晰缩略图 image_url = img_element["src"].split("@._V1_")[0] + "@._V1_.jpg" images.append(image_url) else: # 找不到图片时添加空值 images.append(np.nan) except Exception as e: # 捕获请求或解析错误,添加空值并打印错误信息 print(f"处理链接 {url} 时出错: {str(e)}") images.append(np.nan) # 将图片链接列表添加为DataFrame的新列 df_database_url['电影缩略图链接'] = images # 导出为CSV用于Power BI df_database_url.to_csv("带缩略图的电影数据库.csv", index=False, encoding="utf-8-sig")
关键优化点
- 添加请求头:模拟浏览器身份,规避IMDB反爬拦截
- 增加异常处理:捕获请求失败、元素缺失等问题,防止程序崩溃
- 定位准确HTML元素:匹配当前IMDB页面的主缩略图类选择器
- 处理图片链接格式:移除尺寸参数,确保获取清晰的标准缩略图
- 添加请求延迟:避免短时间高频请求导致IP被封禁
内容的提问来源于stack exchange,提问作者rufina_mar
相关产品推荐
相关产品推荐

