Qwen3-4B Instruct-2507精彩案例分享Python爬虫代码生成全过程实录想不想体验一下告诉AI一个简单的想法它就能帮你写出完整可用的代码今天我就用Qwen3-4B Instruct-2507这个纯文本大模型给大家完整演示一次“从想法到代码”的全过程。我们这次的目标是生成一个能爬取新闻网站标题和链接的Python爬虫。整个过程就像和一个经验丰富的程序员朋友聊天你提需求他写代码还能边写边解释。下面就让我们一起看看这个“AI程序员”的表现到底如何。1. 场景设定与需求拆解在开始之前我们先明确一下这次要完成的任务。假设我们是一个内容运营需要定期从某个科技新闻网站获取最新的文章标题和链接用于制作每日简报。手动复制粘贴效率太低所以需要一个自动化的爬虫脚本。我们的核心需求很明确目标网站一个假设的科技新闻网站tech-news.example.com爬取内容首页上最新文章的标题和对应的文章链接输出格式将爬取到的数据整理成结构化的格式比如JSON方便后续处理基础要求代码要简洁、可运行并且包含基本的错误处理和说明接下来我就将带着这个清晰的需求去和Qwen3-4B对话看看它是如何一步步帮我们实现这个功能的。2. 与Qwen3-4B的对话实录一步步生成代码我打开了部署好的Qwen3-4B对话界面。界面很简洁左侧可以调节回复长度和思维的灵活度为了得到更稳定可靠的代码我把“思维发散度”调到了0.5保持一定的创造性又不至于太天马行空。第一轮对话提出核心需求我的输入帮我写一个Python爬虫用于爬取一个新闻网站首页的文章标题和链接。要求使用requests和BeautifulSoup库代码要完整包含必要的异常处理并将结果输出为JSON格式。Qwen3-4B的流式回复开始逐字出现速度很快好的我将为您编写一个使用requests和BeautifulSoup库的Python爬虫用于抓取新闻网站首页的文章标题和链接。代码会包含异常处理并将结果保存为JSON格式。首先我们需要安装必要的库如果尚未安装pip install requests beautifulsoup4接下来是完整的Python代码示例。这里以假设的新闻网站https://news.example.com为例您需要将其替换为目标网站的URL。import requests from bs4 import BeautifulSoup import json from urllib.parse import urljoin import time def fetch_news_articles(url, headersNone): 从指定URL抓取新闻文章标题和链接 参数: url (str): 目标新闻网站的URL headers (dict, optional): 请求头用于模拟浏览器访问 返回: list: 包含文章标题和链接的字典列表 if headers is None: headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 } articles [] try: # 发送HTTP请求 response requests.get(url, headersheaders, timeout10) response.raise_for_status() # 检查请求是否成功 response.encoding response.apparent_encoding # 自动检测编码 # 解析HTML内容 soup BeautifulSoup(response.text, html.parser) # 这里需要根据目标网站的实际HTML结构来调整选择器 # 示例假设文章标题和链接在 article 标签内的 a 标签中 # 您可能需要使用浏览器开发者工具检查实际结构 news_items soup.find_all(article) # 或者是其他容器如 div.news-item for item in news_items: link_tag item.find(a) if link_tag and link_tag.get(href): title link_tag.get_text(stripTrue) link link_tag.get(href) # 处理相对链接 full_link urljoin(url, link) # 只收集有标题的条目 if title: articles.append({ title: title, link: full_link }) print(f成功抓取到 {len(articles)} 篇文章。) except requests.exceptions.RequestException as e: print(f网络请求出错: {e}) except Exception as e: print(f解析过程出错: {e}) return articles def save_to_json(data, filenamenews_articles.json): 将数据保存为JSON文件 try: with open(filename, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2) print(f数据已保存到 {filename}) except Exception as e: print(f保存文件时出错: {e}) if __name__ __main__: # 目标网站URL - 请替换为您要爬取的实际网站 target_url https://news.example.com # 可选的请求头模拟浏览器访问以避免被屏蔽 custom_headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36, Accept-Language: zh-CN,zh;q0.9,en;q0.8, } # 抓取文章 print(f开始抓取: {target_url}) news_articles fetch_news_articles(target_url, headerscustom_headers) # 显示前几篇文章 if news_articles: print(\n抓取到的前5篇文章:) for i, article in enumerate(news_articles[:5], 1): print(f{i}. {article[title]}) print(f 链接: {article[link]}) # 保存到JSON文件 save_to_json(news_articles) else: print(未抓取到任何文章。) # 礼貌性延迟避免请求过于频繁 time.sleep(2)使用说明:将代码中的target_url替换为您要爬取的实际新闻网站URL。关键步骤是调整fetch_news_articles函数中的news_items soup.find_all(article)这一行。您需要使用浏览器的开发者工具按F12检查目标网站的HTML结构找到包含文章标题和链接的正确CSS选择器。运行脚本后抓取的数据将保存在news_articles.json文件中。注意事项:请遵守目标网站的robots.txt文件规定尊重网站的爬虫政策。在连续请求之间添加延迟如time.sleep()避免给服务器造成过大压力。有些网站可能需要更复杂的请求头或会话管理。看到这里我已经很惊喜了。它不仅仅给了代码还附上了详细的安装指令、使用说明和注意事项甚至提醒了要遵守robots.txt。代码结构清晰包含了函数定义、异常处理、主程序逻辑完全可以直接复制使用。不过我发现它用的选择器是‘article’标签这是一个通用假设。我需要让它针对一个更具体的网站结构进行适配。第二轮对话针对具体网站结构进行优化我的输入代码很棒。现在假设目标网站是https://tech-news.example.com我检查了它的首页结构发现最新文章列表都在一个div容器里这个容器的class是latest-news-list。每篇文章都是一个div元素class为news-item。文章标题在里面的h3标签里链接在h3标签内的a标签上。请根据这个具体的HTML结构修改刚才的爬虫代码。Qwen3-4B继续流畅回复好的根据您提供的具体HTML结构我来修改代码。目标网站是https://tech-news.example.com文章列表容器是div.latest-news-list每篇文章是div.news-item标题在h3 a中。以下是修改后的代码import requests from bs4 import BeautifulSoup import json from urllib.parse import urljoin import time def fetch_tech_news(url, headersNone): 从指定的科技新闻网站抓取最新文章标题和链接 参数: url (str): 目标网站的URL headers (dict, optional): 请求头 返回: list: 包含文章标题和链接的字典列表 if headers is None: headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 } articles [] try: print(f正在请求: {url}) response requests.get(url, headersheaders, timeout10) response.raise_for_status() response.encoding response.apparent_encoding soup BeautifulSoup(response.text, html.parser) # 根据您提供的结构找到文章列表容器 news_container soup.find(div, class_latest-news-list) if not news_container: print(未找到文章列表容器 (div.latest-news-list)请检查网站结构或选择器。) return articles # 找到所有文章项 news_items news_container.find_all(div, class_news-item) print(f找到 {len(news_items)} 个文章项。) for item in news_items: # 找到 h3 标签内的 a 标签 title_tag item.find(h3) if title_tag: link_tag title_tag.find(a) if link_tag and link_tag.get(href): title link_tag.get_text(stripTrue) link link_tag.get(href) full_link urljoin(url, link) if title: articles.append({ title: title, link: full_link }) print(f成功提取 {len(articles)} 篇文章。) except requests.exceptions.RequestException as e: print(f网络请求出错: {e}) except Exception as e: print(f解析过程出错: {e}) return articles def save_to_json(data, filenametech_news.json): 将数据保存为JSON文件 try: with open(filename, w, encodingutf-8) as f: json.dump(data, f, ensure_asciiFalse, indent2) print(f数据已保存到 {filename}) except Exception as e: print(f保存文件时出错: {e}) if __name__ __main__: # 目标网站URL target_url https://tech-news.example.com custom_headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36, Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8, Accept-Language: zh-CN,zh;q0.9,en;q0.8, } print(开始抓取科技新闻...) news_articles fetch_tech_news(target_url, headerscustom_headers) if news_articles: print(\n 最新科技新闻 ) for i, article in enumerate(news_articles, 1): print(f{i:2d}. {article[title]}) print(f 链接: {article[link]}) save_to_json(news_articles, latest_tech_news.json) # 简单统计 print(f\n统计: 共抓取 {len(news_articles)} 条新闻。) else: print(未抓取到任何新闻。) time.sleep(3)主要修改点:将函数名改为更具体的fetch_tech_news。解析逻辑完全按照您提供的结构先找div.latest-news-list容器再在里面找所有div.news-item。在每个news-item中先定位h3标签再从中找到a标签来获取标题文本和链接。增加了更详细的打印日志方便调试。更新了保存的文件名和输出格式。运行提示:运行前请确保已安装requests和beautifulsoup4。如果实际网站结构有细微差别比如类名有空格或多个类可能需要微调find方法中的参数。完美它完全理解了我的意图并且精准地修改了代码。不仅调整了选择器还优化了函数名、增加了更详细的日志让代码更具可读性和可调试性。整个对话过程非常自然它就像一个真正的开发伙伴能根据我提供的额外信息立刻调整方案。3. 生成代码的效果与质量分析通过上面两轮对话我们得到了一份可以直接运行、结构良好的Python爬虫代码。我们来仔细看看这份“AI生成物”的质量如何。代码结构清晰符合工程规范生成的代码不是简单的脚本堆砌而是采用了良好的函数式结构。fetch_tech_news负责核心抓取和解析逻辑save_to_json负责数据持久化主程序__main__部分负责调度和展示。这种分离使得代码易于阅读、测试和维护。异常处理完备健壮性强代码中使用了try...except块来捕获requests可能抛出的网络异常如超时、连接错误以及其他未知异常。在解析环节它没有盲目相信网站结构一定存在而是先检查news_container是否存在如果没找到会打印提示并返回空列表避免了后续操作报错。细节考虑周到User-Agent设置模拟了真实浏览器降低了被简单反爬机制拦截的风险。编码处理使用了response.apparent_encoding自动检测响应编码避免乱码。相对链接处理利用urljoin函数将可能出现的相对路径链接补全为绝对URL这是一个新手容易忽略但至关重要的细节。延迟设置在脚本最后添加了time.sleep(3)体现了对目标网站服务器的尊重符合网络爬虫的道德规范。丰富的输出信息包含了“正在请求”、“找到X个文章项”、“成功提取”等步骤性提示对于调试和监控运行状态非常友好。可扩展性提示到位Qwen3-4B在代码注释和后续说明中反复强调了“根据实际网站结构调整选择器”这一点。它知道自己生成的代码是基于一个假设结构并明确告知用户这是需要根据实际情况验证和修改的关键步骤。这种提示避免了用户盲目运行代码后产生困惑体现了模型的“自知之明”和实用性导向。4. 从想法到代码Qwen3-4B的实用价值回顾整个对话过程Qwen3-4B Instruct-2507展现出了作为“编程助手”的显著价值尤其适合以下几类场景对于编程新手或初学者它提供了一个绝佳的起点。你不需要从零开始记忆BeautifulSoup的API只需要用自然语言描述清楚你想做什么“爬新闻标题和链接”它就能给出一个结构完整、可直接学习的范例。你可以通过阅读和运行它生成的代码快速理解爬虫的基本流程和关键库的使用方法。对于需要快速原型开发的开发者当你需要验证一个想法或快速完成一个一次性任务时向Qwen3-4B描述需求比从头搜索和拼凑代码要快得多。就像我们的例子从提出需求到获得针对特定网站结构优化后的代码只用了两轮对话极大地提升了开发效率。作为代码审查和优化的灵感来源即使是有经验的开发者也可以用它来获得不同的实现思路。比如它提供的异常处理逻辑、相对URL的处理方式、以及结构化的输出都可以作为参考来对比和优化自己原有的代码。核心优势体验在这次体验中最让我印象深刻的是它的“流式实时输出”功能。看着代码一个字一个字地蹦出来有一种“AI正在思考并为你编写”的沉浸感比等待全部生成完毕再一次性展示要自然流畅得多。同时它的“多轮对话记忆”能力确保了上下文连贯我可以在它给出的代码基础上提出更具体的修改要求它都能准确理解并执行就像在进行一次真正的结对编程Pair Programming。5. 总结通过这个完整的“Python爬虫代码生成”案例我们可以清晰地看到像Qwen3-4B Instruct-2507这样的纯文本大模型已经能够很好地理解和执行具体的编程任务。它不再是只能进行简单问答的玩具而是一个能够产出可直接使用、结构良好、考虑周全的代码片段的实用工具。它的价值不在于替代程序员而在于成为程序员的“加速器”和“灵感伙伴”。无论是学习新技能、快速实现原型、还是优化既有代码它都能提供高质量的起点和参考。对于任何需要与文本和代码打交道的开发者、学生或爱好者来说掌握与这样的AI协作无疑将成为一项提升效率的重要技能。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。