如何使用Python自动遍历IMDb影评页面,批量获取超过默认25条的影评数据
Python批量获取IMDb影评的实现方案
IMDb影评区采用AJAX动态加载机制,没有传统的分页URL,所以拼接?page=2这类参数不会生效,点击「加载更多」时才会向后端请求下一批数据,有两种实现方案可选:
方案1:Selenium模拟点击(入门友好,无需抓包)
适合没有抓包经验的用户,直接模拟用户手动点击的操作,实现逻辑如下:
- 先安装依赖:
pip install selenium webdriver-manager - 核心实现步骤:
- 用webdriver打开目标影评页面
- 循环判断「加载更多」按钮是否存在,可通过按钮的class名
ipl-load-more__button定位 - 若按钮存在则模拟点击,等待2-3秒让新影评加载完成
- 达到你需要的影评数量后停止循环,用BeautifulSoup等工具解析当前页面的所有影评内容即可
示例核心代码片段:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager import time # 目标影片影评页 url = "https://www.imdb.com/title/tt0111161/reviews/?ref_=tt_ql_urv" driver = webdriver.Chrome(ChromeDriverManager().install()) driver.get(url) # 假设要爬100条,也就是点3次加载更多 target_count = 100 current_count = 25 while current_count < target_count: try: load_more_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CLASS_NAME, "ipl-load-more__button")) ) load_more_btn.click() time.sleep(3) current_count += 25 except: # 没有更多影评时退出循环 break # 解析页面获取影评 page_source = driver.page_source driver.quit()
方案2:直接调用AJAX接口(效率更高,无需启动浏览器)
适合对HTTP请求有基础了解的用户:
- 打开浏览器控制台切换到「网络」标签,筛选XHR请求,点击「加载更多」按钮时就能捕捉到路径为
/_ajax/get-more-user-reviews的POST请求 - 该请求的必传参数包括:tconst(影片的IMDb编号,即示例中的tt0111161)、paginationKey(每次请求返回的结果中会附带下一次请求需要用的key)、sortType等
- 第一次请求不需要传paginationKey,之后每次请求用返回的新key即可,每次返回25条影评的HTML片段,循环请求直到拿到需要的数量即可
关于IMDb动态加载设计的说明
这种设计并非专门为了提高爬取门槛,是现在大型网站的通用优化方案:
- 降低首屏加载压力,用户打开页面时只需加载25条评论,页面打开速度更快,提升普通用户体验
- 减少无效资源消耗,绝大多数普通用户只会浏览前几十条评论,不需要全量返回所有评论
- 客观上确实提升了批量爬取的难度,属于平台保护自有数据的附带效果,符合平台的运营需求
注意:仅用于学校作业爬取时请控制请求频率,不要短时间内发起大量请求,避免被平台封禁IP。
内容的提问来源于stack exchange,提问作者BIGoperaFAN
相关产品推荐
相关产品推荐

