2016-11-11 5 views
2

как подсчитать число открывающих и закрывающих тегов в HTMLпитон как подсчитать число открывающих и закрывающих тегов в HTML

ya.html

<div class="side-article txt-article"> 
<p> 
    <strong> 
    </strong> 
    <a href="http://batam.tribunnews.com/tag/polres/" title="Polres"> 
    </a> 
    <a href="http://batam.tribunnews.com/tag/bintan/" title="Bintan"> 
    </a> 
</p> 
<p> 
    <br> 
</p> 
<p> 
    <a href="http://batam.tribunnews.com/tag/polres/" title="Polres"> 
    </a> 
</p> 
<p> 
    <a href="http://batam.tribunnews.com/tag/polres/" title="Polres"> 
    </a> 
    <a href="http://batam.tribunnews.com/tag/bintan/" title="Bintan"> 
    </a> 
</p> 
<br> 

мой код

from bs4 import BeautifulSoup 

soup = BeautifulSoup(open('ya.html'), "html.parser") 
num_apperances_of_tag = len(soup.find_all()) 

print num_apperances_of_tag 

выход

13 

, но это не я хочу, потому что мой код подсчитывает <p> </p> как один раз, когда я хочу подсчитывать открывающий и закрывающий теги отдельно.

Как подсчитать количество открывающих и закрывающих тегов в html? поэтому выход будет

23 

благодаря

ответ

2

Я предлагаю вам использовать HTML Parser для решения этой проблемы:

from HTMLParser import HTMLParser 

number_of_starttags = 0 
number_of_endtags = 0 

# create a subclass and override the handler methods 
class MyHTMLParser(HTMLParser): 
    def handle_starttag(self, tag, attrs): 
     global number_of_starttags 
     number_of_starttags += 1 

    def handle_endtag(self, tag): 
     global number_of_endtags 
     number_of_endtags += 1 

# instantiate the parser and fed it some HTML 
parser = MyHTMLParser() 
parser.feed('<html><head><title>Test</title></head><body><h1>Parse me!</h1></body></html>') 

print(number_of_starttags, number_of_endtags) 
+0

он не работает для меня я получил UnboundLocalError: локальная переменная «number_of_starttags» ссылочные перед назначением. –

+0

правый, из-за класса. Просто укажите глобальность для переменных, и она будет работать нормально. –