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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:15:27