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

如何使用Beautiful Soup从Script标签的articleBody内容中提取目标URL

提取articleBody中的iframe URL

嘿,针对你遇到的这个问题,其实有几种靠谱的解决方案,咱们一个个来看:

方法一:正则表达式(灵活通用)

既然你已经考虑过正则,这确实是个很适合的方案,因为目标URL的格式很固定——紧跟在#iframe: 之后,直到第一个(结束。咱们可以写一个精准的正则来匹配:

import re
import json
from bs4 import BeautifulSoup

# 假设你已经拿到了soup对象
script_content = soup.find('script', type='application/ld+json').text
data = json.loads(script_content)
article_body = data['articleBody']

# 匹配URL
url_match = re.search(r'#iframe: (https?://[^)]+)', article_body)
if url_match:
    target_url = url_match.group(1)
    print(target_url)
    # 输出结果:https://audm.herokuapp.com/player-embed?pub=newyorker&articleID=60db43bb53829a9732660612

这个正则的逻辑很清晰:

  • https?://:匹配以http或https开头的URL
  • [^)]+:匹配所有不是右括号的字符,刚好能截取到URL的结尾(因为后面就是(100%x90))

方法二:字符串分割(简单直观)

如果你的目标格式完全固定(不会有其他变种),直接用字符串分割会更简单,不需要依赖正则库:

import json
from bs4 import BeautifulSoup

script_content = soup.find('script', type='application/ld+json').text
data = json.loads(script_content)
article_body = data['articleBody']

# 分步分割提取
if '#iframe: ' in article_body:
    # 先分割出#iframe:后面的内容
    post_iframe_part = article_body.split('#iframe: ')[1]
    # 再分割出(前面的内容,就是目标URL
    target_url = post_iframe_part.split('(')[0].strip()
    print(target_url)

这种方法的优点是代码可读性高,新手也能一眼看懂,而且对于固定格式的文本处理性能略优(虽然这个场景下差异可以忽略)。

怎么选?

  • 如果以后可能遇到格式小变化(比如URL前后有空格、或者#iframe:后面有空格),正则更灵活,稍微调整表达式就能适配;
  • 如果格式永远不会变,字符串分割更直接,代码更简洁。

不管用哪种方法,记得加个判断(比如if url_match或者if '#iframe: ' in article_body),避免因为页面结构变化导致代码报错~

内容的提问来源于stack exchange,提问作者JetJaguar124

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:32:43