你也可以这样做:
1) 我稍微更改了 pensflute 的正则表达式,因此它不会抓取文字图像,例如“url(data:image/png..”),它们本身就是图像,因此不会从外部加载。还有一些网站不使用引号('')来包装网址,因为它也可以不使用,所以我还在正则表达式中添加了这些作为可选。
2) 我要从生成的列表中删除重复项,当您在下一部分中替换 url 时需要这样做。
3) 最后,我正在遍历 url 列表,而不是需要用它们的绝对 url 替换,并使用 urljoin() 函数来实现这一点。
这也会将所有链接解析为正确格式,即使它们来自更高一级,例如“../images/someimg.png”
4) 最后你有了修改后的 CSS,其中所有的 url 都是绝对的 :)
import re
from urllib.parse import urljoin
cssUrl = 'https://www.example.nl/static/bundles/css/someApp.css'
css= "background:url(/pub-assets/img/index/sec8-bg.png) \n src:url('../fonts/fontawesome-webfont.eot?v=4.6.3') \n background-image:url('../img/index/blok1-bg.jpg') \n .grabbing{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4y2NgGHbgPxTjY+PWDAP42PgM+k8IwNRQZAg+A/5TYsB/UgBFBtDM/0QZQkxawGsI3QygLwAAbjZlqS88cqkAAAAASUVORK5CYII=) 8 8,move}"
# 1) Find all css links
links = re.findall(r'url\(\'?([(..)/].*?)\'?\)', css)
# 2) Clear all duplicates
links = list(dict.fromkeys(links))
# print(links)
# 3) Replace all links with the absolute path
for link in links:
css = css.replace(link, urljoin(cssUrl, link))
# 4) Print out the modified css
print(css)
哪个输出这个:
background:url(https://www.example.nl/pub-assets/img/index/sec8-bg.png)
src:url('https://www.example.nl/static/bundles/fonts/fontawesome-webfont.eot?v=4.6.3')
background-image:url('https://www.example.nl/static/bundles/img/index/blok1-bg.jpg')
.grabbing{cursor:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAO0lEQVQ4y2NgGHbgPxTjY+PWDAP42PgM+k8IwNRQZAg+A/5TYsB/UgBFBtDM/0QZQkxawGsI3QygLwAAbjZlqS88cqkAAAAASUVORK5CYII=) 8 8,move}