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

首个Scrapy爬虫无法正常爬取Datacamp课程名,求问题排查

问题排查与修复方案

核心问题分析

  • 缩进错误:start_requests和parse方法未缩进在DC类内部,Scrapy无法识别这些爬虫核心方法,导致爬虫无法发起请求或解析响应。
  • XPath语法错误:原XPath括号位置错误,contains函数语法应为contains(属性, 匹配值),之后再取文本节点,需调整括号位置。
  • 文件写入错误:用wb二进制模式写入字符串会触发类型错误,换行符应为\n而非/n,手动拼接写入CSV的方式也存在不规范问题。

修正后的代码

import scrapy
from scrapy.crawler import CrawlerProcess


class DC(scrapy.Spider):
    name = "DC"

    def start_requests(self):
        urls = ['https://app.datacamp.com/learn/courses']
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        # 修正XPath语法,正确匹配h2标签并提取文本
        links = response.xpath('//h2[contains(@class,"mfe-app-learn-hub-1tu8i8n")]/text()').extract()
        filename = 'links.csv'
        # 改用文本模式写入,修正换行符,同时去除文本多余空格
        with open(filename, 'w', encoding='utf-8') as f:
            for link in links:
                f.write(link.strip() + '\n')


process = CrawlerProcess()
process.crawl(DC)
process.start()

额外说明

  1. 若修正后仍爬不到内容,大概率是Datacamp页面采用动态渲染(React/Vue),此时需用scrapy-splash或playwright等工具处理动态内容,Scrapy默认仅能爬取静态HTML。
  2. 更规范的CSV保存方式是使用Scrapy的Feed导出功能,示例配置如下:
process = CrawlerProcess(settings={
    "FEEDS": {
        "links.csv": {"format": "csv", "fields": ["course_name"]},
    },
})

对应parse方法调整为返回字典:

def parse(self, response):
    for h2 in response.xpath('//h2[contains(@class,"mfe-app-learn-hub-1tu8i8n")]'):
        yield {
            'course_name': h2.xpath('./text()').get().strip()
        }

这种方式能避免手动写入文件的各类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 05:03:19