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

网页抓取时无法获取class为c_comment的评论div元素的问题求助

网页抓取时无法获取class为c_comment的评论div元素的问题求助

嘿,我懂你现在的困扰——明明网页上能看到评论区块,用BeautifulSoup却抓不到带c_comment类的div,返回空列表对吧?咱们来一步步拆解问题,把它解决掉~

问题根源

从你贴出的HTML输出能看出来,这个网站是用Vue.js构建的单页应用:页面初始加载时只有一个空的<div id="app"></div>,包括评论在内的实际内容都是通过JavaScript动态渲染出来的。而requests库只能获取到服务器返回的静态初始HTML,抓不到JS后续加载的动态内容,所以BeautifulSoup自然找不到目标元素啦。

解决方案

这里给你两种常用的解决思路,按需选择:

方法1:用Selenium模拟浏览器加载页面(直观易上手)

Selenium可以模拟真实浏览器的行为,等待页面完全加载(包括JS渲染的内容)后再获取页面源码,这样就能拿到包含评论的完整HTML了。

步骤:

  1. 先安装Selenium:pip install selenium
  2. 下载对应浏览器的驱动(比如ChromeDriver,要和你的Chrome版本匹配),放在Python能找到的路径里
  3. 用下面的代码替换原来的请求逻辑:
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 bs4 import BeautifulSoup

# 初始化Chrome浏览器驱动
driver = webdriver.Chrome()
url = 'https://www.ambebi.ge/article/318245-chazirvamde-ramdenime-saatit-adre-titanikidan-bri/'

try:
    driver.get(url)
    # 等待评论区域加载完成,超时时间设为10秒
    WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'c_comment'))
    )
    # 获取加载完成后的完整页面源码
    page_source = driver.page_source
    soup = BeautifulSoup(page_source, 'html.parser')
    # 现在就能抓到评论元素了
    comments = soup.find_all("div", class_='c_comment')
    print(comments)
finally:
    # 用完记得关闭浏览器
    driver.quit()

方法2:直接请求评论的API接口(更高效,无浏览器开销)

如果不想用浏览器模拟,你可以找网站加载评论的后台API接口,直接请求接口拿到结构化的评论数据,比解析HTML更高效。

操作步骤:

  1. 打开浏览器的开发者工具(按F12),切换到Network标签页
  2. 刷新目标网页,在过滤条件里选XHR或Fetch,找和评论相关的请求(比如url里带comment、review之类的关键词)
  3. 找到对应的API接口后,用requests直接请求这个接口,就能拿到JSON格式的评论数据了,不需要解析HTML

举个例子(假设找到的API接口是https://www.ambebi.ge/api/comments?article_id=318245,实际需要你自己找):

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
# 替换成你找到的真实API接口
api_url = 'https://www.ambebi.ge/api/comments?article_id=318245'
response = requests.get(api_url, headers=headers)
comments_data = response.json()
print(comments_data)

小提示

  • 用Selenium的时候,记得驱动版本要和浏览器版本对应,不然会报错
  • 找API接口时,注意看请求里的参数(比如文章ID),要和目标文章匹配
  • 有些网站会有反爬机制,请求API时可能需要带上Cookie或者其他请求头,你可以从浏览器的请求里复制过来

备注:内容来源于stack exchange,提问作者user4356954

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 10:53:08