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

Scrapy爬取WebMD医生数据出现空行及标题重复问题求助

解决Scrapy爬取医生数据时的格式问题

咱们先拆解你遇到的两个核心问题:每条记录间有空行和首行标题重复,这俩问题大多和Scrapy的输出配置或者数据提取细节有关,下面给你针对性的解决办法:

1. 消除记录间的空行

如果是用scrapy crawl main_spider -o doctors.csv这类命令导出CSV格式,默认情况下Scrapy的CSV导出器会在每条记录后添加空行。你可以修改项目的settings.py来调整这个行为:

# 明确指定导出字段顺序(可选但推荐)
FEED_EXPORT_FIELDS = ["Name", "Speciality", "Years of experience", "Employer", "Address", "City", "Url"]
FEED_EXPORT_ENCODING = 'utf-8'
# 强制使用单换行符,避免空行
FEED_EXPORT_CSV_LINE_ENDINGS = '\n'

另外,你代码里的print(doctor)会在控制台输出医生链接,可能和最终的爬取结果输出混在一起造成视觉上的“空行”,建议把这行注释掉,避免干扰最终输出格式。

2. 解决首行标题重复的问题

表头重复通常是因为Scrapy在分页爬取时,每次请求都重复写入表头。有两种稳妥的解决方式:

方式一:调整Feed导出设置

在settings.py里添加以下配置,确保只写入一次表头:

FEED_EXPORT_APPEND = False  # 禁止追加模式,确保从头开始写入,默认就是False,但如果之前有缓存可能需要确认

方式二:自定义CSV导出器(更可靠)

如果上面的设置没生效,你可以自定义一个导出器强制只写一次表头。在项目根目录创建exporters.py文件:

from scrapy.exporters import CsvItemExporter
from scrapy.utils.python import to_bytes

class SingleHeaderCsvExporter(CsvItemExporter):
    def __init__(self, file, include_headers_line=True, join_multivalued=',', **kwargs):
        super().__init__(file, include_headers_line=include_headers_line, join_multivalued=join_multivalued, **kwargs)
        self.headers_written = False

    def start_exporting(self):
        if self.include_headers_line and not self.headers_written:
            self._write_headers_and_set_fields_to_export()
            self.headers_written = True
        self.file.write(to_bytes(self._line_ending))

然后在settings.py里指定使用这个自定义导出器:

FEED_EXPORTERS = {
    'csv': '你的项目名称.exporters.SingleHeaderCsvExporter',
}

3. 额外优化:整理列表类型数据

看你的代码里,Address和City是用extract()获取的列表,导出时会显示成['xxx']这种不太友好的格式,建议把它们转成字符串:

"Address": ', '.join(response.xpath('//*[@itemprop="address"]//*[@itemprop="streetaddress"]//text()').extract()).strip(),
"City": ', '.join(response.xpath('//*[@itemprop="address"]//*[@itemprop="addressLocality"]//text()').extract()).strip(),

这样导出的地址和城市会是整洁的字符串,不会带列表符号。

最后用命令导出结果:

scrapy crawl main_spider -o doctors.csv

这样就能得到格式干净、没有重复表头和多余空行的爬取结果了。

内容的提问来源于stack exchange,提问作者Luis Ramon Ramirez Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:38:12