【问题标题】:Python: Scrapy Gathering All Text of Selectors ChildrenPython:Scrapy收集选择器子项的所有文本
【发布时间】:2021-02-27 18:06:57
【问题描述】:

我正在尝试抓取 ebay 列表的描述,并且正在接近它:

 def parse_description(self, response):
        description = response.css('div#ds_div*::text').get()
        yield {
            "description": description
        }

这个想法是获取 .css('div#ds_div') 下所有标签的文本 但是,我将其视为错误:

"Expected selector, got %s" % (peek,))
  File "<string>", line None
cssselect.parser.SelectorSyntaxError: Expected selector, got <DELIM '*' at 10>

我要抓取的示例 URL:https://www.ebay.co.uk/itm/Vintage-Toastmaster-Chrome-Toaster-Model-D182-4-Slice-Wide-Slot-Nos/114677725765?hash=item1ab3533a45:g:ui8AAOSw-jpgBbFS 我哪里错了?

【问题讨论】:

    标签: python css scrapy selector children


    【解决方案1】:

    错误是指选择器无效:

    div#ds_div*::text
    

    如果您在 div#ds_div* 之间放置一个空格,则它是有效的,正如您在 cmets 中提到的那样。

    通过查看链接,另一个问题是您尝试检索的文本位于 ID 为 desc_ifr 的 iframe 内。

    如果您想抓取此 iframe 中的内容,请查看 iframe 的 src 属性并抓取此 url 而不是您问题中的 url。然后你可以这样做:

    response.css('div#ds_div p::text').get()
    

    【讨论】:

    • 嗨,我的印象是 *::text 会从该选择器的所有子元素中获取文本?我还用一个示例 url 编辑了我的原始帖子,我试图用它来抓取描述,你能确认 div#ds_div 实际上是我正在寻找的正确选择器吗?
    • 我想为所有子元素简写 *::text 的原因是因为有时它们被包裹在

      等中,这实际上取决于它们如何格式化它们的描述所以是试图只考虑所有可能性
    • 啊,我犯了一个错误,没有在选择器和 *::text 之间放置空格,但是它只是返回空白而不是错误...嗯,也许这个网页不是正确加载
    • @Anonymous 我已经更新了我的答案并解决了你的最后一条评论
    • 啊!我没有意识到 iframe 是这样工作的,非常感谢!学到了一些东西:)
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签