Извлечение некоторых значений тегов HTML в Python - PullRequest
2 голосов
/ 23 июня 2010

Как получить значение вложенного <b> HTML-тега в Python с помощью регулярных выражений?

<a href="/model.xml?hid=90971&amp;modelid=4636873&amp;show-uid=678650012772883921" class="b-offers__name"><b>LG</b> X110</a>

# => LG X110

Ответы [ 5 ]

7 голосов
/ 23 июня 2010

Ты не.

Регулярные выражения плохо подходят для работы с вложенной структурой HTML. Вместо этого используйте HTML-парсер .

6 голосов
/ 23 июня 2010

Не используйте регулярные выражения для разбора HTML. Используйте анализатор HTML, например BeautifulSoup . Просто посмотрите, как это просто:

from BeautifulSoup import BeautifulSoup
html = r'<a href="removed because it was too long"><b>LG</b> X110</a>'
soup = BeautifulSoup(html)
print ''.join(soup.findAll(text=True))
# LG X110
1 голос
/ 23 июня 2010

Ваш вопрос было очень трудно понять, но из приведенного примера вывода похоже, что вы хотите убрать все в пределах < и > из входного текста. Это можно сделать так:

import re
input_text = '<a bob>i <b>c</b></a>'
output_text = re.sub('<[^>]*>', '', input_text)
print output_text

Что дает вам:

i c

Если это не то, что вы хотите, уточните.

Обратите внимание, что подход регулярного выражения для разбора XML очень хрупок. Например, приведенный выше пример будет разбит на вход <a name="b>c">hey</a>. (> является допустимым символом в значении атрибута: см. Спецификации XML )

1 голос
/ 23 июня 2010

Попробуйте это ...

<a.*<b>(.*)</b>(.*)</a>

$ 1 и $ 2 должны быть тем, что вы хотите, или любым другим средством, которое Python имеет для печати захваченных групп.

0 голосов
/ 23 июня 2010

+ 1 за ответ Йенса. lxml - хорошая библиотека, которую вы можете использовать для эффективного анализа.Если вы предпочитаете что-то в стандартной библиотеке, вы можете использовать sax , dom или elementree .

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