如何用BeautifulSoup提取内联样式中的CSS属性

9 投票
1 回答
9426 浏览
提问于 2025-04-17 12:59

我有这样的代码:

<img style="background:url(/theRealImage.jpg) no-repate 0 0; height:90px; width:92px;") src="notTheRealImage.jpg"/> 

我正在使用beautifulsoup来解析HTML。有没有办法从“背景”这个CSS属性中提取出“url”?

1 个回答

10

你有几种选择——快速简单的方法或者正确的方法。快速简单的方法(如果标记有变化就容易出问题)看起来是这样的:

>>> from BeautifulSoup import BeautifulSoup
>>> import re
>>> soup = BeautifulSoup('<html><body><img style="background:url(/theRealImage.jpg) no-repate 0 0; height:90px; width:92px;") src="notTheRealImage.jpg"/></body></html>')
>>> style = soup.find('img')['style']
>>> urls = re.findall('url\((.*?)\)', style)
>>> urls
[u'/theRealImage.jpg']

显然,你需要调整一下这个代码才能让它适用于多个 img 标签。

正确的方法,我觉得建议别人用正则表达式处理CSS字符串实在不太好 :),所以我们可以使用一个CSS解析器。cssutils 是我在谷歌上找到的一个库,在PyPi上也能找到,似乎可以完成这个任务。

撰写回答