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
相关产品推荐
相关产品推荐

