2012-02-14 27 views
8

साथ इनलाइन शैलियों से जिम्मेदार बताते हैं मैं कुछ इस तरह है:कैसे बाहर निकलने के लिए सीएसएस BeautifulSoup

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

मैं BeautifulSoup उपयोग कर रहा हूँ एचटीएमएल पार्स करने के लिए। "पृष्ठभूमि" सीएसएस विशेषता में "यूआरएल" खींचने के लिए दूर है?

उत्तर

9

आपके पास कुछ विकल्प हैं- त्वरित और गंदे या सही रास्ता। त्वरित और गंदी तरह से (जो आसानी से अगर मार्कअप बदल गया है टूट जाएगा) लगता है कि

>>> 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 टैग के साथ काम करने के लिए प्राप्त करने के लिए उस के साथ खेलने के लिए होगा।

द राइट वे, क्योंकि मैं किसी सीएसएस स्ट्रिंग पर रेगेक्स का उपयोग करने का सुझाव देने के लिए भयानक महसूस करता हूं :), एक सीएसएस पार्सर का उपयोग करता है। cssutils, एक लाइब्रेरी जो मैंने अभी Google पर पाई है और पीपीपी पर उपलब्ध है, ऐसा लगता है कि यह नौकरी कर सकता है।

+2

मैंने भयानक रेगेक्स विधि शामिल की क्योंकि मुझे पता है कि स्क्रैपिंग नौकरियों का एक टन एक-ऑफ है, लेकिन यदि यह कोड एक दिन से अधिक समय तक जीने जा रहा है तो इसे सीएसएस पार्सर की तरह कुछ बेहतर उपयोग करना चाहिए। उपरोक्त उदाहरण, फिर से, बहुत तोड़ने योग्य है। –

संबंधित मुद्दे