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

BeautifulSoup搭配正则匹配失败,无法提取script标签内指定url路径?

问题诊断
  • 错误使用re.match()方法:re.match()只会从字符串的起始位置开始匹配规则,你的目标行在整个HTML文档的中间位置,直接对str(soup)用match必然返回空。
  • 没有先定位script标签再提取内容:直接把整个BeautifulSoup对象转成字符串匹配效率低,也容易受其他无关内容干扰,应该先筛选出所有<script>标签的文本内容再做正则匹配。
  • 错误使用find_all(string=PATTERN)的规则:BeautifulSoup的string参数匹配要求整个文本节点(此处即整个script标签内的全部JS代码)完全符合正则规则,你的目标只是JS代码中的一行,自然匹配不到结果。
  • 未考虑目标行前的空白缩进:目标行var url = ...前面有缩进空格,就算对单条script文本用match也会因为开头的空格匹配失败。
修复后的完整代码
import os
import re
from bs4 import BeautifulSoup

# 用os.path.join拼接路径兼容性更好
FILE_PATH = os.path.join(os.getcwd(), 'demo.html')
PATTERN = re.compile(r"var url = '(.*?)'")

with open(FILE_PATH, 'r', encoding='utf-8') as fp:
    soup = BeautifulSoup(fp, 'html.parser')
    # 先提取所有script标签
    for script_tag in soup.find_all('script'):
        # 跳过无内容的script标签
        script_content = script_tag.string
        if not script_content:
            continue
        # 用search查找文本中任意位置的匹配项
        match_result = PATTERN.search(script_content)
        if match_result:
            # 提取分组内容并替换HTML转义符
            target_url = match_result.group(1).replace('&amp;', '&')
            print(f'Data: {target_url}')
            break
    else:
        print('Data: None')
运行输出
Data: /some/path/to/file?accountTransactionID=f2448439-ec25-4a61-a6f4-4c6fa0767f19&accountNumber=123456&searchValue=ABC123&isActiveHistory=True

内容的提问来源于stack exchange,提问作者user-44651

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 16:12:00