为什么使用Python的BeautifulSoup无法获取到完整的div标签内容?
问题根因
Quora 页面采用**客户端渲染(CSR)**模式,requests发起请求只能拿到服务端返回的初始空白HTML模板,#root 标签内的内容是浏览器加载页面后执行JS脚本、异步请求接口数据后才渲染生成的,静态解析未执行JS的原始HTML自然无法获取到目标内容。
解决方案
方案1:使用Selenium模拟浏览器运行(最简便)
该方案会模拟真实浏览器的运行逻辑,自动执行页面JS完成内容渲染,直接拿到完整的页面源码。
- 首先安装依赖包:
pip install selenium webdriver-manager - 参考代码:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from bs4 import BeautifulSoup import time URL = "https://www.quora.com/profile/Siddhartha-gaur-5" # 配置无头模式,无需弹出可视化浏览器窗口 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument("--headless=new") # 增加反爬标识,避免被Quora识别为爬虫 chrome_options.add_argument("--disable-blink-features=AutomationControlled") chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36") driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options) driver.get(URL) # 等待页面异步加载完成,可根据网络情况调整等待时长 time.sleep(3) # 获取渲染完成后的完整页面源码 full_page = driver.page_source soup = BeautifulSoup(full_page, 'html5lib') root_div = soup.find("div", id="root") print(root_div.prettify()) # 关闭浏览器进程 driver.quit()
方案2:调用Quora官方API
该方案稳定性更高,返回的数据为结构化格式,无需解析HTML。可直接通过Quora开放的用户信息接口请求目标用户的资料数据,反爬限制相对更低。
注意:Quora有完善的反爬机制,频繁发起请求会触发验证码校验或IP封禁,操作时请控制请求频率,遵守平台的robots协议要求。
内容的提问来源于stack exchange,提问作者Siddhartha Gaur
相关产品推荐
相关产品推荐

