Python lxml.html XPath“属性不等于”运算符未按预期工作

时间:2012-11-04 14:00:08

标签: python html xpath screen-scraping lxml

我正在尝试运行以下脚本:

#!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)

我希望它选择一个没有将其类设置为'naglczas'的td。相反,它返回一个空列表。这是为什么?我想有一些愚蠢的理由,但我尝试使用谷歌搜索,没有发现任何可以解释它的内容。

1 个答案:

答案 0 :(得分:6)

您的xpath表达式将找到

  

一个td元素,其类不是“naglczas”

你似乎想要(因为一个班级中只有3个td-s有你不想要的同一个班级)

  

没有“naglczas”类的td元素


这些可能听起来很相似,但它们是不同的。 像

这样的东西
tree.xpath('//td[not(@class="naglczas")]')

应该得到你想要的东西。


此外,您不需要使用urllib打开网址,lxml可以使用lxml.html.parse()为您执行此操作。