2017-12-27 1 views
1

HTML 태그 유효성을 검사하고 싶습니다. 올바른 HTML인지 아닌지 ... 코드를 시도했습니다.HTML 태그 유효성 확인

def must_have_proper_htmltag(self,filename): 
     """ 

     :param filename: 
     :return: 
     """ 
     print(filename) 
     return bool(BeautifulSoup(filename, 'html.parser').find()) 

     '''Beautiful soup is library function to pull HTML or XML 
      html.parser is for choosing html doc and find() for 
      checking occuranc''' 
`htmltags='<html><head><title>Test</title></head>''<body><h1>Parse me!</h1> 
</body></html>' 
nohtmltag = '<html><head><title>Test</title></head>''<body><h1>Parse me!' 
print('html checkers:-',qc.must_have_proper_htmltag(htmltag)) 
print('html checkers:-',qc.must_have_proper_htmltag(nohtmltag)) 

HTML 태그가 적합한 지 여부를 확인하지 않는 HTML 태그 또는 not..it가 있는지이 기능 ​​검사 여부를 내 문제는 내가 HTML 태그 유효성을 검사 할 수 있습니다 어떻게 출력을 원하는입니다 HTML 태그 하나는 참입니다. 다른 하나는 거짓입니다.

답변

1
You can validate it using w3c validator 
from py_w3c.validators.html.validator import HTMLValidator 

def must_have_proper_htmltag(self,filename): 
    """ 

    :param filename: 
    :return: 
    """ 
    print(filename) 
    html_validator = HTMLValidator() 
    html_validator.validate_fragment(filename) 
    if not html_validator.errors: 
     '''Where there is no error it return empty list''' 
     return True 
    else: 
     return False 

print('html checkers:-',qc.must_have_proper_htmltag('<!DOCTYPE html><html> 
<head><title>Test</title></head>''<body><h1>Parse me!</h1></body></html>')) 
2

요구 사항과 정확히 일치하지는 않지만 다른 사람들이 이미 수행 한 작업을보다 쉽게 ​​활용할 수 있습니다. 예를 들면 :

그것은 하나의 태그 만 후 당신 분명히 무엇이다, 올바른 될 수있는 HTML의 전체를 확인하지 않습니다.

아마도 this approach뿐만 아니라 당신을 도울 수 있습니다

import HTMLParser 
import urllib 
import sys 
import urlparse 

################################################## 
# config 

base_url = 'http://foo.com/bill_reid/' 
depth = 100 

w3c_validator = 'http://validator.w3.org/' 

################################################## 
# classes and functions 

# HTML parser class 
class parseLinks(HTMLParser.HTMLParser): 
    def handle_starttag(self, tag, attrs): 
     if tag == 'a': 
      for name,value in attrs: 
       if name == 'href': 
        url = url_normalize(value) 
        if url != "" and not(l.has_key(url)): 
         l[url] = True; 

# HTML parsing function (use the class) 
def parse_links(url): 
    try: 
     lParser = parseLinks() 
     lParser.feed(urllib.urlopen(url).read()) 
     lParser.close() 
    except: 
     pass 

# clean/normalize/reject url 
def url_normalize(url): 
    url= url.strip() 

    # check it's not an email address 
    if url.startswith('mailto:'): 
     return "" 

    # remove any anchor 
    url = url.partition('#')[0] 

    # check it's not an outside-of-the-tree link 
    url = urlparse.urljoin(current_url, url) 
    if not(url.startswith(base_url)): 
     return "" 

    # check it's an HTML page 
    if urllib.urlopen(url).info().gettype() != 'text/html': 
     return "" 

    return url 

# W3C validation 
def url_w3c_validate(url): 
    return urllib.urlopen(w3c_validator + 'check?uri=' + url).info().getheader('x-w3c-validator-status') == 'Valid' 

################################################## 
# main 
################################################## 
l = {base_url: True} 
l_error = [] 
n = 0 
for i in range(depth): 
    for url in l.copy(): 
     if l[url]: 
      n += 1 
      current_url = url 
      print n, 
      print "-", 
      print current_url, 

      print " parsing...", 
      parse_links(url) 
      print "done -", 

      print "validating...", 
      is_valid = url_w3c_validate(url) 
      print "done ->", 
      if is_valid: 
       print "Valid" 
      else: 
       l_error.append(url) 
       print "Invalid" 

      l[url] = False 

#report 
print """ 
------------------------------------- 
URLs parsed: %d 
URLS with invalid HTML: %d""" % (len(l), len(l_error)) 

for url in l_error: 
    print url