网页抓取时无法获取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了。
步骤:
- 先安装Selenium:
pip install selenium - 下载对应浏览器的驱动(比如ChromeDriver,要和你的Chrome版本匹配),放在Python能找到的路径里
- 用下面的代码替换原来的请求逻辑:
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更高效。
操作步骤:
- 打开浏览器的开发者工具(按F12),切换到Network标签页
- 刷新目标网页,在过滤条件里选XHR或Fetch,找和评论相关的请求(比如url里带
comment、review之类的关键词) - 找到对应的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
相关产品推荐
相关产品推荐

