Python (X) HTML doğrulama

oy
29

Bir belge (ı belirtebildiklerinden prefereably) bazı HTML versiyonunu izler doğrulama hakkında gitmek için en iyi yolu nedir? Ben başarısızlıklar gerçekleştiği bir yerli Python uygulaması hariç web tabanlı doğrulayıcı olduğu gibi bilme istiyorum.

Oluştur 30/08/2008 saat 00:15
kaynak kullanıcı
Diğer dillerde...                            


8 cevaplar

oy
8

XHTML kolaydır, kullanmak LXML .

HTML kalabalık arasında doğrulama geleneksel olarak olmamıştır kadar ilgi (a validator ile StackOverflow kendisi çalıştırmak Zebra,) var çünkü HTML, daha zordur. En kolay çözüm gibi harici uygulamaları çalıştırmak için olacağını nsgmls veya OpenJade ve sonra onların çıkışını ayrıştırmak.

Cevap 30/08/2008 saat 00:20
kaynak kullanıcı

oy
3

Ben düşünüyorum düzenli HTML istediğini yapacağız. Bunun için bağlayıcı bir Python vardır.

Cevap 30/08/2008 saat 00:48
kaynak kullanıcı

oy
5

Tidylib deneyin. Sen elementtidy modülü (HTML belgelerinden elementtrees oluşturur) bir parçası olarak bazı gerçekten temel bağlantıları alabilirsiniz. http://effbot.org/downloads/#elementtidy

>>> import _elementtidy
>>> xhtml, log = _elementtidy.fixup("<html></html>")
>>> print log
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 1 column 7 - Warning: discarding unexpected </html>
line 1 column 14 - Warning: inserting missing 'title' element

günlüğünü Ayrıştırma size ihtiyacınız hemen hemen her şeyi vermelidir.

Cevap 30/08/2008 saat 00:55
kaynak kullanıcı

oy
11

Yerel olarak HTML doğrulayıcı yükleyip doğrulama istemek için bir istemci oluşturmak için karar verebilir.

Burada bir txt dosyasında URL'lerin listesini doğrulamak için bir program yapmıştı. Sadece doğrulama durumunu almak için HEAD kontrol ediyordu, ancak bir GET yaparsanız tam sonuç almak istiyorum. doğrulayıcı API bak, bunun için pek çok seçenek vardır.

import httplib2
import time

h = httplib2.Http(".cache")

f = open("urllistfile.txt", "r")
urllist = f.readlines()
f.close()

for url in urllist:
   # wait 10 seconds before the next request - be nice with the validator
   time.sleep(10)
   resp= {}
   url = url.strip()
   urlrequest = "http://qa-dev.w3.org/wmvs/HEAD/check?doctype=HTML5&uri="+url
   try:
      resp, content = h.request(urlrequest, "HEAD")
      if resp['x-w3c-validator-status'] == "Abort":
         print url, "FAIL"
      else:
         print url, resp['x-w3c-validator-status'], resp['x-w3c-validator-errors'], resp['x-w3c-validator-warnings']
   except:
      pass
Cevap 14/03/2009 saat 21:42
kaynak kullanıcı

oy
22

PyTidyLib HTML Tidy için bağlayıcı güzel piton olduğunu. Onların örnek:

from tidylib import tidy_document
document, errors = tidy_document('''<p>f&otilde;o <img src="bar.jpg">''',
    options={'numeric-entities':1})
print document
print errors

Üstelik her iki uyumludur mirası HTML Tidy ve yeni düzenli-html5 .

Cevap 14/08/2009 saat 17:04
kaynak kullanıcı

oy
15

Ben de W3C Validation Service çağırmak için en şık yolu o düşünmek

http://validator.w3.org/

programlı. hizmet standart dışı HTTP başlık parametrelerinin döndürdüğü için çok az insan, sonuçları almak için sonuçlar ekran kazımak zorunda olmadığını biliyorum

X-W3C-Validator-Recursion: 1
X-W3C-Validator-Status: Invalid (or Valid)
X-W3C-Validator-Errors: 6
X-W3C-Validator-Warnings: 0

geçerlik ve hataları ve uyarıları sayısını belirtmek için.

Örneğin, komut satırı

curl -I "http://validator.w3.org/check?uri=http%3A%2F%2Fwww.stalsoft.com"

döner

HTTP/1.1 200 OK
Date: Wed, 09 May 2012 15:23:58 GMT
Server: Apache/2.2.9 (Debian) mod_python/3.3.1 Python/2.5.2
Content-Language: en
X-W3C-Validator-Recursion: 1
X-W3C-Validator-Status: Invalid
X-W3C-Validator-Errors: 6
X-W3C-Validator-Warnings: 0
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Connection: close

Böylece, zarif W3C Validation Service çağırmak ve HTTP başlığından sonuçları çıkarabilir:

# Programmatic XHTML Validations in Python
# Martin Hepp and Alex Stolz
# mhepp@computer.org / alex.stolz@ebusiness-unibw.org

import urllib
import urllib2

URL = "http://validator.w3.org/check?uri=%s"
SITE_URL = "http://www.heppnetz.de"

# pattern for HEAD request taken from 
# http://stackoverflow.com/questions/4421170/python-head-request-with-urllib2

request = urllib2.Request(URL % urllib.quote(SITE_URL))
request.get_method = lambda : 'HEAD'
response = urllib2.urlopen(request)

valid = response.info().getheader('X-W3C-Validator-Status')
if valid == "Valid":
    valid = True
else:
    valid = False
errors = int(response.info().getheader('X-W3C-Validator-Errors'))
warnings = int(response.info().getheader('X-W3C-Validator-Warnings'))

print "Valid markup: %s (Errors: %i, Warnings: %i) " % (valid, errors, warnings)
Cevap 09/05/2012 saat 14:53
kaynak kullanıcı

oy
0

Benim durumumda piton W3C / HTML doğrulama paketleri işe yaramadı pip search w3c(Eylül 2016 itibariyle).

Ben bu çözüldü

$ pip install requests

$ python
Python 2.7.12 (default, Jun 29 2016, 12:46:54)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> r = requests.post('https://validator.w3.org/nu/', 
...                    data=file('index.html', 'rb').read(), 
...                    params={'out': 'json'}, 
...                    headers={'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36', 
...                    'Content-Type': 'text/html; charset=UTF-8'})

>>> r.text
>>> u'{"messages":[{"type":"info", ...

>>> r.json()
>>> {u'messages': [{u'lastColumn': 59, ...

Burada daha fazla dokümantasyon piton istekleri , W3C API

Cevap 05/09/2016 saat 18:30
kaynak kullanıcı

oy
0

Bu LXML en HTMLParser dayalı bir çok temel html validator olduğunu. Herhangi bir internet bağlantısı gerektirmez.

_html_parser = None
def validate_html(html):
    global _html_parser
    from lxml import etree
    from StringIO import StringIO
    if not _html_parser:
        _html_parser = etree.HTMLParser(recover = False)
    return etree.parse(StringIO(html), _html_parser)

örneğin, aşağıdaki geçecek bu nedenle bu, kapanış etiketleri kontrol unutmayın:

validate_html("<a href='example.com'>foo</a>")

Ancak, aşağıdaki alışkanlık:

validate_html("<a href='example.com'>foo</a")
Cevap 24/10/2016 saat 22:11
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more