Registry / serialization / cssselect

cssselect

JSON →
library1.4.0pypypi✓ verified 35d ago

cssselect is a BSD-licensed Python library that parses CSS3 Selectors and translates them into XPath 1.0 expressions. These XPath expressions can then be used with an XPath engine like lxml to find matching elements in XML or HTML documents. The library is currently at version 1.4.0 and maintains an active development cycle with releases published on PyPI.

serialization
Install & Compatibility
Where this runs
tested against v1.4.0 · pip install
no network on importno background threads
Install × environment matrix
Each cell = how many times install + import succeeded across repeated harness runs. Partial = flaky.
glibc = Debian/Ubuntu slim · musl = Alpine Linux
musl
py 3.103.925 runs
installs and imports cleanly · install 0.0s · import 0.032s · 17.9MB
glibc
py 3.103.925 runs
installs and imports cleanly · install 1.5s · import 0.028s · 18MB
16MB installed
● package 16MB
Code
Verified usage

Verified import paths — ran on the pinned version, not inferred.

from cssselect import GenericTranslator
from cssselect import HTMLTranslator
from cssselect import SelectorError

The `css_to_xpath` function is directly available from the top-level `cssselect` package.

from cssselect import css_to_xpath
from cssselect import SelectorSyntaxError

This quickstart demonstrates how to use `cssselect` to translate a CSS selector into an XPath 1.0 expression and then apply it to an HTML document using `lxml` to find matching elements. It highlights the use of `HTMLTranslator` for HTML-specific translations.

from lxml.etree import fromstring from cssselect import HTMLTranslator, SelectorError html_doc = ''' <div id="outer"> <p class="content"> <span>Text 1</span> </p> <div id="inner" class="content body"> Text 2 <span>Text 3</span> </div> </div> ''' try: # Use HTMLTranslator for HTML documents for better pseudo-class handling translator = HTMLTranslator() xpath_expression = translator.css_to_xpath('div.content > span') print(f"Generated XPath: {xpath_expression}") document = fromstring(html_doc) # Find all elements matching the XPath expression matches = document.xpath(xpath_expression) for element in matches: print(f"Matched element tag: {element.tag}, text: {element.text.strip() if element.text else ''}") except SelectorError as e: print(f"Invalid CSS selector: {e}")
Debug
Known footguns
breakingVersion 1.2.0 (released 2022-10-27) dropped support for Python 2.7, 3.4, 3.5, and 3.6. Ensure your environment uses Python 3.7 or newer.
breakingBetween versions 0.9 and 0.9.1, the `selector_to_xpath()` function's default behavior for `translate_pseudo_elements` changed. In 0.9.1+, it defaults to `False` (ignoring pseudo-elements), reverting an accidental change in 0.9 which defaulted to `True` (rejecting them). When using `selector_to_xpath()` directly, explicitly set `translate_pseudo_elements=True` if you need pseudo-element support. `css_to_xpath()` is unaffected.
gotchaThe customization API, allowing subclassing of `GenericTranslator` or `HTMLTranslator` to override methods, is not considered stable. Its signature or behavior might change in future versions, potentially breaking your custom subclasses.
gotchaXPath 1.0, which `cssselect` translates to, does not natively support pseudo-elements (e.g., `::before`, `::after`). While `cssselect`'s `css_to_xpath()` provides some translation, `selector_to_xpath()` explicitly ignores them by default. This can lead to unexpected results if pseudo-elements are part of your CSS selectors.
breakingThe `lxml` library is a required dependency for `cssselect`. If `lxml` is not installed in your Python environment, importing or using `cssselect` will result in a `ModuleNotFoundError`.
gotchaThe `cssselect` library is frequently used in conjunction with other parsing libraries like `lxml` for HTML/XML processing. If your application or test script uses `lxml` (e.g., for parsing documents), ensure it is explicitly installed. `cssselect` does not list `lxml` as a direct dependency.
Upgrade
Version history

Breaking-change detection hasn't run for this library yet.

Audit
Security & dependencies

CVE tracking and dependency tree are planned for a later release.

Agent activity
38 hits · last 30 days
petalbot
9
claudebot
5
gptbot
4
amazonbot
4
ahrefsbot
3
bytedance
1
googlebot
1
Resources