【问题标题】:Scrapy AttributeError: 'Selector' object has no attribute 'extract_first'Scrapy AttributeError:'Selector'对象没有属性'extract_first'
【发布时间】:2019-02-11 19:16:15
【问题描述】:

在使用 Scrapy 1.6 抓取页面https://github.com/rg3/youtube-dl/pull/11272 时,当我使用选择器进行选择时:

//div[@class= '文件js-comment-container js-resolvable-timeline-thread-container']

如果你在浏览器什么的上使用它,别忘了屏蔽 JS。

结果将是没有属性“extract_first”的东西。

例如运行此代码将面临该错误:

for code_and_comment in response.xpath(
        "//div[@class = 'file js-comment-container js-resolvable-timeline-thread-container']"):
    if code_and_comment is None:
        print('it is NONE')
    print(code_and_comment.extract_first())

我看不懂,你知道我哪里错了吗?提前致谢。

  • 注意: 是的,我知道 robot.text 甚至 ROBOTSTXT_OBEY = False
  • 注意 2: 我认为动态 JavaScript 不是问题,我已经在关闭 JavaScript 的浏览器中尝试了 Xpath,效果很好。

【问题讨论】:

  • @vezunchik 不是,这也是我的问题。
  • 我找不到类“文件 js-comment-container js-resolvable-timeline-thread-container”,但只有类“文件 js-comment-container js-resolvable-timeline-thread -container has-inline-notes”。您是否忘记在您的问题中提及“has-inline-notes”或忘记将其放在您的代码中?
  • @daniboy000 不,我认为您正在使用 JavaScript。 Scrapy 不适用于 JS。当你看到 JS 被屏蔽的页面时,我想你会找到它。

标签: python xpath scrapy web-crawler


【解决方案1】:

原因是在您的代码中code_and_comment 已经是一个单个 选择器,所以没有extract_first 的意义。它仅适用于选择器列表(这是您从 response.xpath(...) 获得的)。

您可以执行以下操作:

for code_and_comment in response.xpath(
        "//div[@class = 'file js-comment-container js-resolvable-timeline-thread-container']"):
    if code_and_comment is None:
        print('it is NONE')
    print(code_and_comment.extract())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多