में मान्य (एक्स) एचटीएमएल एचटीएमएल के कुछ संस्करणों का पालन करने के बारे में यह जानने का सबसे अच्छा तरीका क्या है (प्राथमिक रूप से मैं निर्दिष्ट कर सकता हूं)? मैं मूल पाइथन ऐप को छोड़कर, वेब-आधारित सत्यापनकर्ता के रूप में विफलताओं के बारे में जानना चाहता हूं।पाइथन
पाइथन
उत्तर
एक्सएचटीएमएल आसान है, lxml का उपयोग करें।
एचटीएमएल कठिन है, क्योंकि परंपरागत रूप से एचटीएमएल भीड़ के बीच सत्यापन में ज्यादा दिलचस्पी नहीं है (एक वैधकर्ता, यिक्स के माध्यम से खुद को स्टैक ओवरव्लो चलाएं)। सबसे आसान समाधान nsgmls या OpenJade जैसे बाहरी अनुप्रयोगों को निष्पादित करना होगा, और फिर उनके आउटपुट को पार्स करें।
नोट: एलएक्सएमएल लिंक टूटा हुआ है। [यह एक] (http://lxml.de/) का प्रयोग करें, शायद? –
मुझे लगता है कि HTML tidy आप जो चाहते हैं वह करेंगे। इसके लिए एक पाइथन बाध्यकारी है।
tidylib आज़माएं। आप तत्व मॉड्यूल के हिस्से के रूप में कुछ वास्तव में बुनियादी बाइंडिंग प्राप्त कर सकते हैं (HTML दस्तावेज़ों से तत्व बनाते हैं)। 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
लॉग पार्स आप काफी सब कुछ आप की जरूरत है देना चाहिए।
आप स्थानीय रूप से HTML सत्यापनकर्ता स्थापित करने और सत्यापन के अनुरोध के लिए क्लाइंट बनाने का निर्णय ले सकते हैं।
यहां मैंने एक txt फ़ाइल में urls की सूची को सत्यापित करने के लिए एक प्रोग्राम बनाया था। मैं सिर्फ सत्यापन स्थिति प्राप्त करने के लिए सिर की जांच कर रहा था, लेकिन यदि आप प्राप्त करते हैं तो आपको पूर्ण परिणाम मिलेंगे। सत्यापनकर्ता के एपीआई को देखें, इसके लिए बहुत सारे विकल्प हैं।
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
अफसोस की बात है, 'html5lib' [मान्य नहीं है] (http://stackoverflow.com/a/29992363/593047)। –
PyTidyLib एचटीएमएल टिडी के लिए एक अच्छा पायथन बाध्यकारी है। उनके उदाहरण:
from tidylib import tidy_document
document, errors = tidy_document('''<p>fõo <img src="bar.jpg">''',
options={'numeric-entities':1})
print document
print errors
इसके अलावा यह दोनों legacy HTML Tidy और new tidy-html5 के साथ संगत है।
डेबियन में पैकेज: पायथन-टिडिलिब – sumid
मुझे लगता है कि सबसे खूबसूरत जिस तरह से यह
http://validator.w3.org/
प्रोग्राम के रूप में W3C मान्यकरण सेवा आह्वान करने के लिए। कुछ लोगों, पता है कि तुम क्रम परिणाम प्राप्त करने के परिणाम स्क्रीन-स्क्रैप करने की जरूरत नहीं है कि क्योंकि सेवा देता है अमानक HTTP हेडर PARAMATERS
X-W3C-Validator-Recursion: 1
X-W3C-Validator-Status: Invalid (or Valid)
X-W3C-Validator-Errors: 6
X-W3C-Validator-Warnings: 0
वैधता और त्रुटियों और चेतावनियों की संख्या का संकेत के लिए।
उदाहरण के लिए, कमांड लाइन
curl -I "http://validator.w3.org/check?uri=http%3A%2F%2Fwww.stalsoft.com"
रिटर्न
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
इस प्रकार, आप सुंदर ढंग से W3C मान्यकरण सेवा आह्वान और HTTP हेडर से परिणाम निकाल सकते हैं:
# Programmatic XHTML Validations in Python
# Martin Hepp and Alex Stolz
# [email protected]/[email protected]
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)
डब्ल्यू 3 सी वैलिडेटर और एक पाइथन बाध्यकारी के लिए एक पूर्ण वेब सेवा API भी है: https://bitbucket.org/nmb10/py_w3c –
यह यूआरएल अब 302 लौटा रहा है और 200 नहीं। अब काम नहीं करता है! – sreeraag
मेरे मामले में पायथन डब्ल्यू 3 सी/एचटीएमएल सत्यापन पैकेज काम नहीं किया pip search w3c
(2016 से सितंबर तक)।
मैं
$ 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, ...
अधिक प्रलेखन यहाँ python requests के साथ इस हल, W3C Validator API
यह एक बहुत ही बुनियादी एचटीएमएल lxml के HTMLParser के आधार पर सत्यापनकर्ता है। इसे किसी भी इंटरनेट कनेक्शन की आवश्यकता नहीं है।
_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)
है कि इस बंद करने टैग की जांच नहीं करेगा, तो उदाहरण के लिए, निम्नलिखित पारित करेंगे नोट:
validate_html("<a href='example.com'>foo</a>")
हालांकि, अभ्यस्त निम्नलिखित:
validate_html("<a href='example.com'>foo</a")
कृपया ध्यान दें कि मान्यता है tidying से अलग! लोग जो पोस्ट कर रहे हैं उनमें से कुछ उत्तर HTML को स्वचालित रूप से सही करने के बारे में हैं, केवल यह सत्यापित करने के बजाय कि HTML मान्य है या नहीं। – Flimm