Scrapy爬虫仅部分字段有效,Shell及直接爬取球员URL正常的问题
请求头缺失或不一致
Scrapy Shell默认的请求头可能包含浏览器标识(比如User-Agent),而你的TransfersSpider爬虫代码里没有配置完整的请求头,导致Transfermarkt服务器返回了简化版的页面内容。这类网站常通过检测请求头判断是否为爬虫,无合法UA的请求会被限制返回部分数据,仅保留name、位置这类基础信息。动态内容未被渲染
球员个人页的部分字段(比如转会历史、合同信息等)可能是通过JavaScript异步加载的。Scrapy Shell中你手动测试时,页面已经在浏览器环境下完成了JS渲染,选择器能匹配到动态生成的节点;但爬虫直接请求原始HTML,没有执行JS的能力,自然拿不到这些动态加载的数据。URL拼接错误
从转会列表页提取的球员URL可能是相对路径(比如/en/players/john-doe/12345),你的爬虫没有将其与网站域名拼接成完整的绝对URL,导致请求的页面错误(比如404页面或网站首页)。这类错误页面里可能刚好包含name和位置的占位结构,所以这两个字段有值,其余字段为空。页面结构存在版本差异
Transfermarkt可能会根据请求来源(比如列表页跳转、直接访问)返回不同结构的页面。比如列表页跳转的是专为站内导航优化的版本,部分数据节点的层级或选择器和直接访问的页面不同,导致你在Shell里验证的选择器在爬虫请求的页面中无法匹配到内容。反爬机制触发
爬虫并发请求的频率过高,触发了网站的反爬限制,服务器返回了被限流的页面内容。而Scrapy Shell是单请求模式,未达到反爬阈值,所以能正常获取完整数据。被限流的页面通常只会返回基础信息,其余字段被隐藏或未加载。
内容的提问来源于stack exchange,提问作者Baraa Zaid

