2016-05-23 5 views
2

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

['<', 'p', '>', '<', 'a', 'href', '>', '<', 'a', '>', '<', 'p', '>', '<', 'div', 'class', '>', '<', 'a', 'href', '>', '<', 'a', '>', '<', 'div', '>'] 

как я могу в настоящее время эффективно и в процессе жесткого кодирования, который, кроме того, содержит каждый тег HTML и атрибут, который он охватывает?

так что после этого я подтвердит, что р не имеет каких-либо атрибутов, а имеет HREF и DIV имеет класс приписывать?

+2

Почему бы не использовать, например. 'BeautifulSoup' в первую очередь? – Jan

+1

Мне любопытно. Зачем вам это нужно? – Vorticity

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags? Возможно, используйте парсер вместо того, чтобы пытаться вручную деконструировать html? –

ответ

0

Просто ради академической задачей, вы могли бы использовать (немного заимствованы из this answer на Stackoverflow)

your_list = ['<', 'p', '>', '<', 'a', 'href', '>', '<', 'a', '>', '<', 'p', '>', '<', 'div', 'class', '>', '<', 'a', 'href', '>', '<', 'a', '>', '<', 'div', '>'] 

for prev,cur,next in zip([None]+your_list[:-1], your_list, your_list[1:]+[None]): 
    if prev == '<' and next == '>': 
     print "%s is an empty element" % cur 

Но: Это, конечно, не самый лучший/быстрый/безопасный способ для достижения своей цели, лучше использовать соответствующий парсер, например, BeautifulSoup. С учетом этого, см. a demo on ideone.com

+0

Извините, но это показывает мне, что div является пустым, что здесь неверно. – JanM

+0

@JanM: Он правильно выводит ** последний ** 'div', который действительно пуст. – Jan

Смежные вопросы