2015-03-27 3 views
2

Я пытаюсь использовать LXML для проверки кусок HTML, но он жалуется, что фрагмент является недействительным, даже если он должен быть действительным:Использование LXML для Подтвердить HTML

img = """<img src="http://api.com/?data=ey&ip=1&img=1" height="1" width="1">""" 
parser = lxml.etree.HTMLParser(recover=False) 
lxml.etree.parse(StringIO(img), parser) 

поднимает:

XMLSyntaxError: htmlParseEntityRef: expecting ';', line 1, column 37 

Изменение значения &, разделяющего части строки запроса на ;, похоже, устраняет проблему, но это не обязательно. Использование точек с запятой - recommendation of the W3C.

Есть ли что-то, что я могу сделать, чтобы получить lxml, чтобы увидеть этот фрагмент как действительный?

ответ

0

я не могу проверить его с LXML, но я предполагаю, что у вас есть, чтобы избежать амперсанд, как &amp;:

<img src="http://api.com/?data=ey&amp;ip=1&amp;img=1" height="1" width="1"> 
+0

Я на самом деле думаю, что LXML _requires_ согласно W3C _recommendation_ является '' . –

+0

@AlexRothberg: Почему так должно быть? Нет рекомендации W3C, которая требует ';' в URI. Вы можете создавать свои URI согласно [стандарту URI] (http://tools.ietf.org/html/std66). Фактически, по умолчанию формы HTML GET используют '&' для разделения пар имя-значение в компоненте запроса. Ваш пример URI в порядке; вам просто нужно избегать '&', если они используются в атрибутах HTML, таких как 'href'. – unor

Смежные вопросы