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

Python爬虫代码在不同网站运行结果不一致是什么原因?

爬虫跨站点运行结果不一致的核心原因
  • 反爬策略差异:HomeDepot这类商业电商站有成熟的反爬虫机制,requests默认发送的请求头会直接标记为爬虫请求,站点会返回403状态码、验证码页面或者空响应,自然无法解析到对应节点。而你测试用的fake-jobs是公开的爬虫教学静态站点,没有任何反爬限制,请求可以直接拿到完整源码。
  • 页面渲染模式差异:HomeDepot的商品内容是前端JavaScript动态渲染生成的,你用requests请求拿到的初始HTML文件中,仅包含空的容器框架,没有实际加载的商品数据,id="root"对应的内容要等浏览器执行JS后才会插入到DOM中。而fake-jobs站点是纯静态HTML,所有内容都直接写在初始源码里,可以直接用BeautifulSoup解析。
  • DOM结构校验问题:就算绕过反爬拿到完整数据,也要确认目标站点当前的DOM结构确实存在id="root"的节点,站点版本迭代、地区定向分发内容都可能导致节点ID发生变化。

排查步骤

你可以先运行以下代码验证问题根源:

import requests
from bs4 import BeautifulSoup
# 模拟浏览器请求头
headers = {
    "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"
}
URL = "https://www.homedepot.com/s/311256393"
page = requests.get(URL, headers=headers)
# 先打印状态码和返回内容前1000字符,确认返回结果
print("响应状态码:", page.status_code)
print("返回内容前1000字符:", page.text[:1000])

如果状态码不是200,或者返回内容包含访问拒绝、验证码提示,说明需要进一步处理反爬;如果状态码正常但返回的HTML里没有你要找的节点,说明是动态渲染页面,需要改用Selenium、Playwright等无头浏览器工具加载完整页面后再解析。

内容的提问来源于stack exchange,提问作者Dilli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:15:08