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

使用Python Requests爬取11st网站折扣价显示原价问题求助

问题:使用Python爬取11st网站折扣价(高效方案)

我正在使用Python进行网页爬取,目标是获取11st商品页面中红色标注的折扣价。通过网站开发者工具发现,折扣价以文本形式存在于script标签中,但运行现有代码后,终端输出的却是网页显示的原价而非折扣价,希望采用Requests或其他高效方案解决(不使用Selenium,因其执行耗时)。

商品页面折扣价展示

现有代码如下:

from bs4 import BeautifulSoup as bs4
import requests as req
import json

url = 'https://www.11st.co.kr/products/4976666261?NaPm=ct=ld6p5dso|ci=e5e093b328f0ae7bb7c9b67d5fd75928ea152434|tr=slsbrc|sn=17703|hk=87f5ed3e082f9a3cd79cdd0650afa9612c37d9e8&utm_term=&utm_campaign=%B3%D7%C0%CC%B9%F6pc_%B0%A1%B0%DD%BA%F1%B1%B3%B1%E2%BA%BB&utm_source=%B3%D7%C0%CC%B9%F6_PC_PCS&utm_medium=%B0%A1%B0%DD%BA%F1%B1%B3'

res = req.get(url)
soup = bs4(res.text,'html.parser')

# json_data1=soup.find('body').find_all('script',type='text/javascript')[-4].text.split('\n')[1].split('=')[1].replace(';',"")
# data=json.loads(json_data1)
# print(data)

json_data2=soup.find('body').find_all('script',type='text/javascript')[-4].text.split('\n')
print(json_data2)

解决方案

当前代码仅拆分了script内容但未准确定位到折扣价所在的JSON字段,以下是修正后的高效方案:

修正代码

from bs4 import BeautifulSoup as bs4
import requests as req
import json

url = 'https://www.11st.co.kr/products/4976666261?NaPm=ct=ld6p5dso|ci=e5e093b328f0ae7bb7c9b67d5fd75928ea152434|tr=slsbrc|sn=17703|hk=87f5ed3e082f9a3cd79cdd0650afa9612c37d9e8&utm_term=&utm_campaign=%B3%D7%C0%CC%B9%F6pc_%B0%A1%B0%DD%BA%F1%B1%B3%B1%E2%BA%BB&utm_source=%B3%D7%C0%CC%B9%F6_PC_PCS&utm_medium=%B0%A1%B0%DD%BA%F1%B1%B3'

# 添加请求头模拟浏览器,避免反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}

res = req.get(url, headers=headers)
soup = bs4(res.text, 'html.parser')

# 定位目标script标签并提取完整JSON数据
script_tag = soup.find('body').find_all('script', type='text/javascript')[-4]
# 提取__PRELOADED_STATE__对应的JSON字符串(根据实际变量名调整)
json_raw = script_tag.text.split('__PRELOADED_STATE__ = ')[1].split(';')[0]
product_data = json.loads(json_raw)

# 从JSON结构中定位折扣价字段(路径需根据实际数据结构调整)
discount_price = product_data['product']['price']['salePrice']
print(f"折扣价: {discount_price}")

关键说明

  1. 请求头设置:添加User-Agent模拟浏览器请求,避免被网站反爬机制拦截
  2. JSON提取准确性:直接提取完整的JSON结构,而非拆分单行内容,避免因换行或格式变化导致数据丢失
  3. 字段定位:通过开发者工具查看script标签内的JSON结构,找到对应折扣价的字段路径(示例中为product.price.salePrice,需根据实际页面调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:35:28