Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 8, 2007 19:48:33

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

Хочу распарсить HTML-документ, найти нужные теги. Например, найти все теги <h2>…</h2>. При этом “h” может быть и заглавной, а там, где многоточие, могут попадаться и переводы строк. Кроме того, если попадётся <h2>…</h2>…<h2>…</h2>, мне нужно, чтобы это было два совпадения, а не одно. Почитав доку, написал чушь, которая не работает:

(?s|i)<h2>.*(?!(</h2>))</h2>
Вначале пытаюсь сказать, что точка должна схватывать и переводы строк (s), плюс всё делается независимо от регистра (i). После этого пытаюсь сказать, что мне нужно всё, что угодно, что находится между “<h2>” и “</h2>”, но в этом “между” не должно попадаться самого “</h2>” (чтобы получить действительно все заголовки H2, а не отрезок документа между первым и последним таким заголовком).
Исправьте, please…



Офлайн

#2 Апрель 8, 2007 22:40:33

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

Кажись, так работает:

(?si)<h2>(.*?)</h2>



Офлайн

#3 Апрель 10, 2007 09:51:36

denz
От:
Зарегистрирован: 2007-01-09
Сообщения: 117
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

А чем тебе XPath не подходит?



Отредактировано (Апрель 10, 2007 10:00:00)

Офлайн

#4 Апрель 10, 2007 11:41:21

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

А что это и какая связь с регулярными выражениями?



Офлайн

#5 Апрель 10, 2007 12:00:39

denz
От:
Зарегистрирован: 2007-01-09
Сообщения: 117
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

Все ники заняты
А что это и какая связь с регулярными выражениями?
XSLT - манипулирование XML
XPath - обращение к частям XML
я использую реализацию python-lxml. В твоем случае задача решаеца так:

from lxml import etree
from StringIO import StringIO
tree = etree.parse(StringIO(src))
print tree.xpath('//h2')


ХТМЛ должен быт валидным XML. Для этого можно использовать beautifulsoup.prettify().



Офлайн

#6 Апрель 10, 2007 13:30:54

Все ники заняты
От:
Зарегистрирован: 2007-02-18
Сообщения: 156
Репутация: +  1  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

Спасибо, но имхо, сложнее будет.



Офлайн

#7 Апрель 10, 2007 14:14:06

denz
От:
Зарегистрирован: 2007-01-09
Сообщения: 117
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

А че сложного?
Зато унифицированное решение.



Офлайн

#8 Апрель 10, 2007 14:32:42

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

denz
ХТМЛ должен быт валидным XML. Для этого можно использовать beautifulsoup.prettify().
Так, к слову. С год назад, примерно, я пробовал использовать beautifulsoup и в некоторых случаях (примерно 30% реального корявого HTML'а взятого с живых сайтов) beautifulsoup не справлялся с обработкой. Т.е. после beautifulsoup какие-то части содержания и размерки терялись.
В итоге пришлось вернуться к регулярным выражениям, хоть и не хотелось…



Офлайн

#9 Апрель 12, 2007 20:28:36

denz
От:
Зарегистрирован: 2007-01-09
Сообщения: 117
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

OlDer
beautifulsoup не справлялся с обработкой.
beautifulsoup - по идее и не нужен.
Кусок рефа по lxml, только что вычитал:

HTML parsing is similarly simple. The parsers have a ``recover`` keyword
argument that the HTMLParser sets by default. It lets libxml2 try its best to
return something usable without raising an exception. Note that this
functionality depends entirely on libxml2. You should use libxml2 version
2.6.21 or newer to take advantage of this feature.
З.Ы. Будет время - протестю.



Офлайн

#10 Апрель 22, 2007 22:59:25

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

Регулярные выражения, нужна помощь

регулярними виразами то певно не получиться. Пробував HTMLParser дуже гарно парсить і дуже просто користуватись.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version