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

Scrapy NotSupported错误及meta传值为None问题排查与代码修正

问题解析与代码修正

问题1:scrapy.exceptions.NotSupported: Response content isn't text 错误

错误原因

  • 手动构造HtmlResponse的逻辑完全错误:scrapy.Request(press_release_url_2)只是生成了一个请求对象,并没有实际发送请求获取服务器响应,直接访问它的body属性得不到有效内容。
  • 核心问题是press_release_url_2指向的资源可能是二进制文件(比如PDF),并非文本/HTML格式,强行用HtmlResponse处理二进制内容就会触发该错误。

解决方式

删掉那段手动构造响应的冗余代码,Scrapy引擎会自动处理请求的发送与响应解析,无需手动创建HtmlResponse。


问题2:parse方法中press_release_url_2获取为None

错误原因

  • 虽然在get_pdf_url_2中给meta传入了值,但如果press_release_url_2本身是None(比如XPath未匹配到对应链接),传递过去的自然也是None。
  • 之前写的手动构造响应代码完全是无用操作,既没有实际作用,还可能干扰正常请求流程。

解决方式

发起请求前先判断press_release_url_2是否为有效URL,确保只有拿到有效值时才发送请求,同时删除无效的手动响应构造代码。


修正后的完整代码

def parse(self, response):
    pdf_url = response.xpath(
        '//div[p[contains(text(), "The list becomes official upon '
        'publication in the Official Journal.")]]//a[@class="link-pdf"]/@href'
    ).get()
    press_release_url_2 = response.meta.get("press_release_url_2")
    print(press_release_url_2)
    # 保留后续原有代码

def get_pdf_url_2(self, response):
    press_release_url_2 = response.xpath(
        "//a[contains(@href, 'data.consilium.europa.eu/doc/document/')]/@href"
    ).get()
    # 先校验URL有效性,避免无效请求
    if press_release_url_2:
        yield scrapy.Request(
            url=press_release_url_2,
            callback=self.parse,
            meta={"press_release_url_2": press_release_url_2},
        )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:15:24