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

Scrapy爬取IMDB站点时for循环内print函数无输出问题求助

Scrapy无输出问题修复方案

现存问题梳理

  • 变量作用域错误:parse_front方法中使用的url变量是start_requests方法内的局部变量,无法跨方法调用,运行时会抛出NameError导致程序终止
  • CSS选择器匹配错误:你提供的HTML结构中,Fan favorites对应的a标签父级不存在fan-picks类,原选择器匹配结果为空,for循环不会执行,因此print无输出
  • 回调方法引用错误:parse_2中调用回调函数时没有加self.前缀,且你未定义parse_3方法,运行到此处会抛出异常
  • 反爬拦截:IMDB会拦截无合法User-Agent的请求,直接请求会返回403状态码,无法拿到正常页面内容

修复后代码

import scrapy
from scrapy.crawler import CrawlerProcess

class imdb_favorites(scrapy.Spider):
    name = "imdB Favorites"
    # 全局基础URL,所有方法可调用
    base_url = "https://www.imdb.com"
    # 配置请求头,避免反爬拦截
    custom_settings = {
        'USER_AGENT': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
    }

    def start_requests(self):
        yield scrapy.Request(
            url=self.base_url,
            callback=self.parse_front
        )

    def parse_front(self, response):
        # 修正选择器,匹配包含Fan favorites文字的a标签的href属性
        fan_favorites = response.css('a.ipc-title-link-wrapper:has(h3.ipc-title__text:contains("Fan favorites"))::attr(href)').extract()
        link_to_follow = fan_favorites
        for i in link_to_follow:
            url2 = self.base_url + i
            print("跳转链接:", url2)
            yield response.follow(
                url=url2,
                callback=self.parse_2
            )

    def parse_2(self, response):
        # 匹配电影详情页链接
        what_to_watch = response.css('a.ipc-poster-card__title::attr(href)').extract()
        for a in what_to_watch:
            url3 = self.base_url + a
            print("电影详情链接:", url3)
            # 后续如果要解析详情页可以自己实现parse_3方法后放开注释
            # yield response.follow(url=url3, callback=self.parse_3)
    
    # 后续需要解析详情页再放开实现
    # def parse_3(self, response):
    #     pass

if __name__ == "__main__":
    process = CrawlerProcess()
    process.crawl(imdb_favorites)
    process.start()

调试技巧

如果后续还有匹配问题,可以先在对应解析方法中打印response.status确认请求是否成功(正常应为200),也可以打印response.text[:1000]查看返回的页面内容是否符合预期。

内容的提问来源于stack exchange,提问作者Yekta Aktaş

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:45:04