From aec4889d25f32ee54968881aac58f99b08220838 Mon Sep 17 00:00:00 2001 From: Karim shoair Date: Sat, 2 Aug 2025 03:37:48 +0300 Subject: [PATCH] perf: Optimizing `next` and `previous` properties --- scrapling/parser.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/scrapling/parser.py b/scrapling/parser.py index e6a6af3..8146461 100644 --- a/scrapling/parser.py +++ b/scrapling/parser.py @@ -426,10 +426,9 @@ class Selector(SelectorsGeneration): def next(self) -> Optional["Selector"]: """Returns the next element of the current element in the children of the parent or ``None`` otherwise.""" next_element = self._root.getnext() - if next_element is not None: - while isinstance(next_element, html_forbidden): - # Ignore HTML comments and unwanted types - next_element = next_element.getnext() + while next_element is not None and isinstance(next_element, html_forbidden): + # Ignore HTML comments and unwanted types + next_element = next_element.getnext() return self.__handle_element(next_element) @@ -437,10 +436,9 @@ class Selector(SelectorsGeneration): def previous(self) -> Optional["Selector"]: """Returns the previous element of the current element in the children of the parent or ``None`` otherwise.""" prev_element = self._root.getprevious() - if prev_element is not None: - while isinstance(prev_element, html_forbidden): - # Ignore HTML comments and unwanted types - prev_element = prev_element.getprevious() + while prev_element is not None and isinstance(prev_element, html_forbidden): + # Ignore HTML comments and unwanted types + prev_element = prev_element.getprevious() return self.__handle_element(prev_element)