Scrapy爬虫运行成功但name字段返回空值,请求排查问题
问题分析与修复方案
1. 代码缩进错误
你提供的代码里,yield语句没有正确缩进在for循环的代码块内。Python靠缩进区分代码块,这种写法要么引发语法错误,要么导致yield脱离循环逻辑,无法按预期生成每条数据。虽然日志显示抓取了55条结果,但这应该是代码粘贴时的格式问题,实际运行的代码大概率存在缩进错误,必须修正。
2. CSS选择器定位不准确
container.css('a::text').get()这个选择器太笼统。在每个div.col-md-4容器里,可能存在多个<a>标签(比如联系方式、详情页链接等),或者公司名称的<a>标签嵌套在<h4>这类子元素里,导致当前选择器无法精准捕获到公司名称文本,所以返回None。
修复后的完整代码
import scrapy class TruckspiderSpider(scrapy.Spider): name = 'truckspider' allowed_domains = ['www.quicktransportsolutions.com'] start_urls = ['https://www.quicktransportsolutions.com/carrier/usa-trucking-companies.php'] def parse(self, response): containers = response.css('div.col-md-4') for container in containers: # 定位到嵌套在h4里的公司名称链接 company_name = container.css('h4 a::text').get(default='') yield { 'name': company_name.strip() if company_name else None }
关键修复点说明
- 缩进修正:把
yield和字典缩进至for循环内部,保证每次遍历容器时都能生成一条数据。 - 选择器优化:通过浏览器开发者工具查看目标页面结构后,使用
h4 a::text精准定位公司名称(如果页面结构有变化,你可以自己用开发者工具重新获取正确的选择器)。 - 数据清洗:用
strip()去掉文本前后的空格,default=''避免返回None,同时做了空值判断,让结果更规范。
内容的提问来源于stack exchange,提问作者Miracle
相关产品推荐
相关产品推荐

