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

Scrapy导出CSV仅获单条数据?求全量获取方案及代码排查

问题诊断与解决方案

嘿,我来帮你排查这个问题!你遇到的CSV仅导出1条数据的情况,主要有两个核心问题需要修复:

1. 请求URL参数解析错误(直接导致结果数量不足)

你的start_urls里的链接使用了HTML实体&,而非直接用&分隔URL参数。这会让服务器错误解析你的请求,返回的页面根本没有30条代理数据(实际可能仅返回1条),爬虫自然只能提取到1条信息。

你需要把URL里的&全部替换成&,修正后的start_urls如下:

start_urls = [
    "https://www.yellowpages.com/search?search_terms=agent&geo_location_terms=Los%20Angeles%2C%20CA&page=1",
]

2. 字段提取方式不够健壮(可能导致数据丢失)

你之前用zip()合并多个字段列表的方式存在隐患:如果某个字段(比如电话)在部分商家处缺失,对应的提取列表长度就会短于其他字段,zip()会以最短的列表为准截断数据,导致后续商家信息丢失。

更可靠的做法是先遍历每个商家的容器节点,再在每个节点内单独提取字段。这样即使某个商家缺少某个字段,也不会影响其他商家的数据提取。

修正后的完整爬虫代码:

import scrapy
class YellowPages(scrapy.Spider):
    name = 'yp'
    start_urls = [
        "https://www.yellowpages.com/search?search_terms=agent&geo_location_terms=Los%20Angeles%2C%20CA&page=1",
    ]
    def parse(self, response):
        # 遍历页面中每个商家的容器节点(YellowPages的结果节点通常是class为"result"的div)
        for agent_item in response.xpath("//div[@class='result']"):
            info = {
                'page': response.url,
                # 使用get(default='')处理字段缺失的情况,避免返回None
                'Agent_name': agent_item.xpath(".//a[@class='business-name']/span/text()").get(default=''),
                'Phone_number': agent_item.xpath(".//div[@class='phones phone primary']/text()").get(default=''),
                'address': agent_item.xpath(".//div[@class='street-address']/text()").get(default=''),
                'locality': agent_item.xpath(".//div[@class='locality']/text()").get(default=''),
            }
            yield info

关于Scrapy导出全量CSV的确认

你的settings.py里的FEED配置是正确的:

FEED_FORMAT = "csv"
FEED_URI = "yp.csv"

只要爬虫能正确提取到30条数据,Scrapy就会自动把所有条目写入CSV文件。如果需要追加数据而非覆盖旧文件,可以添加FEED_EXPORT_APPEND = True。

按照上述修改重新运行爬虫,就能得到完整的30条代理数据啦!

内容的提问来源于stack exchange,提问作者Deepu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:17:31