Как извлечь с помощью XPath текст, содержащий ‹, не закодированный как

Я хочу извлечь некоторый текст из html-страницы с помощью Scrapy.

Один из элементов содержит символ <, который не закодирован как &lt; (страница не является допустимым html).

Например

<div>
  years < 7
</div>

С XPath (в Chrome или в коде Scapy) с использованием '//div/text()' я могу извлечь только 'years'

Есть ли способ получить полный текст, т.е. 'years < 7'?


person Go4It    schedule 13.11.2013    source источник
comment
Что произойдет, если вы используете //div[not(*)] и получите .textContent результатов?   -  person Tomalak    schedule 13.11.2013


Ответы (2)


вы можете использовать другой модуль вместо основного Выберите, например, я использую свой собственный

from lxml import etree
from lxml.html.clean import clean_html

import html5lib
from lxml.etree import XMLSyntaxError, XPathEvalErro

def parse_user(self, response):        
    m = smarte_html_parser.dive_html_root_level(html=response.body)

от Некоторых Титул лет ‹ 7

У меня лет ‹ 7

person Andrei.Danciuc    schedule 13.11.2013

XPath работает на уровне DOM, а не на том, как что-то закодировано. XPath не видит, использовались ли сущности для определенных целей или нет. Это бизнес парсеров DOM. Таким образом, если анализатор DOM отбросил < 7, потому что не мог понять это, то XPath вообще не увидит эту часть.

Чтобы получить надежные результаты, исправьте HTML другими способами, прежде чем применять XPath.

person Thomas W    schedule 13.11.2013