我写了一个正常工作的抓取蜘蛛,但突然开始收到这样的警告:

/home/user/github-repos/scrapper/scrapper/env/lib/python3.8/site-packages/scrapy/selector/unified.py:83: UserWarning: Selector got both text and root, root is being ignored. super().__init__(text=text, type=st, root=root, **kwargs)

进一步判断后,产生错误的部分如下

    __slots__ = ["response"]
    selectorlist_cls = SelectorList

    def __init__(self, response=None, text=None, type=None, root=None, **kwargs):
        if response is not None and text is not None:
            raise ValueError(
                f"{self.__class__.__name__}.__init__() received "
                "both response and text"
            )

        st = _st(response, type)

        if text is not None:
            response = _response_from_text(text, st)

        if response is not None:
            text = response.text
            kwargs.setdefault("base_url", response.url)

        self.response = response
        super().__init__(text=text, type=st, root=root, **kwargs)

该警告指定正在忽略根,即使构造函数需要它.这是scrapy包中的一个类,因此它可能与代表他们的更新相关.

这是我的代码中唯一与 Select 器交互的部分:

    def load_item(self, response: TextResponse, app_id, db_id, urls):
        loader = AppLoader(response=response)
        loader.add_value("app_id", app_id)
        loader.add_value("db_id", db_id)
        loader.add_value("url", response.url)
        loader.add_css("game_title", "#appHubAppName::text")
        loader.add_css("publisher", "#game_highlights .dev_row+ .dev_row a::text")
        loader.add_css("developer", "#developers_list a::text")
        loader.add_css("publish_date", ".date::text")
        loader.add_css("tags", "#glanceCtnResponsiveRight a::text")
        loader.add_css(
            "review_count", "#review_type_all+ label .user_reviews_count::text"
        )
        loader.add_css(
            "positive_review_count",
            "#review_type_positive+ label .user_reviews_count::text",
        )
        loader.add_css(
            "negative_review_count",
            "#review_type_negative+ label .user_reviews_count::text",
        )
        loader.add_value("file_urls", urls)

        return loader.load_item()

推荐答案

在1.8.1版中,依赖项包parsel(https://github.com/scrapy/parsel/blob/master/parsel/selector.py)中有一些变化.(提交3b3ec90)与版本1.7.0相比 在class Selector年的第__init__中,武士root: Optional[Any] = None被改为root: Optional[Any] = _NOT_SET

scrapy包(https://github.com/scrapy/scrapy/blob/master/scrapy/selector/unified.py)中的class Selector缺省地向parsel包中的超类提供root=None. 这会导致parsel包中的第__init__class Selector出现该警告消息. 我会在那里开一期.

Python相关问答推荐

决策树分类器的基础sklearn熵和log_loss标准是否有差异?

Pandas 密集排名具有相同值,按顺序排列

aiohTTP与pytest的奇怪行为

如何确保Flask应用程序管理面板中的项目具有单击删除功能?

CustomTKinter-向表单添加额外的输入字段

创建带有二维码的Flask应用程序,可重定向到特定端点

使用regex分析具有特定字符的字符串(如果它们存在)

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

指示组内的rejected_time是否在creation_timestamp后5分钟内

通过交换 node 对链接列表进行 Select 排序

具有多个选项的计数_匹配

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

'discord.ext. commanders.cog没有属性监听器'

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

运行Python脚本时,用作命令行参数的SON文本

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

Julia CSV for Python中的等效性Pandas index_col参数

在vscode上使用Python虚拟环境时((env))

从嵌套的yaml创建一个嵌套字符串,后面跟着点

Python避免mypy在相互引用中从另一个类重定义类时失败