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

Python requests如何提取Newegg页面中的‘Out of stock’文本

实现方案

硬靠索引切片提取目标文本是完全不可靠的实现思路。Newegg的页面结构会随AB测试、广告模块上线、推荐内容变动、埋点参数调整动态变化,你今天测出的目标文本对应的索引区间,过几天就可能因为页面整体字符数偏移完全失效,没有长期维护的价值。

方案1:零依赖快速实现

适合不想安装额外第三方库的场景,不需要提前计算目标文本的索引位置,直接通过字符串匹配判断状态:

  • 必须给requests请求加上真实浏览器的User-Agent请求头,否则会被Newegg的反爬机制拦截,返回的HTML根本不包含真实商品的库存模块,这也是你之前拿到的原始HTML里找不到目标文本的常见原因
  • 直接使用Python内置的字符串包含判断逻辑,不需要专门定位文本的索引区间

示例代码:

import requests

TARGET_URL = "https://www.newegg.com/powercolor-radeon-rx-6900-xt-axrx-6900xt-16gbd6-w2dhc-oc/p/N82E16814131778?Description=liquid%20devil&cm_re=liquid_devil-_-14-131-778-_-Product&quicklink=true"
# 添加浏览器请求头绕过基础反爬
response = requests.get(
    TARGET_URL,
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
    }
)
# 直接判断目标文本是否存在
is_out_of_stock = "Out of stock" in response.text
print(f"当前商品是否为缺货状态:{is_out_of_stock}")

方案2:结构化解析避免误判

全页面范围的纯字符串匹配容易出现误判——比如页面侧边的推荐商品也有"Out of stock"的提示,会让脚本错把别的商品状态当成目标商品的状态。这种情况用HTML解析库定位固定的购买模块,只在目标模块范围内匹配文本,准确率会大幅提升:

  • 安装依赖:pip install beautifulsoup4 lxml
  • 定位Newegg固定的核心购买区容器(div.product-buy),只在这个容器的文本范围内做匹配,完全不会受其他模块的同名内容干扰

示例代码:

from bs4 import BeautifulSoup
# 沿用上面请求得到的response对象
soup = BeautifulSoup(response.text, "lxml")
# 定位核心购买模块
buy_module = soup.select_one("div.product-buy")
if buy_module:
    module_text = buy_module.get_text(strip=True)
    is_out_of_stock = "Out of stock" in module_text
    print(f"当前商品真实库存状态文本:{module_text}")

常见注意事项

  • 不要在脚本里硬编码固定的切片索引:哪怕你通过浏览器开发者工具现在查到了"Out of stock"在返回文本里的位置,这个位置没有任何稳定性可言,只要页面小幅变动就会失效
  • 如果请求返回状态码403,说明请求被反爬拦截了,优先检查请求头的字段是否和真实浏览器一致
  • 如果解析不到对应的库存文本,说明该商品的库存状态是前端JS动态渲染的,纯requests拿初始HTML无法获取,需要换用带JS执行能力的请求方式;目前该商品的库存文本是直接嵌入初始HTML的,正常配置请求头就能拿到

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 19:27:03