一、痛点:手动复制CSDN代码块,我快崩溃了

作为一名技术博主,我经常需要把别人的CSDN文章中的代码块提取出来测试。但CSDN网页上的代码块要么带行号,要么需要逐段复制,50个代码块能折腾一下午。

于是我决定:用AI coding助手(这里以通义灵码 VS Code插件为例)写一个自动提取脚本。原本预估要写一天,结果2小时搞定——全程几乎没自己敲代码,全是AI生成+微调。

这篇文章记录真实过程,包括提示词、代码、踩坑和效率对比。无论你用Copilot、Cursor还是通义灵码,思路通用。

二、需求拆解(我给AI的原始提示词)

我先新建一个文件 extract_csdn_code.py,然后对AI说(使用注释形式):

# 请写一个Python脚本,实现以下功能:
# 1. 输入一个CSDN文章URL(例如 https://blog.csdn.net/xxx/article/details/123456)
# 2. 自动请求该页面,解析HTML
# 3. 提取所有的<pre><code>... </code></pre> 内的代码内容
# 4. 去除行号(CSDN有时会在代码内显示行号,如 '<span class="linenum">1</span>')
# 5. 将每个代码块保存为单独的文件,文件名根据文章标题和代码块序号自动生成(如 article_title_block_1.py)
# 6. 自动检测代码语言(通过class属性,如 language-python),并设置正确的文件扩展名
# 7. 使用requests和BeautifulSoup,并处理可能的反爬(User-Agent)

AI在几秒内生成了第一版代码。下面展示经过我手动调整后的最终版本(AI生成的原始版本有3个小bug,后面会讲)。

三、最终可用代码

import requests
from bs4 import BeautifulSoup
import re
import os
from urllib.parse import urlparse

def extract_csdn_code(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
    }
    resp = requests.get(url, headers=headers)
    resp.encoding = 'utf-8'
    soup = BeautifulSoup(resp.text, 'html.parser')
    
    # 获取文章标题作为目录名
    title_elem = soup.find('h1', class_='title-article')
    if not title_elem:
        title_elem = soup.find('h1')
    title = title_elem.get_text().strip().replace('/', '_')[:50]
    os.makedirs(title, exist_ok=True)
    
    # 查找所有代码块
    code_blocks = soup.find_all('pre')
    if not code_blocks:
        code_blocks = soup.find_all('code')
    
    lang_map = {
        'python': '.py',
        'java': '.java',
        'javascript': '.js',
        'html': '.html',
        'css': '.css',
        'bash': '.sh',
        'json': '.json'
    }
    
    for idx, block in enumerate(code_blocks, 1):
        # 提取原始文本
        code_text = block.get_text()
        # 去除行号(简单正则,匹配行号+空格或点)
        code_text = re.sub(r'^\s*\d+\.?\s*', '', code_text, flags=re.MULTILINE)
        # 检测语言
        code_class = block.get('class', [])
        lang = None
        for c in code_class:
            if c.startswith('language-'):
                lang = c.split('-')[1]
                break
        ext = lang_map.get(lang, '.txt')
        filename = f"{title}/block_{idx}{ext}"
        with open(filename, 'w', encoding='utf-8') as f:
            f.write(code_text.strip())
        print(f"Saved: {filename}")
    
    print(f"Done! Extracted {idx} code blocks to folder: {title}")

if __name__ == '__main__':
    url = input("请输入CSDN文章URL: ")
    extract_csdn_code(url)

四、踩坑记录(AI的三宗罪)

AI生成的初版跑了就报错,我总结了3个典型坑:

坑1:选择器不兼容

AI只写了 soup.find_all('pre code'),但很多CSDN文章直接是 <pre><code> 或只有 <pre>。修复:同时查找 precode

坑2:行号去除逻辑太粗暴

AI用 replace('1.', '') 这种硬编码,实际行号从1到N。改用正则 re.sub(r'^\s*\d+\.?\s*', '', code_text, flags=re.MULTILINE) 一次性解决。

坑3:编码与反爬

AI没加 resp.encoding = 'utf-8',导致中文乱码。也没加User-Agent,会触发CSDN 403。补上后正常。

经验:AI写的代码像“高级草稿”,必须人工审查逻辑边界和异常处理。

五、效率对比

方式 时间 代码质量 学习价值
纯手写 6-8小时 稳定
AI辅助(本案例) 2小时(含调试) 需微调 中(主要学调试)
复制粘贴现成脚本 10分钟 不可控

对我而言,AI最擅长生成80%的重复性框架,剩下20%的边界条件、反爬、特殊逻辑还得靠自己。

六、给技术人的建议

  1. 不要直接信任AI的代码:必须跑起来,用典型输入测试。
  2. 提示词越具体,结果越靠谱:像“去除行号”这种细节必须写进去。
  3. AI + 注释 = 文档自动生成:让AI为每个函数写docstring,比你手动写快10倍。
  4. CSDN文章抓取注意:频率过快会被封,建议加 time.sleep(1)

现在,你也可以试试用AI coding助手写一个自己的小工具。从“手动点鼠标”到“AI生成脚本”,省下的时间用来喝杯咖啡不香吗?

欢迎在评论区分享你的AI coding实战经历。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐