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

正则表达式匹配结果冗余问题求助:网页JS脚本URL爬虫捕获到无关内容

正则表达式匹配结果冗余问题求助:网页JS脚本URL爬虫捕获到无关内容

嘿,我看你在写简单网页爬虫抓取JS脚本URL的时候遇到麻烦了——明明想抓YouTube页面里的JS链接,结果却混进了Google登录链接这类完全无关的内容,还带了一堆多余的HTML片段,太闹心了对吧!

先帮你捋捋问题出在哪:你现在用的正则src=\"(https?://.*?\.js)\??.*?\"有两个小漏洞:

  • 没限定匹配范围,它会抓页面里所有带src="http...js"的内容,哪怕这个src不是在<script>标签里的;
  • .*?的匹配太宽泛,会把双引号后面的其他HTML属性内容也不小心带进来,导致结果冗余。

给你两个解决思路,都是用你熟悉的内置re库就能搞定:

方案一:精准限定正则匹配范围

把正则改成只匹配<script>标签里的src属性,同时用更精准的匹配规则截断URL,避免带出多余内容:

import re
import requests

sitemap = requests.get("https://youtube.com").text
# 修改后的正则表达式
javascriptmatches = re.findall(r'<script[^>]+src="(https?://[^"]+\.js)"', sitemap)
for x in javascriptmatches:
    print(x)

给你拆解下这个正则的逻辑:

  • <script[^>]+:先定位到<script开头的标签,然后匹配标签里的其他属性(比如type="text/javascript"),直到遇到src=";
  • (https?://[^"]+\.js):只捕获从http/https开头、到第一个双引号结束、且以.js结尾的内容,[^"]+比.*?更精准,因为合法的URL里不会出现双引号,能刚好截断到URL的末尾。

方案二:(可选)换用HTML解析库更省心

如果之后遇到更复杂的页面结构,正则很容易翻车,你可以试试用BeautifulSoup这类专门的HTML解析库,代码会更直观,也不容易出错:

import requests
from bs4 import BeautifulSoup

sitemap = requests.get("https://youtube.com").text
soup = BeautifulSoup(sitemap, "html.parser")
# 直接找到所有script标签的src属性
for script in soup.find_all("script", src=True):
    print(script["src"])

不过这个需要先安装bs4库,用pip install beautifulsoup4就行。

这样改完之后,应该就能精准抓到你想要的JS脚本URL,不会再出现那些无关的登录链接和冗余HTML啦!

备注:内容来源于stack exchange,提问作者mrneedhelp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:18:11