如何提取HTML文件中script标签内的特定hash值
提取HTML最后一个script标签内hash值的实现方法
错误点说明
你写的re.search(html, "hash: (*?),")存在3个核心问题:
re.search参数顺序颠倒,第一个参数需传入正则规则,第二个才是待匹配的文本内容- 原JS代码中hash是带双引号的键
"hash",未匹配双引号会导致匹配失败 - 通配符语法错误,
*不能单独使用,需前置指定匹配的字符类型,匹配任意字符的非贪婪写法为.*?
正确实现方案(BeautifulSoup + 正则 双保险)
先通过BeautifulSoup提取最后一个script标签的内容,再用正则匹配hash值,避免前面的script标签出现同名字段干扰:
from bs4 import BeautifulSoup import re # 假设你的HTML内容存在html_content变量中 # 没有安装lxml库可将解析器替换为Python内置的html.parser soup = BeautifulSoup(html_content, 'lxml') # 提取所有script标签,取下标为-1的最后一个 last_script_content = soup.find_all('script')[-1].string # 编写正则匹配hash值 hash_match = re.search(r'"hash"\s*:\s*"([a-f0-9]+)"', last_script_content) if hash_match: target_hash = hash_match.group(1) print(target_hash) # 输出结果:13334a0e457f0793ec
正则规则说明
r'"hash"\s*:\s*"([a-f0-9]+)"'各部分含义:
r标记原始字符串,避免Python转义字符和正则转义规则冲突"hash"精准匹配JS中的键名\s*匹配0个或多个空白字符,兼容代码格式化时加的空格/换行([a-f0-9]+)捕获组,匹配hash值的十六进制字符(0-9、a-f),拿到的结果就是需要的hash值
内容的提问来源于stack exchange,提问作者DamianoDoug
相关产品推荐
相关产品推荐

