如何用Python的requests提取网页JS函数中的隐藏值?
提取JavaScript文本中的目标值解决方案
你可以通过正则表达式精准匹配并提取这两个目标值,r.html.search()仅适合简单占位符匹配,对于带格式的JS代码片段,正则的灵活性更强。
具体实现代码
from requests_html import HTMLSession import re url = 'link' session = HTMLSession() r = session.get(url) r.html.render(sleep=2) page_text = r.html.text # 提取第一个目标值:123456789023 pattern1 = r"document.getElementById\('randomcode'\).value\s*=\s*'([^']+)'" match1 = re.search(pattern1, page_text) if match1: target_value1 = match1.group(1) print("第一个目标值:", target_value1) else: print("未找到第一个目标值") # 提取第二个目标值:1823947239d23dc23dsar238rt3r pattern2 = r'completef\("([^"]+)"\)' match2 = re.search(pattern2, page_text) if match2: target_value2 = match2.group(1) print("第二个目标值:", target_value2) else: print("未找到第二个目标值")
代码说明
[^']+和[^"]+分别表示匹配除单/双引号外的所有字符,确保只提取引号内的目标内容;\s*用来匹配代码中可能存在的任意空格,避免因空格数量不同导致匹配失败;- 若页面存在多个类似片段,可改用
re.findall()获取所有匹配结果。
原方法失败原因
r.html.search("checkbox")仅会返回包含"checkbox"的文本片段,无法提取后续目标值。即便用占位符语法(如r.html.search("document.getElementById('randomcode').value = '{}'")),也对代码格式要求极高,一旦JS里的空格、引号格式变化就会失效,远不如正则稳定。
内容的提问来源于stack exchange,提问作者Samarker
相关产品推荐
相关产品推荐

