如何从CSS URL解析特定值

时间:2019-02-26 20:17:55

标签: python css python-3.x parsing url

我正在尝试从css URL(不是所有内容)中解析一些特定的十六进制颜色值,但是不知道如何使用Python来解决这个问题。

URL如下所示:

https://abcdomain.com/styles/theme.css

其内容为:

@charset "UTF-8";
/* CSS Document */

.bg-primary {
  background-color: #2ccfff;
  color: white;
}

.bg-success {
  background-color: #8b88ff;
  color: white;
}

.bg-info {
  background-color: #66ccff;
  color: white;
}

.bg-warning {
  background-color: #ff9900;
  color: white;
}

.bg-danger {
  background-color: #7bb31a;
  color: white;
}

.bg-orange {
  background-color: #f98e33;
  color: white;
}

我只需要解析特定条目的“背景色”十六进制值,仅从“警告”到“橙色”即可。

我尝试urllib.request,但无法与我一起正常工作。

如果有人可以帮助我使用Python脚本获取此值,我将非常感激。

谢谢, 艾哈迈德

1 个答案:

答案 0 :(得分:0)

我在您的CSS代码中添加了一个额外的'f',因为它没有通过验证。

您可以使用requests下载文件,并使用cssutils解析CSS。以下代码查找所有background-color实例,并使用CSS选择器将它们放入字典中。

import requests
import cssutils

# Use this instead of requests if you want to read from a local file
# css = open('test.css').read()

url = 'https://abcdomain.com/styles/theme.css'
r = requests.get(url)
css = r.content

sheet = cssutils.parseString(css)

results = {}
for rule in sheet:
    if rule.type == rule.STYLE_RULE:
        for prop in rule.style:
            if prop.name == 'background-color':
                results[rule.selectorText] = prop.value

print(results)

这将显示以下结果:

{
  '.bg-primary': '#2ccfff',
  '.bg-success': '#8b88ff',
  '.bg-info': '#6cf',
  '.bg-warning': '#f90',
  '.bg-danger': '#7bb31a',
  '.bg-orange': '#f98e33'
}