Scrapy Shell运行正常但scrapy crawl无数据爬取问题求助
问题分析与解决方法
核心错误:起始URL属性名拼写错误
Scrapy爬虫类中定义起始URL列表的正确属性名是start_urls(复数形式,末尾带s),你代码里误写为starts_url,导致Scrapy无法识别需要爬取的起始页面,因此爬虫启动后直接结束,没有发起任何请求。
修正后的代码
import scrapy from scrapy_splash import SplashRequest class AtmSpider(scrapy.Spider): name = 'scrapebca' allowed_domains = ['www.bca.co.id'] # 修正属性名为 start_urls start_urls = ['https://www.bca.co.id/id/lokasi-bca'] def parse(self, response): data = response.xpath('//div[@class="a-card shadow0 m-maps-location-container-wrapper"]') for item in data: terminal_id = item.xpath('.//p[@class="a-text a-text-small m-maps-location-container-wrapper-code"]/text()').getall() yield { 'terminal_id': terminal_id }
额外注意事项
- 若目标页面依赖JavaScript渲染数据(虽然你在Scrapy Shell中能正常获取,但实际爬虫可能遇到渲染问题),需要使用
SplashRequest发起请求,可重写start_requests方法:
def start_requests(self): for url in self.start_urls: yield SplashRequest(url, self.parse, args={'wait': 0.5})
确保你已经正确配置了Splash服务的相关设置(如SPLASH_URL等)。
- 检查
ROBOTSTXT_OBEY设置:日志中显示该值为True,需确认目标网站的robots.txt是否允许爬取/id/lokasi-bca路径,若被禁止,需将该设置改为False。
内容的提问来源于stack exchange,提问作者galih
相关产品推荐
相关产品推荐

