使用BeautifulSoup提取script标签中productCode字段的方法
如何从script标签中提取productCode字段值
以下是两种实用方法,帮你提取script标签里的productCode数据:
方法1:正则表达式直接匹配
如果页面源码里的productCode格式固定(比如始终是"productCode":"XXX"),直接用正则匹配最快捷:
import requests import re # 替换成你要爬的商品页面URL target_url = "你的商品页面URL" page_html = requests.get(target_url, headers={"User-Agent": "Mozilla/5.0"}).text # 匹配productCode字段 code_match = re.search(r'"productCode":"(.*?)"', page_html) if code_match: product_code = code_match.group(1) print(f"提取到型号:{product_code}")
方法2:解析JSON结构(更可靠)
多数电商网站会把产品数据以JSON格式嵌入script标签(比如绑定到某个全局变量),这种情况下解析JSON更稳定:
import requests from bs4 import BeautifulSoup import json target_url = "你的商品页面URL" page_html = requests.get(target_url, headers={"User-Agent": "Mozilla/5.0"}).text soup = BeautifulSoup(page_html, "html.parser") # 遍历所有script标签,找到包含productCode的那个 for script_tag in soup.find_all("script"): script_content = script_tag.string if not script_content: continue if '"productCode"' in script_content: # 处理可能的JS变量前缀(比如"window.productInfo = ") if script_content.strip().startswith("window."): json_content = script_content.split("=", 1)[1].strip().rstrip(";") else: json_content = script_content try: product_data = json.loads(json_content) product_code = product_data.get("productCode") if product_code: print(f"提取到型号:{product_code}") break except json.JSONDecodeError: # 解析失败时,降级用正则匹配 fallback_match = re.search(r'"productCode":"(.*?)"', script_content) if fallback_match: print(f"提取到型号:{fallback_match.group(1)}") break
注意事项
- 记得给请求加
User-Agent头,避免被网站反爬拦截; - 如果知道包含productCode的script标签有特定属性(比如id),可以直接用
soup.find("script", id="指定ID")定位,不用遍历所有标签,效率更高; - 部分网站可能会对JSON内容做混淆,此时正则方法会更稳妥。
内容的提问来源于stack exchange,提问作者piseynir
相关产品推荐
相关产品推荐

