Проверьте (X) HTML в Python

Вот вариант, использующий recode_factor

df %>%
    mutate_at(
        vars(starts_with("s")), 
        ~recode_factor(.x, `-2` = "SLOW", `-1` = "LOW", `0` = "NO", `1` = "HIGH", `2` = "SHIGH"))
#  name   s1   s2    s3
#1    A   NO HIGH SHIGH
#2    B SLOW  LOW    NO
#3    C   NO   NO    NO
#4    D  LOW   NO  HIGH

или альтернативно

library(tidyverse)
df %>%
    gather(k, v, -name) %>%
    mutate(v = recode_factor(v, `-2` = "SLOW", `-1` = "LOW", `0` = "NO", `1` = "HIGH", `2` = "SHIGH")) %>%
    spread(k, v)
#  name   s1   s2    s3
#1    A   NO HIGH SHIGH
#2    B SLOW  LOW    NO
#3    C   NO   NO    NO
#4    D  LOW   NO  HIGH
<час>

Пример данных

df <- read.table(text =
    "name s1 s2 s3
A 0 1 2
B -2 -1 0
C 0 0 0
D -1 0 1
", header = T)
31
задан cdleary 30 August 2008 в 01:15
поделиться

5 ответов

XHTML легок, используйте lxml.

from lxml import etree
from StringIO import StringIO
etree.parse(StringIO(html), etree.HTMLParser(recover=False))

HTML более тверд, так как традиционно не было такого же интереса к проверке среди толпы HTML (выполните сам StackOverflow через блок проверки допустимости, yikes). Самое легкое решение состояло бы в том, чтобы выполнить внешние приложения такой как nsgmls или OpenJade и затем проанализировать их вывод.

11
ответ дан 27 November 2019 в 21:56
поделиться

Можно решить установить блок проверки допустимости HTML локально и создать клиент для запроса проверки.

Здесь я сделал программу для проверки списка URL в txt файле. Я просто проверял ГОЛОВУ для получения состояния проверки, но если бы Вы делаете ПОЛУЧЕНИЕ, Вы получили бы полные результаты. Посмотрите на API блока проверки допустимости, существует много опций для него.

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
11
ответ дан 27 November 2019 в 21:56
поделиться

Попробуйте tidylib. Можно добраться, некоторая действительно основная привязка как часть elementtidy модуля (создает elementtrees из документов 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

Парсинг журнала должен дать Вам в значительной степени все, в чем Вы нуждаетесь.

5
ответ дан 27 November 2019 в 21:56
поделиться

Я думаю, что HTML, опрятный , сделает то, что Вы хотите. Существует привязка Python для него.

2
ответ дан 27 November 2019 в 21:56
поделиться

PyTidyLib - это хорошая привязка Python для HTML Tidy. Их пример:

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

Более того, он совместим как с устаревшим HTML Tidy , так и с новым tidy-html5 .

24
ответ дан 27 November 2019 в 21:56
поделиться