selectors.nth

Submodules

Content

Module provides nth-of-type selector implementations for SoupSelector. It allows you to search for the nth occurrence of an element, similar to how the CSS nth-of-type pseudo-class works. However, instead of being limited to css selectors, it works with any SoupSelector instance.

Classes

NthOfSelector - Selects nth element matching given selector NthLastOfSelector - Selects nth last element matching given selector OnlyOfSelector - Selects only element matching given selector

class NthLastOfSelector(selector: SoupSelector, nth: str)[source]

Bases: BaseNthOfSelector

Selector for finding nth-last-of elements in the soup among elements that match provided SoupSelector instance.

Example

>>> selector = NthLastOfSelector(ClassSelector("item"), "2n+1")

matches all odd elements with class “item” starting from the last element.

Example

>>> <div class="item">1</div> ❌
... <div id="item"></div> ❌
... <div class="item">2</div> ✔️
... <div class="item">3</div> ❌
... <div class="widget"></div> ❌
... <div class="item">4</div> ✔️

Notes

For more information about standard :nth-of-type pseudo-class, visit:

https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-last-of-type

class NthOfSelector(selector: SoupSelector, nth: str)[source]

Bases: BaseNthOfSelector

Selector for finding nth-of elements in the soup among elements that match provided SoupSelector instance.

Example

>>> selector = NthOfSelector(ClassSelector("item"), "2n+1")

matches all odd elements with class “item”.

Example

>>> <div class="item">1</div> ✔️
... <div id="item"></div> ❌
... <div class="item">2</div> ❌
... <div class="item">3</div> ✔️
... <div class="widget"></div> ❌
... <div class="item">4</div> ❌

Notes

For more information about standard :nth-of-type pseudo-class, visit:

https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-of-type

class OnlyOfSelector(selector: SoupSelector)[source]

Bases: SoupSelector

Selector for finding the only element, that matches provided SoupSelector instance among its siblings.

Example

>>> selector = OnlyOfSelector(ClassSelector("item"))

matches all elements with class “item” that are the only child of their parent that matches the selector.

Example

>>> <div><div class="item"></div><a class="item"></a></div> ❌
>>> <div><div class="item"></div><a class="widget"></a></div> ✔️
>>> <div><div class="item"></div></div> ✔️
>>> <div><div class="widget"></div></div> ❌

Notes

For more information about standard :only-of-type pseudo-class, visit:

https://developer.mozilla.org/en-US/docs/Web/CSS/:only-of-type

__init__(selector: SoupSelector) None[source]

Initializes OnlyOfSelector instance.

Parameters

selectorSoupSelector

Any SoupSelector instance used to match elements.

Raises

NotSoupSelectorException

If selector is not an instance of SoupSelector.

find_all(tag: IElement, recursive: bool = True, limit: int | None = None) list[IElement][source]

Finds all elements matching selector in provided IElement.

Parameters

tagIElement

Any IElement object to search within.

recursivebool, optional

Specifies if search should be recursive. If set to False, only direct children of the element will be searched. By default True.

limitint, optional

Specifies maximum number of elements to return. By default None, all found elements are returned.

Returns

list[IElement]

List of IElement objects matching selector. If none found, the list is empty.