Python lxml.html El operador XPath “attribute not equal” no funciona como se esperaba

Estoy tratando de ejecutar el siguiente script:

#!python from urllib import urlopen #urllib.request for python3 from lxml import html url = 'http://mpk.lodz.pl/rozklady/1_11_D2D3/00d2/00d2t001.htm?r=KOZINY'+\ '%20-%20Srebrzy%F1ska,%20Cmentarna,%20Legion%F3w,%20pl.%20Wolno%B6ci'+\ ',%20Pomorska,%20Kili%F1skiego,%20Przybyszewskiego%20-%20LODOWA' raw_html = urlopen(url).read() tree = html.fromstring(raw_html) #need to .decode('windows-1250') in python3 ret = tree.xpath('//td [@class!="naglczas"]') print ret assert(len(ret)==1) 

Espero que seleccione la td que no tiene su clase configurada en ‘naglczas’. En cambio, me devuelve una lista vacía. ¿Porqué es eso? Supongo que hay alguna razón tonta, pero traté de buscar en Google y no encontré nada que pudiera explicarlo.

Su expresión xpath encontrará

un elemento td que tiene una clase que no es “naglczas”

Parece que quieres (ya que las únicas 3 td-s con una clase tienen la misma clase que no quieres)

un elemento td que no tiene una clase de “naglczas”

Esos pueden sonar similares, pero son diferentes. Algo como

 tree.xpath('//td[not(@class="naglczas")]') 

debería conseguirte lo que quieres

Además, no necesita usar urllib para abrir la url, lxml puede hacerlo por usted, usando lxml.html.parse() .