2010-06-16 15 views
51

क्या कोई पाइथन लाइब्रेरी है जो मुझे HTML दस्तावेज़ के समान HTML दस्तावेज़ का विश्लेषण करने की अनुमति देती है?jquery-like HTML पार्सिंग?

यानी मैं CSS चयनकर्ता सिंटैक्स का उपयोग करने के लिए दस्तावेज़ से नोड्स के एक मनमाना सेट हड़पने के लिए सक्षम होने के लिए करना चाहते हैं, उनकी सामग्री/गुण, आदि पढ़

केवल अजगर एचटीएमएल पार्स lib मैं का उपयोग किया है पहले सुंदर सूप था, और भले ही यह ठीक है, मैं सोचता रहता हूं कि अगर मेरे पास jQuery सिंटैक्स उपलब्ध था तो यह मेरे पार्सिंग को तेज कर देगा। : डी

उत्तर

47

यदि आप BeautifulSoup के साथ धाराप्रवाह हैं, तो आप अपनी libs में soupselect जोड़ सकते हैं।
सूपसेलेक्ट सुंदर सूप के लिए एक सीएसएस चयनकर्ता विस्तार है।

उपयोग:

>>> from BeautifulSoup import BeautifulSoup as Soup 
>>> from soupselect import select 
>>> import urllib 
>>> soup = Soup(urllib.urlopen('http://slashdot.org/')) 
>>> select(soup, 'div.title h3') 
[<h3><span><a href='//science.slashdot.org/'>Science</a>:</span></h3>, 
<h3><a href='//slashdot.org/articles/07/02/28/0120220.shtml'>Star Trek</h3>, 
..] 
+0

यह मेरे लिए सबसे अच्छा समाधान की तरह अभी लगता है, मैं इसे एक कोशिश दे देंगे। धन्यवाद! –

+4

यह सुंदर सूप 4 – Flash

+9

के लिए अब बीएस 4' से है, यदि आपको सूपसेलेक्ट स्थापित करने में समस्या है, तो आपको पीपी संगत संस्करण को उसकी https://github.com/syabro/soupselect की पेशकश करनी चाहिए: 'sudo pip install https: // github.com/syabro/soupselect/archive/master.zip' – AsTeR

35

पर विचार करें PyQuery:

http://packages.python.org/pyquery/

>>> from pyquery import PyQuery as pq 
>>> from lxml import etree 
>>> import urllib 
>>> d = pq("<html></html>") 
>>> d = pq(etree.fromstring("<html></html>")) 
>>> d = pq(url='http://google.com/') 
>>> d = pq(url='http://google.com/', opener=lambda url: urllib.urlopen(url).read()) 
>>> d = pq(filename=path_to_html_file) 
>>> d("#hello") 
[<p#hello.hello>] 
>>> p = d("#hello") 
>>> p.html() 
'Hello world !' 
>>> p.html("you know <a href='http://python.org/'>Python</a> rocks") 
[<p#hello.hello>] 
>>> p.html() 
u'you know <a href="http://python.org/">Python</a> rocks' 
>>> p.text() 
'you know Python rocks' 
संबंधित मुद्दे