Как вытащить атрибуты CSS из встроенных стилей с BeautifulSoup - PullRequest
9 голосов
/ 14 февраля 2012

У меня есть что-то вроде этого:

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

Я использую Beautifulsoup для анализа HTML.Есть ли где-нибудь, чтобы вытащить "url" в атрибуте "background" css?

1 Ответ

10 голосов
/ 14 февраля 2012

У вас есть пара вариантов - быстрый и грязный или правильный путь. Быстрый и грязный способ (который легко сломается при изменении разметки) выглядит как

>>> 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 , библиотека, которую я только что нашел в Google и которая доступна на PyPi, похоже, что она может сработать.

...