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

请求产品URL返回414错误,split函数处理未达预期求助

问题:请求产品URL返回414状态码,拆分变量无效

发送请求获取产品数据时返回状态码414,原以为是请求次数过多,但尝试拆分product_info变量后并未解决问题。相关代码如下:

import requests as r
from bs4 import  BeautifulSoup
def get_ProductData():
    url = 'https://shopnicekicks.com/sitemap_products_1.xml?from=1169123841&to=7106802188493'
    data = r.get(url)
    soup = BeautifulSoup(data.text,'xml')
    title = soup.findAll('title')
    for titles in title:
        titles.decompose()
        info = ''.join(soup.stripped_strings)
        product_info = info + '/products.json'
        response = r.get(product_info,params=product_info)
        print(response.status_code)

# Run the function
get_ProductData()

问题分析与解决

  1. 414状态码的真实原因:414表示请求URI过长,并非请求次数过多(请求频率超限通常返回429状态码)。
  2. 代码核心问题:
    • 删除<title>标签后,用''.join(soup.stripped_strings)把整个站点地图里的所有URL拼接成了一个超长字符串,导致product_info是一堆无效地址的拼接体,请求时自然触发414错误。
    • r.get(product_info, params=product_info)用法错误,params参数需为字典格式的请求参数,不应直接传入URL。
  3. 修正后的代码:
    站点地图里的产品URL都存放在<loc>标签中,直接提取每个标签内容即可:
import requests as r
from bs4 import BeautifulSoup

def get_ProductData():
    url = 'https://shopnicekicks.com/sitemap_products_1.xml?from=1169123841&to=7106802188493'
    data = r.get(url)
    soup = BeautifulSoup(data.text, 'xml')
    # 提取所有存放产品URL的<loc>标签
    product_locs = soup.findAll('loc')
    
    for loc in product_locs:
        product_url = loc.get_text(strip=True)
        product_info = product_url + '/products.json'
        try:
            response = r.get(product_info)
            print(f"地址: {product_info}, 状态码: {response.status_code}")
        except Exception as e:
            print(f"请求失败: {e}")

# 执行函数
get_ProductData()
  1. 额外建议:
    • 频繁请求易触发反爬机制,建议添加请求间隔(如time.sleep(1))。
    • 可设置请求头(如添加User-Agent字段)模拟浏览器请求,提升成功率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 11:45:35