requests.get()拿不到底部数据的直接原因是懒加载,即数据由javascript滚动触发异步请求加载,原始html中本就不存在;确认方法是查看网页源代码而非elements面板,并通过network→xhr观察滚动时发出的新请求。

直接原因:你用 requests.get() 拿到的 HTML 里压根就没有底部那些数据——它们是滚动到视口后才由 JavaScript 触发请求加载的,属于「懒加载」(lazy loading)。
怎么确认是不是懒加载导致的缺失
别信 Elements 面板里看到的内容,那是浏览器渲染后的结果。右键网页 →「查看网页源代码」,搜索你要的数据关键词。如果源代码里搜不到,但 Elements 里有,基本就是懒加载或 AJAX 加载。
打开浏览器开发者工具 → Network 标签页 → 切换到 XHR / Fetch 过滤器 → 滚动页面到底部,观察是否有新的请求发出;重点看响应体(Response)里是否包含你要的列表项、ID 或文本字段。
- 常见懒加载请求特征:
offset=20、page=2、cursor=xxx、next_token等分页参数 - 响应格式通常是 JSON,不是 HTML
- 请求 URL 往往和初始页面 URL 不同,可能带
/api/或/list路径
requests 直接补全懒加载请求的实操要点
拿到懒加载接口后,用 requests 模拟调用是最轻量、最可控的方式,比启动整个浏览器快得多。
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
- 必须复现请求头(Headers),尤其是
User-Agent、Referer、X-Requested-With(值常为XMLHttpRequest),否则服务器可能返回空数据或 403 - 注意 Cookie 是否需要携带:如果初始页面登录态依赖 Cookie,后续懒加载请求大概率也要带上,可用
session = requests.Session()复用 - 参数编码要严格:比如中文关键字需
urllib.parse.quote(),时间戳需整数秒级,offset值不能写错(如从 0 开始还是 1 开始) - 加
time.sleep(0.5)避免触发频率限制,尤其当接口对单 IP 有 QPS 限制时
Selenium 滚动到底部仍拿不到数据?检查这三处
不是“滚动了就一定加载完”,Selenium 默认不等待异步加载完成。
- 别只用
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);"),之后必须显式等待:用WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, ".item-list .item:last-child"))) - 懒加载元素可能被包裹在
display: none或visibility: hidden的父容器中,需检查真实可见性,不能只靠find_element - 某些站点会检测
navigator.webdriver === true,Selenium 默认暴露此特征,容易被拦截。可加启动参数:options.add_argument("--disable-blink-features=AutomationControlled"),并执行 JS 删除webdriver属性
为什么解析 response.text 有时比 response.content 更全
这不是玄学,是编码处理问题。服务器返回的原始字节流(content)若未正确解码,BeautifulSoup 解析时可能截断或乱码,导致部分标签无法匹配。
- 优先用
response.apparent_encoding或response.encoding查看识别出的编码,再手动指定(如response.content.decode('utf-8')) - 如果
apparent_encoding返回None或错误(如ISO-8859-1),直接用response.text更稳妥——requests 已按响应头或 BOM 自动解码 - 极端情况(如大页面 + 缓冲区限制),
response.text可能被截断,此时应改用response.iter_content(chunk_size=8192)流式读取并拼接
懒加载的本质是“数据与展示分离”,它让前端更灵活,却给爬虫增加了网络请求路径分析这一层隐性成本。最容易被忽略的,是那个看似无关的 Referer 头——少了它,90% 的懒加载接口会静默返回空数组。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










