前言
何为编程?首先编程一定是现有一个目的(需求),根据需求做编程,我们想通过编程来解决世界上各种各样的问题。那么在传统意义上的编程,我们需要有扎实的编程基础(计算机网络、计算机组成原理...)等等相关理论知识,其次将大问题化小,不断细分我们的任务,分析我们要解决的问题如何解决,就像做算法题一样,可以先想出伪代码,什么语言都不重要,首先要有思想,有逻辑,不同的语言只是语法不同而已。最后我们将每一个功能模块化,封装、复用,这样有利于代码的可读性和可维护性。
那么在2024,我认为我们应当好好把握AI元年给我们带来的红利,我们可以基于LLM大模型去做很多我们曾经想都不敢想的事情,在这样一个背景下,就出现了大量的prompt engineer,我们只需要给我们的大模型下指令,告诉他我们想做一件什么事情,这个事情大模型非常擅长,专业的事情交给专业的人去做,我们不再需要一味的学习各种API然后各种API迭代不断的学习不断的忘记。
接下来我通过用爬虫做豆瓣电影中信息提取这么一个案例展开说说,传统编程到AIGC下的转变。
movie.douban.com/chart 豆瓣电影的网址
正文
传统意义下的编程方式
使用 request-promise
、cheerio
、fs
和 util
等模块进行网页爬取并将数据保存为 JSON
文件的代码。通过遍历豆瓣电影 Top250 页面,获取电影信息并保存到数组中,最后将数据写入 JSON
文件。
具体来说(秉承他有我拿(爬虫)思想)
- 先发生一个HTTP请求,用url发生一个GET请求 url:movie.douban.com/chart
- 响应的是HTML(字符串)
- 解析HTML字符串,可以像css选择器一样,拿到电影列表
- 最后将所有的电影对象组成数组,以json数组的方式返回,爬虫结束
- 我们需要安装node环境,并下载相关的包以及导入相关模块
- 通过
npm init -y
初始化文件夹为后端项目,获得package.json
项目描述文件 - 通过
npm i request-import
安装request-import模块到项目中。 - 通过
npm i cheerio
安装cheerio模块到项目中。 - request-promise: 一个基于request的Promise封装库,用于发送HTTP请求。
- cheerio: 一个Node.js库,用于方便地处理HTML文档,提供类似jQuery的API。
- 当函数超过一定行数可以模块化划分为几个子函数,有利于代码的可读性和调试。(封装、复用)
- 通过css后代选择器
#content .article .grid_view .item
逐层找到电影项。
具体实现代码
let request = require('request-promise') // 需要安装 let cheerio = require('cheerio') // 需要安装 let fs = require('fs') const util = require('util') let movies = [] let basicUrl = 'https://movie.douban.com/top250' let once = function (cb) { let active = false if (!active) { cb() active = true } } function log(item) { once(() => { console.log(item) }) } function getMovieInfo(node) { let $ = cheerio.load(node) let titles = $('.info .hd span') titles = ([]).map.call(titles, t => { return $(t).text() }) let bd = $('.info .bd') let info = bd.find('p').text() let score = bd.find('.star .rating_num').text() return { titles, info, score } } async function getPage(url, num) { let html = await request({ url }) console.log('连接成功!', `正在爬取第${num + 1}页数据`) let $ = cheerio.load(html) let movieNodes = $('#content .article .grid_view').find('.item') let movieList = ([]).map.call(movieNodes, node => { return getMovieInfo(node) }) return movieList } async function main() { let count = 25 let list = [] for (let i = 0; i < count; i++) { let url = basicUrl + `?start=${25 * i}` list.push(... await getPage(url, i)) } console.log(list.length) fs.writeFile('./output.json', JSON.stringify(list), 'utf-8', () => { console.log('生成json文件成功!') }) } main()
成功拿到结果
事实上这个传统意义上的编程,不是我们的主题因此请看下文如何实现
传统编程给AIGC让位
随着技术的不断发展,AIGC(人工智能生成内容)在一些领域展现出了强大的能力。AIGC 可以自动化地生成代码、文本、图像等内容,提高了效率和生产力。它为一些重复性、模式化的编程任务提供了新的解决方案。例如这个爬虫的案例,我们通过给LLM做一些prompt就能够完成:
只需告诉他一些指令,例如:
“请帮我设计一个简单的爬虫程序,使用Node.js环境。目标是获取豆瓣电影Top榜的数据。首先,程序需要向 'movie.douban.com/chart' 发送GET请求,然后解析返回的HTML,提取出每个电影的标题和评分。最后,将这些信息整理成JSON格式输出。请确保包含必要的错误处理。”
为了帮助您实现这个需求,我将提供一个简单的Node.js爬虫程序示例代码 该程序会使用`axios`进行HTTP请求以及`cheerio`库来解析HTML。 如果您还没有安装这两个库,请先通过npm安装它们: Bash 1npm install axios cheerio
以下是一个基础的爬虫程序示例代码:
const axios = require('axios'); const cheerio = require('cheerio'); async function fetchDoubanTopMovies() { try { const response = await axios.get('https://movie.douban.com/chart'); if (response.status !== 200) { throw new Error(`请求失败,状态码:${response.status}`); } const html = response.data; const $ = cheerio.load(html); const movies = []; $('div.item').each((index, element) => { const title = $(element).find('.title a').text().trim(); const rating = $(element).find('.rating_num').text().trim(); if (title && rating) { movies.push({ title: title, rating: parseFloat(rating) }); } }); return JSON.stringify(movies, null, 4); } catch (error) { console.error('抓取过程中发生错误:', error); return null; } } fetchDoubanTopMovies() .then(data => { if (data) { console.log('获取到的电影数据:', data); } else { console.log('未能成功获取数据'); } }) .catch(error => console.error('程序执行时出现错误:', error));
这段代码首先发送一个GET请求到豆瓣电影Top榜的页面,然后使用`cheerio`来解析返回的HTML。 它查找所有具有`.item`类的div元素(通常这些元素包含了每部电影的信息), 并从中提取电影的标题和评分。 请注意,网页结构可能会随时间改变,因此如果该代码在未来失效,可能需要根据新的HTML结构进行调整。 最后,程序将提取到的电影信息整理成JSON格式并输出到控制台。 同时,代码中也包含了基本的错误处理逻辑,以应对网络请求失败或其他潜在问题。
这样他就自动帮我把需要的程序给完成了
又或者我们给他一些其他的提示,例如给他一个html代码以及一些提示让他帮我完成一些功能
<tr class="item"> <td width="100" valign="top"> <a class="nbg" href=" " title="对你的想象"> < img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.webp" width="75" alt="对你的想象" class=""> </a > </td> <td valign="top"> <div class="pl2"> <a href="https://movie.douban.com/subject/35503073/" class=""> 对你的想象 / <span style="font-size:13px;">关于你的想法 / 概念中的你</span> </a > <p class="pl">2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...</p > <div class="star clearfix"> <span class="allstar30"></span> <span class="rating_nums">5.9</span> <span class="pl">(19123人评价)</span> </div> </div> </td> </tr> 这是电影hmtl , 获取电影名(name), 封面链接(picture), 简介(info), 评分(score), 评论人数(commentsNumber),请使用括号的单词作为属性名,以JSON格式返回
他将会返回:
{ "name": "对你的想象", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.webp", "info": "2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...", "score": "5.9", "commentsNumber": "19123人" }
小结
AIGC 作为一种新兴技术,正逐渐改变着我们的生活和工作方式。它展现出了强大的创造力和高效性,能够生成丰富多样的内容。虽然它对传统编程方式带来了一定的冲击,但两者也可以相互结合,发挥各自的优势。AIGC 为我们带来了新的机遇和挑战,我们需要积极适应并探索其应用,以更好地推动科技的进步和发展。拥抱ai,努力为中国互联网发展贡献自己的一份力量,结合自己的专业,ai+前端、ai+后端...whatever,实现更高效率的开发方式。