使用BeautifulSoup爬取网页时无法获取span标签文本如何解决
爬虫无输出问题解决方案
核心原因排查
- 第一,目标站点的评论内容属于动态渲染内容:直接调用
requests.get()只能获取页面初始静态源码,这些评论数据是页面加载完成后通过JavaScript异步请求渲染生成的,初始源码里不存在你要找的RF_CONTENT类元素,所以你遍历的activites是空列表,自然没有任何输出。 - 第二,类名匹配错误:你给出的HTML结构中不存在代码里写的
RFW_ACTIVITY_SECTION_ACTIVITY_FEED_ELEM_RESUME_ACH_NAME类的span标签,评论内容对应的span类为RFW_ACTIVITY_SECTION_ACTIVITY_FEED_ELEM_RESUME_ACTION。
修复方案
你可以使用Selenium模拟浏览器运行,等待页面动态内容加载完成后再提取数据:
前置依赖安装
执行命令安装需要的库:
pip install beautifulsoup4 requests selenium webdriver-manager
修正后的代码
from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager import time url = "https://forum.bouyguestelecom.fr" # 启动浏览器 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get(url) # 等待3秒让页面动态内容加载完成,可根据网络情况调整时长 time.sleep(3) # 获取渲染完成的页面源码 page_source = driver.page_source driver.quit() soup = BeautifulSoup(page_source, 'html.parser') activites = soup.find_all('div', class_="RF_CONTENT") for activite in activites: # 捕获不存在元素的异常,避免个别结构异常导致程序崩溃 try: nick_name = activite.find("span", class_="RFW_ACTIVITY_SECTION_ACTIVITY_FEED_ELEM_RESUME_NICKNAME").text comment_content = activite.find("span", class_="RFW_ACTIVITY_SECTION_ACTIVITY_FEED_ELEM_RESUME_ACTION").text print(f"用户名:{nick_name}") print(f"评论内容:{comment_content}\n") except AttributeError: continue
额外优化建议
如果后续爬取需求增多,可以尝试抓包找到站点加载评论数据的异步接口,直接调用接口获取JSON格式数据,比模拟浏览器效率更高、稳定性更好。
内容的提问来源于stack exchange,提问作者ossama assaghir
相关产品推荐
相关产品推荐

