You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup爬取谷歌应用商店时find_all返回空列表问题求解

问题原因

你遇到的问题核心是目标评论元素为JavaScript动态渲染产物,不存在于requests请求获取的初始静态HTML中。
你在浏览器开发者工具中看到的d15Mdf bAhLNe类对应的div,是页面加载完成后,浏览器执行JS脚本异步请求评论数据、动态插入到DOM里的。你用requests.get仅能拿到页面首次返回的原始HTML,没有执行后续JS渲染的步骤,因此soup对象中根本不存在目标元素,find_all自然返回空列表。
你提到“已经成功抓取到完整HTML文件”属于误判,你可以直接在打印的soup文本中搜索d15Mdf字符串,是完全匹配不到的,你在浏览器中看到的完整DOM结构和requests拿到的原始HTML并非同一内容。

额外补充:写法错误说明

你尝试的soup.find_all({class : d15Mdf bAhLNe})写法本身不符合BeautifulSoup语法规范,多类匹配的正确写法有两种:

  • 字符串直接写全类名:soup.find_all('div', class_="d15Mdf bAhLNe")(也就是你最开始的写法,本身没有语法问题)
  • 列表传多个类:soup.find_all('div', class_=["d15Mdf", "bAhLNe"])
解决方案

方案1:使用支持JS渲染的爬虫工具

可以选用Selenium、Playwright等模拟浏览器运行的工具,等待页面JS执行完成、评论元素渲染后再提取内容,参考示例代码:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 初始化浏览器驱动,需提前配置对应浏览器的驱动文件
driver = webdriver.Chrome()
driver.get('https://play.google.com/store/apps/details?id=com.google.android.googlequicksearchbox&hl=en')

# 等待评论元素加载完成,最长等待10秒
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, "d15Mdf"))
)

# 获取渲染完成的页面源码
html_text = driver.page_source
soup = BeautifulSoup(html_text, 'lxml')
reviews = soup.find_all('div', class_="d15Mdf bAhLNe")
print(reviews)

# 关闭浏览器
driver.quit()

注:如果需要爬取更多评论,还需要额外添加模拟页面滚动的逻辑,触发更多评论的加载请求。

方案2:直接调用评论接口

打开浏览器开发者工具的「网络」面板,筛选Fetch/XHR请求,滚动页面触发评论加载时,就能抓到谷歌应用商店官方的评论异步接口,直接请求该接口获取JSON格式的评论数据,这种方式效率远高于解析HTML页面。

内容的提问来源于stack exchange,提问作者almogTovim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:54:01