Python网页爬取求助:从Pandas DataFrame的URL提取演员并生成新表
Python爬取Letterboxd电影演员并生成关联DataFrame
步骤1:安装所需依赖
执行以下命令安装必要的Python库:
pip install requests beautifulsoup4 pandas
步骤2:准备初始数据
先将你提供的电影数据转为初始Pandas DataFrame:
import pandas as pd # 初始数据 data = { "Date": ["2020-04-06", "2020-04-07"], "Name": ["Knives Out", "Pulp Fiction"], "Year": [2019, 1994], "Letterboxd URI": ["https://boxd.it/jWEA", "https://boxd.it/29Pq"], "Rating": [4.0, 5.0] } df_initial = pd.DataFrame(data)
步骤3:编写爬取演员的函数
通过requests获取页面内容,用BeautifulSoup解析演员列表:
import requests from bs4 import BeautifulSoup def get_movie_cast(letterboxd_url): # 模拟浏览器请求,避免被反爬 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" } response = requests.get(letterboxd_url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 提取演员列表(若页面结构更新,需调整选择器) cast_items = soup.select(".cast-list .cast-item a") cast_list = [item.get_text(strip=True) for item in cast_items if item.get_text(strip=True)] return cast_list
步骤4:生成目标DataFrame
遍历初始数据,关联演员、电影名称和评分:
# 存储结果的列表 result_data = [] for _, row in df_initial.iterrows(): movie_name = row["Name"] rating = row["Rating"] cast_list = get_movie_cast(row["Letterboxd URI"]) # 每个演员对应一行数据 for actor in cast_list: result_data.append({ "Actor": actor, "Movie": movie_name, "Rating": rating }) # 转为DataFrame df_result = pd.DataFrame(result_data) print(df_result.head())
注意事项
- Letterboxd页面结构可能变动,若爬取失败需检查并更新元素选择器
- 频繁爬取易触发反爬,建议添加
time.sleep(2)这类延迟操作 - 遵守网站爬虫规则,避免违规操作
内容的提问来源于stack exchange,提问作者camhines4
相关产品推荐
相关产品推荐

