使用BeautifulSoup从HTML中提取sessionCartId遇到问题
提取HTML中script标签内的sessionCartId字段
问题说明
已成功定位到目标script标签,但直接使用json.loads()解析其内容失败,无法获取sessionCartId字段。原尝试代码如下:
sessioncartid = BeautifulSoup(response.text, "html.parser").findAll("script", {"type":"text/javascript"})[2] data = json.loads(sessioncartid.text) print(data)
目标script标签包含多段JavaScript代码,仅OCC变量对应的对象结构中包含所需的sessionCartId字段。
解决方案
由于script标签内的内容并非纯JSON格式,需先提取出OCC变量对应的JSON结构片段,再进行解析:
修改后的代码
import re import json from bs4 import BeautifulSoup # 定位目标script标签 script_tag = BeautifulSoup(response.text, "html.parser").findAll("script", {"type":"text/javascript"})[2] script_content = script_tag.text # 用正则匹配OCC变量对应的JSON部分 occ_match = re.search(r'var OCC = (\{.*?\});', script_content, re.DOTALL) if occ_match: occ_json_str = occ_match.group(1) # 解析JSON字符串 occ_data = json.loads(occ_json_str) # 提取sessionCartId字段 session_cart_id = occ_data.get("sessionCartId") print(session_cart_id) else: print("未找到OCC变量对应的JSON结构")
代码说明
re.DOTALL参数允许正则表达式中的.匹配换行符,适配多行排版的JSON结构re.search精准定位var OCC =后的JSON对象片段,避免其他JavaScript代码干扰- 解析合法JSON字符串后,直接通过键名
sessionCartId提取目标字段
内容的提问来源于stack exchange,提问作者Husian Jagnom
相关产品推荐
相关产品推荐

