Извлечение значения тега в BeautifulSoup, когда невозможно сопоставить по позиции или атрибутам - PullRequest
2 голосов
/ 06 августа 2010

Я использую BS для очистки веб-страницы, и я немного застрял с небольшой проблемой. Вот фрагмент кода HTML со страницы.

<span style="font-family: arial;"><span style="font-weight: bold;">Artist:</span> M.I.A.<br>
</span>

Как только я получу суп, как я могу найти этот тег и получить имя исполнителя, т.е. М.И.А. Я не могу сопоставить тег с атрибутом style, так как он используется в десятках мест на странице. Я даже не знаю точное местоположение тега span, так как он меняет положение со страницы на страницу. Поэтому я не могу сопоставить по позиции. Имя исполнителя меняется, но структура заголовка всегда одинакова.

Я хотел бы только извлечь имя исполнителя (бит М.И.А.).

1 Ответ

1 голос
/ 06 августа 2010

BeautifulSoup является мертвым, поскольку SGMLParser устарело.Я предлагаю вам использовать лучшую библиотеку lxml - она ​​даже имеет поддержку xpath !!

from lxml import html

text = '''
<span style="font-family: arial;">
    <span style="font-weight: bold;">Artist:</span>M.I.A.<br>
</span>
'''

doc = html.fromstring(text)
print ''.join(doc.xpath("//span/span[text()='Artist:']/../text()"))

Это выражение xpath означает "найтиТег span, который находится внутри другого тега span и содержит текст 'Artist:', и захватывает весь текст родительского тега, содержащего тег * .Он правильно печатает M.I.A., как и следовало ожидать.

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