2010-04-11 57 views
4

我的目標是用lxml解析HTML,它支持XPath和CSS選擇器。使用CSS或XPath選擇器解析HTML?

我可以將我的模型屬性綁定到CSS或XPath,但我不確定哪個是最好的,例如,當HTML佈局被改變時更簡單,表達更簡單,提取速度更快。

你會在這種情況下選擇什麼?

回答

9

你更喜歡哪一種?大多數人傾向於更容易地找到CSS選擇器,如果其他人會保持您的工作,您應該考慮到這一點。其中一個原因可能是不太擔心XML命名空間,這是許多錯誤的根源。 CSS選擇器往往比同等XPath更緊湊,但只有您可以決定這是否是相關因素。我會注意到,jquery的選擇語言是在CSS選擇器上建模的,而不是在XPath上建模的。

另一方面,XPath是一種用於一般DOM操作的更具表現力的語言。例如,沒有與「父」或「祖先」軸等價的CSS選擇器,也沒有辦法直接尋址與XPath中的「text()」等價的文本節點。相比之下,儘管E [foo〜=「warning」]和E [lang | =「en」]在XPath中顯然非常棘手,但我無法想象任何可以在CSS選擇器中表達但不在XPath中的DOM路徑。

什麼CSS選擇器確實有XPath不是僞類,儘管如果你在做服務器端的DOM操作,這些對你來說不太可能是有用的。

至於哪個會導致更高的提取速度,我不知道lxml,但我期望等效路徑具有非常相似的性能特徵。

+0

很好的回答。謝謝。 :) – rinogo 2011-08-10 17:45:44