Разбор HTML с помощью селекторов CSS или XPath? - PullRequest
4 голосов
/ 11 апреля 2010

Моя цель - проанализировать HTML с помощью lxml, который поддерживает как XPath, так и CSS-селекторы.

Я могу связать свои свойства модели с CSS или XPath, но я не уверен, какой из них будет лучшим, например. меньше суеты при изменении макета HTML, более простые выражения, большая скорость извлечения.

Что бы вы выбрали в такой ситуации?

1 Ответ

9 голосов
/ 11 апреля 2010

С чем вам удобнее? Большинство людей склонны находить селекторы CSS проще, и если другие будут поддерживать вашу работу, вы должны принять это во внимание. Одной из причин этого может быть то, что меньше беспокоятся о пространствах имен XML, которые являются источником многих ошибок. Селекторы CSS, как правило, более компактны, чем эквивалентные XPath, но только вы можете решить, является ли это важным фактором или нет. Я хотел бы отметить, что не случайно язык выбора jquery смоделирован на селекторах CSS, а не на XPath.

С другой стороны, XPath - более выразительный язык для общих манипуляций с DOM. Например, нет CSS-селектора, эквивалентного осям «родителя» или «предка», и нет способа напрямую обращаться к текстовым узлам, эквивалентным «text ()» в XPath. Напротив, я не могу думать ни о каком пути DOM, который может быть выражен в селекторах CSS, но не в XPath, хотя E [foo ~ = "warning"] и E [lang | = "en"] явно хитры в XPath.

То, что CSS-селекторы имеют, что XPath не является псевдоклассами, хотя, если вы выполняете манипуляции с DOM на стороне сервера, они вряд ли будут вам полезны.

Что касается того, что приводит к большей скорости извлечения, я не знаю lxml, но я ожидаю, что эквивалентные пути будут иметь очень похожие характеристики производительности.

...