2012-11-04 35 views
2

我試圖運行下面的腳本:Python的lxml.html的XPath「屬性不等於」預期運營商不工作

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

我希望它選擇不具有同級車中一個TD設置爲'naglczas'。相反,它會返回一個空列表。這是爲什麼?我猜這有一些愚蠢的原因,但我嘗試了谷歌搜索,沒有發現任何可以解釋它的東西。

+0

看看頁面源代碼,我沒有看到這樣的元素。 'td'元素或者將'class'設置爲''naglczas「'或者完全沒有這樣的屬性。 –

+1

確實// td [not(@ class =「naglczas」)]做你需要的東西嗎? – andrean

+0

是的!謝謝!另外,Lev Levitsky,是否意味着我不能將!=應用於沒有這種屬性的元素?夥計們,發佈一個答案,所以我可以加上你。 – d33tah

回答

6

你的XPath表達式會發現

具有類,這是不是「naglczas」

你似乎想(因爲只有3個TD-S帶班有一個TD元素你不希望它沒有一個類「naglczas」

的同一類)

一個TD元素


這些聽起來可能聽起來很相似,但它們是不同的。 類似於

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

應該得到你想要的。


此外,你不需要使用urllib來打開url,lxml可以爲你做,使用lxml.html.parse()

+0

你沒有那麼多的工作來回答這個問題,因爲無論如何它都是在評論中,但你得到的第一個點:D – d33tah