如何使用Python API采集烂番茄Top25动作冒险电影的指定字段数据
实现指导
优先方案:使用官方API实现(符合你的要求)
你当前直接请求网页HTML的方式属于网页爬虫,不符合你要求的必须用API实现的规则,而且稳定性差。烂番茄官方提供了结构化的API接口,不需要自行解析DOM元素,调用即可直接拿到所需的所有字段。
操作步骤:
- 首先申请烂番茄公开API的调用密钥,获取后替换代码中的API_KEY占位符
- 调用动作冒险类Top100榜单接口,返回JSON格式数据直接取前25条即可
- 参考实现代码:
import requests # 替换为你自己申请的API密钥 API_KEY = "YOUR_API_KEY" request_url = f"https://api.rottentomatoes.com/api/public/v1.0/lists/movies/top_100_action_adventure.json?apikey={API_KEY}" resp = requests.get(request_url) if resp.status_code == 200: movie_list = resp.json()["movies"] # 取前25部电影 for movie in movie_list[:25]: rank = movie["rank"] critic_score = f"{movie['ratings']['critics_score']}%" full_title = f"{movie['title']} ({movie['year']})" review_count = movie["ratings"]["critics_review_count"] print(rank, critic_score, full_title, review_count)
临时方案:解析现有HTML返回
如果你暂时无法申请API密钥,需要从你当前拿到的HTML文本中提取数据,可以使用BeautifulSoup库做DOM解析,参考代码如下:
import requests from bs4 import BeautifulSoup page_url = "https://www.rottentomatoes.com/top/bestofrt/top_100_action__adventure_movies/" resp = requests.get(page_url) soup = BeautifulSoup(resp.text, "html.parser") # 取表格前26行,跳过表头 for idx, row in enumerate(soup.select("table tr")[1:26]): rank = row.select_one(".bold").text.strip().rstrip(".") score = row.select_one(".tMeterScore").text.strip() title = row.select_one("a.unstyled.articleLink").text.strip() review_count = row.select_one(".right.hidden-xs").text.strip() print(f"排名:{rank} | 评分:{score} | 标题:{title} | 评论数:{review_count}")
注意:该方案依赖页面的DOM结构和类名规则,只要网站更新页面结构,代码就会失效,仅可临时使用,优先选择API方案。
内容的提问来源于stack exchange,提问作者nadav
相关产品推荐
相关产品推荐

