<jupyter_start><jupyter_text>02 - Validera med W3CFöljer webbplatsens kod webbstandard? Ganska ofta finns fel och varningar. Det händer ytterst sällan att valideringsfel beror på att en webbplats ligger före en blivande standard, men läs gärna om [när Whitespace med flit valde att ignorera hundratals fel](https://whitespace.se/blogg/nar-ar-det-ratt-att-gora-fel/).  02:01 - Validerar HTML-koden?När HTML-koden är trasig kan det ställa till problem i folks olika webbläsare.<jupyter_code>import requests
from bs4 import BeautifulSoup

url = 'https://www.vgregion.se'
# fejkar att det är Google som ber om sidan
headers = { 'User-Agent': 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)', }

req = requests.get('https://validator.w3.org/nu/?doc={0}'.format(url.replace(':', '%3A').replace('/', '%2F')), headers=headers)

soup = BeautifulSoup(req.content)
fel = soup.find_all(class_="error")
varning = soup.find_all(class_="warning")

print('Antal valideringsfel:', len(fel), 'stycken')
print('Antal varningar:', len(varning), 'stycken')<jupyter_output>Antal valideringsfel: 29 stycken
Antal varningar: 11 stycken<jupyter_text>02:02 – Validerar CSS-koden?Trasig CSS-kod kan göra att saker inte visas upp på rätt sätt men också att det tar längre tid för webbsidan att visa upp sig när den måste lägga tid på att bearbeta felaktigheter.<jupyter_code># BeautifulSoup och requests är importerade i föregående cell
# variablerna url och header är definierade i föregående cell

req = requests.get('https://jigsaw.w3.org/css-validator/validator?uri={0}&profile=css3svg&usermedium=all&warning=1&vextwarning=&lang=en'.format(url.replace(':', '%3A').replace('/', '%2F')), headers=headers)

soup = BeautifulSoup(req.content)
fel = soup.find_all("tr", {"class": "error"})
varning = soup.find_all("tr", {"class": "warning"})

print('Antal valideringsfel:', len(fel), 'stycken')
print('Antal varningar:', len(varning), 'stycken')<jupyter_output>Antal valideringsfel: 8 stycken
Antal varningar: 634 stycken<jupyter_text>02:03 - Validerar RSS-flödet?<jupyter_code># todo<jupyter_output><empty_output><jupyter_text>02:04 - Validerar sitemap/siteindex?<jupyter_code># todo<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.13755656108597286, 'fraction_numerical': 0.019004524886877826, 'mean_word_length': 6.624137931034483, 'pattern_counts': {'":': 2, '<': 15, '<?xml version=': 0, '>': 15, 'https://': 4, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '213043', 'license': 'MIT', 'n_tokens_mistral': 845, 'n_tokens_neox': 828, 'n_words': 194, 'path': '02 - validera med w3c.ipynb', 'repo_name': 'Webperf-se/notebooks-diy', 'size': '2210'}