You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy Response返回None但语法无误,请求排查问题原因

解决Scrapy爬虫中name字段返回None的问题

你的TerrorSpider代码返回200状态码但name字段始终为None,核心问题是嵌套选择器的路径错误:

当你通过for filme in response.css('h3 a')遍历得到的每个filme已经是<h3>下的<a>元素,此时再用filme.css('h3 a::text')去查找,相当于在当前<a>元素的子节点里匹配h3 a,自然找不到内容,返回None。而Scrapy Shell中直接执行response.css('h3 a::text').get()是全局查找整个页面的h3 a元素,所以能正常获取结果。

参考你提供的可正常运行的ImdbSpider代码逻辑,这里提供两种修正方案:

方案一:直接遍历元素(简化写法)

import scrapy

class TerrorSpider(scrapy.Spider):
    name = 'terror'
    start_urls = ['http://books.toscrape.com/catalogue/category/books/travel_2/index.html']

    def parse(self, response):
        for book in response.css('h3 a'):
            yield {
                'name': book.css('::text').get()
                # 等价写法:book.get() 或 book.xpath('./text()').get()
            }

方案二:遍历父元素

(与ImdbSpider逻辑完全对齐)

import scrapy

class TerrorSpider(scrapy.Spider):
    name = 'terror'
    start_urls = ['http://books.toscrape.com/catalogue/category/books/travel_2/index.html']

    def parse(self, response):
        # 遍历每个<h3>父元素,和Imdb遍历.titleColumn的逻辑一致
        for book in response.css('h3'):
            yield {
                'name': book.css('a::text').get()
            }

两种方案都能正确提取书籍名称,其中方案二的结构和你参考的ImdbSpider完全匹配,更容易理解和维护。

内容的提问来源于stack exchange,提问作者Vinicius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 00:40:43