2010-06-16 46 views
51

Có thư viện Python nào cho phép tôi phân tích cú pháp một tài liệu HTML tương tự như những gì jQuery làm không?Phân tích cú pháp HTML giống như jquery bằng Python?

tức là tôi muốn để có thể sử dụng cú pháp CSS selector để lấy một bộ tùy ý của các nút từ tài liệu, đọc nội dung/thuộc tính của họ, vv

Các chỉ Python HTML lib phân tích cú pháp tôi đã sử dụng trước đây là BeautifulSoup, và mặc dù tôi vẫn cứ nghĩ rằng sẽ nhanh hơn nếu tôi có cú pháp phân tích cú pháp jQuery. : D

Trả lời

47

Nếu bạn thông thạo với BeautifulSoup, bạn chỉ có thể thêm soupselect vào thư viện của mình.
Chọn lựa là một tiện ích mở rộng bộ chọn CSS cho BeautifulSoup.

Cách sử dụng:

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

này nghe có vẻ như là giải pháp tốt nhất cho tôi ngay bây giờ, tôi sẽ cung cấp cho nó một thử. Cảm ơn! –

+4

Bây giờ là 'từ bs4' cho Beautiful Soup 4 – Flash

+9

Trong trường hợp bạn có vấn đề cài đặt soupselect, bạn nên thử phiên bản tương thích pip được cung cấp https://github.com/syabro/soupselect:' sudo pip install https: // Github.com/syabro/soupselect/archive/master.zip' – AsTeR

35

Cân nhắc 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' 
Các vấn đề liên quan