Back to Explore

facelessuser/soupsieve

GitHub
3 updates · last 90 days1 watchersOpen source

Last release:

Soup Sieve is a CSS selector library for use with Beautiful Soup 4, designed to select, match, and filter HTML or XML using modern CSS selectors (up through CSS Level 4 drafts, with some limitations). It can replace Beautiful Soup’s built-in select feature and can also be used directly via its API for more controlled parsing.

Project status

  • The source (facelessuser/soupsieve) appears actively maintained, with an upstream push on 2026-07-21 and multiple recent updates in late July 2026 (2.9 on 2026-07-19, 2.9.1 on 2026-07-21).
  • Apparent update cadence is currently fast (two updates within 2 days, suggesting active development), with additional updates earlier in 2026 (2.8.4 on 2026-05-24) and a long-ish but not alarming historical cadence (most earlier versions are spaced by months).

AI summary generated

AI-generated from public sources. May be inaccurate. Report

Recent updates

  • 2.9.1

    Release 2.9.1 fixes attribute substring selector behavior for empty values, specifically for selectors using ^=, $=, and *=. Previously, these cases could match any element that merely had the attribute, instead of matching nothing as required by CSS Selectors Level 4 semantics.

    Breaking
  • 2.9

    Release 2.9 primarily updates Python support, and improves selector processing performance via lazy compilation. It also fixes correctness issues in :nth-child and :nth-last-child for certain An+B boundary cases, and includes parser matching efficiency improvements.

    BreakingFeatures
  • 2.8.4

    Release 2.8.4 contains fixes aimed at preventing pathological selector patterns from causing excessive work, plus a regex-related fix for an inefficient attribute pattern. It also adds a hard cap on the number of selectors processed in a pattern, with new tests covering both normal selectors and custom selectors.

    Breaking
  • 2.8.3

    Release 2.8.3 is described as a fix for an inefficient attribute pattern. The code changes show a rework of the selector parsing regex for attribute selectors, plus an added test covering invalid attribute syntax error reporting.

  • 2.8.2

    Release 2.8.2 is described as three small fixes: rejecting non-string keys for custom selectors or namespace dictionaries, correcting `:in-range` and `:out-of-range` behavior at end of year weeks, and fixing a potential infinite loop in a pretty-printing debug function. The release notes do not mention any documentation-site or tooling changes.

  • 2.8.1

    Release 2.8.1 is documented as a test-only fix for compatibility with the latest Python HTML parser behavior. However, the provided diff mostly shows documentation site and GitHub Pages publishing workflow changes, with no clear library/runtime code changes in the snippets shown.

  • 2.8

    Release 2.8 updates the supported Python versions and changes the PyPI deployment approach. It drops Python 3.8, adds Python 3.14, and switches the publish workflow to PyPI Trusted Publisher.

    BreakingFeatures
  • 2.7

    Release 2.7 documents new support for additional CSS pseudo selectors, specifically adding `:open` and `:muted`, and recognizing a set of other pseudo selectors that require a live browser environment to evaluate. It also notes that previously experimental pseudo-classes are no longer labeled as experimental, plus a small typing fix.

    Features
  • 2.6

    Version 2.6 adds official support for Python 3.13 and implements CSS Nesting Level 1 ampersand scoping (treating `&` as `:scope` when not used in a nesting context). It also improves the error messaging for unrecognized pseudo-classes.

    Features
  • 2.5

    Release 2.5 documents only Python version support changes: adding support for Python 3.12 and dropping support for Python 3.7. The provided code diff, however, appears to be entirely documentation updates, focused on MkDocs/Markdown formatting and content presentation rather than library/runtime behavior.

    BreakingFeatures
  • 2.4.1

    Release 2.4.1 primarily fixes CSS attribute selector parsing so that the case-insensitive flag spacing is optional (a space is allowed but not required). The rest of the diff is largely documentation, typing-only changes, and small build configuration updates.

  • 2.4

    Release 2.4 updates Soup Sieve’s selector parsing/matching to track CSS spec changes around :lang() and the handling of forgiving selector lists. It also updates supported Python versions by dropping Python 3.6 and declaring support for Python 3.11.

    BreakingFeatures
  • 2.3.2.post1

    Release 2.3.2.post1 contains documentation updates focused on installation-from-source instructions. The code diff also updates the package version metadata to reflect the post release.