jQuery-подобный HTML-разбор в Python? - PullRequest
59 голосов
/ 16 июня 2010

Существует ли какая-либо библиотека Python, позволяющая мне анализировать HTML-документ, аналогичный тому, что делает jQuery?

т.е. я хотел бы иметь возможность использовать синтаксис селектора CSS для получения произвольного набора узлов издокумент, чтение их содержимого / атрибутов и т. д.

Единственная библиотека для разбора Python HTML, которую я использовал ранее, была BeautifulSoup, и, хотя это нормально, я продолжаю думать, что было бы быстрее выполнить мой анализ, если бы у меня был jQueryсинтаксис доступен.: D

Ответы [ 3 ]

57 голосов
/ 16 июня 2010

Если вы свободно владеете BeautifulSoup , вы можете просто добавить soupselect в свои библиотеки.
Soupselect - расширение селектора CSS для BeautifulSoup.

Использование:

>>> 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>,
..]
43 голосов
/ 11 мая 2011

Рассмотрим 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'
13 голосов
/ 16 июня 2010

Библиотека lxml поддерживает CSS-селекторы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...