From d907f9e09284367d555c89d2bea862a310f60a19 Mon Sep 17 00:00:00 2001 From: Laerte Pereira Date: Wed, 3 May 2023 22:12:21 -0300 Subject: [PATCH 1/2] fix: Handle Parsel > 1.7.0 warning --- scrapy/selector/unified.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scrapy/selector/unified.py b/scrapy/selector/unified.py index cff97104a..208dd807f 100644 --- a/scrapy/selector/unified.py +++ b/scrapy/selector/unified.py @@ -4,6 +4,11 @@ XPath selectors based on lxml from parsel import Selector as _ParselSelector +try: + from parsel.selector import _NOT_SET +except ImportError: + _NOT_SET = None + from scrapy.http import HtmlResponse, XmlResponse from scrapy.utils.python import to_bytes from scrapy.utils.trackref import object_ref @@ -63,7 +68,7 @@ class Selector(_ParselSelector, object_ref): __slots__ = ["response"] selectorlist_cls = SelectorList - def __init__(self, response=None, text=None, type=None, root=None, **kwargs): + def __init__(self, response=None, text=None, type=None, root=_NOT_SET, **kwargs): if response is not None and text is not None: raise ValueError( f"{self.__class__.__name__}.__init__() received " From 7317ff11014c4bf20d4e35193cc96a7151d1d5b0 Mon Sep 17 00:00:00 2001 From: Laerte Pereira Date: Thu, 4 May 2023 05:55:25 -0300 Subject: [PATCH 2/2] refactor: use kwargs strategy --- scrapy/selector/unified.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/scrapy/selector/unified.py b/scrapy/selector/unified.py index 208dd807f..caff79e9c 100644 --- a/scrapy/selector/unified.py +++ b/scrapy/selector/unified.py @@ -4,17 +4,14 @@ XPath selectors based on lxml from parsel import Selector as _ParselSelector -try: - from parsel.selector import _NOT_SET -except ImportError: - _NOT_SET = None - from scrapy.http import HtmlResponse, XmlResponse from scrapy.utils.python import to_bytes from scrapy.utils.trackref import object_ref __all__ = ["Selector", "SelectorList"] +_NOT_SET = object() + def _st(response, st): if st is None: @@ -85,4 +82,8 @@ class Selector(_ParselSelector, object_ref): kwargs.setdefault("base_url", response.url) self.response = response - super().__init__(text=text, type=st, root=root, **kwargs) + + if root is not _NOT_SET: + kwargs["root"] = root + + super().__init__(text=text, type=st, **kwargs)