Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pull out CSS attributes from inline styles with BeautifulSoup

I have something like this:

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

I am using beautifulsoup to parse the html. Is there away to pull out the "url" in the "background" css attribute?

like image 997
thegreyspot Avatar asked Feb 14 '12 03:02

thegreyspot


1 Answers

You've got a couple options- quick and dirty or the Right Way. The quick and dirty way (which will break easily if the markup is changed) looks like

>>> 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']

Obviously, you'll have to play with that to get it to work with multiple img tags.

The Right Way, since I'd feel awful suggesting someone use regex on a CSS string :), uses a CSS parser. cssutils, a library I just found on Google and available on PyPi, looks like it might do the job.

like image 161
Matt Luongo Avatar answered Sep 22 '22 01:09

Matt Luongo