diff options
-rw-r--r-- | CHANGELOG | 5 | ||||
-rw-r--r-- | bs4/element.py | 8 |
2 files changed, 13 insertions, 0 deletions
@@ -1,3 +1,8 @@ += 4.9.3 (Unreleased) + +* Implemented a significant performance optimization to the process of + searching the parse tree. Patch by Morotti. [bug=1898212] + = 4.9.2 (20200926) * Fixed a bug that caused too many tags to be popped from the tag diff --git a/bs4/element.py b/bs4/element.py index 370b153..09a81d9 100644 --- a/bs4/element.py +++ b/bs4/element.py @@ -1995,6 +1995,14 @@ class SoupStrainer(object): if isinstance(markup_name, Tag): markup = markup_name markup_attrs = markup + + if isinstance(self.name, basestring): + # Optimization for a very common case where the user is + # searching for a tag with one specific name, and we're + # looking at a tag with a different name. + if markup and not markup.prefix and self.name != markup.name: + return False + call_function_with_tag_data = ( isinstance(self.name, Callable) and not isinstance(markup_name, Tag)) |