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

Scrapy将parse函数改为start_req后无法运行报错是什么原因

问题根源

这是Scrapy框架的固定约定导致的,和Selenium本身没有关系:

  • Scrapy的基础Spider类默认会把parse作为所有初始请求的回调函数,如果你没有手动在请求里指定其他回调,框架启动后只会自动找名为parse的方法执行。
  • 你把方法改名为start_req之后,这个方法既不是框架默认识别的初始请求生成方法start_requests,也不是默认回调parse,框架根本不会主动调用它,爬虫自然就不会执行你写的逻辑,看起来就像"停止工作"了。
正确写法

你如果要在爬虫启动阶段就调用Selenium加载起始页,需要重写框架预留的start_requests入口方法(注意方法名不能拼错,必须是start_requests),在这个方法里初始化浏览器、加载页面、提取链接、生成后续请求:

from scrapy import Spider
from selenium import webdriver
from scrapy.selector import Selector
from scrapy.http import Request

from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options


class BookSeleniumSpider(Spider):
    name = 'book_selenium'
    allowed_domains = ['books.toscrape.com']

    def start_requests(self):
        # 初始化Chrome驱动
        s = Service('C:\\Users\\aps\\Documents\\chromedriver.exe')
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_argument('--no-sandbox')
        # 生产环境建议加上无头参数,避免弹出浏览器窗口
        # chrome_options.add_argument('--headless=new')
        self.driver = webdriver.Chrome(service=s, options=chrome_options)

        # 加载起始页面
        self.driver.get('http://books.toscrape.com')
        sel = Selector(text=self.driver.page_source)
        book_links = sel.xpath('//h3/a/@href').extract()

        for link in book_links:
            book_url = 'http://books.toscrape.com/' + link
            # 生成详情页请求,明确指定回调为parse_book
            yield Request(url=book_url, callback=self.parse_book)

    def parse_book(self, response):
        # 编写书籍详情页的解析逻辑
        pass

    # 爬虫结束时自动关闭驱动,避免残留chrome进程
    def closed(self, reason):
        if hasattr(self, 'driver'):
            self.driver.quit()

补充说明:如果你不想重写start_requests方法,那处理起始页响应的方法名必须是parse,这是框架的默认规则,没有额外配置的情况下不能随意修改。所有非默认回调的方法,都需要在构造Request对象时通过callback参数明确指定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 21:21:32