老徐说
V1
2023/05/15阅读:26主题:自定义主题1
ChatGPT帮我一小时开发小说爬虫
需求背景
-
我喜欢在一个小说APP看小说,它的内容源来自各个小说网站,错别字和广告比较多。 -
偶然发现了一个优质的小说网站接口。 -
最近参加微信读书365天打卡活动,需要累积300小时的读书时间。 -
我想从小说网站把我想看的小说抓取下来,生成txt文本内容。
产品设计
用Go语言实现,展现形式是终端工具,小工具尽量简单轻量,功能也比较简单。避免一上来就Vue、React,NPM安装一大堆依赖包,工具型应用并不一定需求UI界面,后续可能做个简单界面。
功能模块
-
小说搜索。输入关键字,输出与关键字标题/作者匹配相关小说列表 -
小说查询。输入小说ID,输出小说详情 -
章节查询。输入小说ID,输出小说章节列表 -
内容查询。输入小说ID和章节,输出小说内容详情 -
小说下载。输入小说ID,下载小说所有章节,写入txt文件
开发步骤
-
Github新建项目 -
生成Go代码 -
爬取内容后生成txt文件
Github新建项目
生成Go命令行代码
prompt
你是一个go语言开发专家,帮我用go语言开发一个命令行应用。使用第三方包,减少代码量。举个例子,命令行输入novel help,输出所有命令参数和注释。输入novel search {test},输出json内容 "{
"books": [
{
"_id": "343106",
"title": "从笑傲江湖到大明国师",
"author": "带刀校尉",
"shortIntro": "和左冷禅对过掌,和东方不败比过剑,卫央觉着江湖其实也没什么意思,也就下酒的大毛桃还可以,那就种一谷桃",
"cover": "60/a3/60a3740710ab4e87683c9c18c5ccaed0.jpg",
"cat": "修真仙侠",
"followerCount": "16",
"zt": "连载中",
"updated": "2022-05-07T16:06:51+00:00",
"lastchapter": "更新到:第1024章 鞑靼人可眼馋了"
}
]
}"。输入novel info {id},输出json内容"{
"_id": "498806",
"author": "西湖遇雨",
"cover": "3d/d3/3dd340fcc0113e456fbe51e336539626.jpg",
"longIntro": "\r\n \r\n【狱中讲课,朱棣偷听后求我当国师】 ",
"title": "大明国师",
"zt": "连载中",
"cat": "都市·青春",
"wordCount": "1138942",
"retentionRatio": "55.50",
"followerCount": "0",
"updated": "2023-05-08T03:20:50+00:00",
"chaptersCount": "276",
"lastChapter": "五月求票!"
}"。输入novel chapter {id},输出json内容"{
"_id": "498806",
"chaptercount": 276,
"chaptersUpdated": "2023-05-08T03:20:50+00:00",
"chapters": [
{
"title": "第1章 指点江山又不会改变什么",
"link": "498806/1",
"unreadble": false
}]}"。输入novel content {id} {chapter},输出json内容"{
"title": "第199章 测算太阳?【求月票!】",
"body": "\n 第199章测算太阳?【求月票!】\n “日月为明.”\n 朱高煦今天的思维似乎异常活跃,他马上又问出了一个奇奇怪怪的问题。 "
}"。
输入novel download {id},下载指定小说内容,先调用chapter方法获取所有chapters数量,然后for循环该
数量,调用content方法传入{id}和{chapter},{chapter}就是每次循环的i+1,获取所有body,汇总一起后写入一个以小说标题命名的txt文件。使用"github.com/go-resty/resty/v2"
"github.com/urfave/cli/v2",并且const baseURL = "https://xx.com/"
爬取内容后生成txt文件

总结
-
ChatGPT开发简单项目确实能减少90%工作量,以该项目为例,简单的查询,搜索功能提问+开发时间总共就一个小时。 -
开始的时候没想把下载功能加上去,抱着试一试的心态在提问中加入下载功能,不得不夸ChatGPT写的我预想的要好,甚至考虑了代码的扩展性,支持命令行下载指定文件名 -
当然也存在一些低级错误,比如引入了没有用到的包,在设计功能的时候没有考虑业务建模的抽象,当然已经瑕不掩瑜(可能我还没掌握更加准确的Prompt) -
在使用ChatGPT的功能中,我们更多的时间需要花在把业务建模,阅读代码,重构代码,修复Bug以及提问中,尤其是提问,这方面要继续摸索。 -
以100分满分,我觉得它应该能得到75分,我估计后续熟练后分数还会提高。从它的代码质量看,完全能够胜任一般公司的80%的CURD功能代码,能够承担中级开发工程师的职责。 -
有些特定的业务需求,需要开发者单独处理,因为开发者无法把需求完全转化成Prompt。
作者介绍
老徐说
V1