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

Python Scrapy爬虫运行报错:ImportError: cannot import name spider

解决Scrapy中ImportError: cannot import name spider的问题

你遇到的这个导入错误是代码里的几个小问题导致的,咱们一步步把它们修正过来:

1. 修正Spider类的导入语句

直接触发错误的原因是你在SplashSpider.py里写错了导入的类名——Scrapy里的爬虫类是大写开头的Spider,不是小写的spider,所以要改成:

from scrapy.spiders import Spider

2. 导入缺失的SplashRequest

你的代码里用到了SplashRequest但没导入这个类,得在文件顶部加上:

from scrapy_splash import SplashRequest

3. 修正Item类的引用

你在解析方法里用了GameItem(),但实际在items.py里定义的类是ScrapyJavascriptItem,所以要先导入这个类,再正确引用:

from scrapy_javascript.items import ScrapyJavascriptItem
# 然后在parse方法里:
item = ScrapyJavascriptItem()

4. 修正回调方法名的大小写

Scrapy要求回调方法是小写的parse,你写的是大写开头的Parse,这会导致Scrapy找不到回调逻辑,要改成:

def parse(self, response):

5. 让Spider名称和命令匹配

你执行的命令是scrapy crawl splash_spider,但代码里Spider的name设置的是'SplashSpider',名称不匹配的话Scrapy找不到对应的爬虫,所以要把name改成:

name = 'splash_spider'

修正后的完整SplashSpider.py代码

from scrapy.spiders import Spider
from scrapy_splash import SplashRequest
from scrapy_javascript.items import ScrapyJavascriptItem

class MySpider(Spider):
    name = 'splash_spider' # 和命令里的爬虫名称保持一致
    start_urls = ['https://www.livescore.bet3000.com']

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url=url, callback=self.parse, args={"wait": 3})

    def parse(self, response):
        item = ScrapyJavascriptItem()
        for game in response.css(".tournament.filterable.table-block.status_upcomingCount.status_upcoming.status_liveoddsCount.status_liveodds.status_nextcount.status_next.kickoff"):
            item["home_team"] = game.css("td.hometeam.team.home::text").extract_first()
            item["away_team"] = game.css("td.awayteam.team.away::text").extract_first()
            yield item

做完这些修改后,再重新运行scrapy crawl splash_spider应该就能正常执行了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:18:13