通过爬虫,实现传统编程与AIGC的融合

103 阅读5分钟

前言

在信息技术日新月异的今天,传统编程方法作为构建软件基础的基石,仍然占据着至关重要的地位。它强调架构设计的合理性、标准化的流程操作以及通过团队协作完成复杂任务的能力,这在大型科技公司体现得尤为明显,它们往往拥有成千上万的程序员,共同维护和开发庞大的系统。然而,随着人工智能技术的飞速发展,特别是AIGC(人工智能生成内容)的兴起,传统编程模式正逐渐与新兴技术融合,开启了一个全新的编程时代。

为什么要编程?

编程,简单来说,是为了满足特定需求而创建计算机程序的过程。在现代技术栈中,Node.js作为一个基于Chrome V8引擎的JavaScript运行环境,让开发者能够使用JavaScript编写服务器端代码,打破了前后端开发的界限。一个典型的Node.js项目可能从main.js这样的入口文件开始,逐步构建起整个应用的逻辑框架。无论是处理复杂的后端逻辑,还是构建高性能的网络服务,Node.js凭借其非阻塞I/O模型和丰富的生态系统,成为了众多开发者的首选。

爬虫:数据采集的利器

以爬取豆瓣电影数据为例,爬虫技术展现了编程在数据获取方面的强大能力。通过Node.js中的request-promise库发送HTTP请求,结合cheerio库在内存中解析HTML文档,开发者能够轻松地自动化抓取网页上的信息,如电影标题、评分、简介等。这一过程不仅简化了数据收集的繁琐工作,也为数据分析、内容聚合等提供了坚实的基础。

AIGC:改变编程范式的钥匙

尽管经典的传统编程方法在确保系统稳定性和可维护性方面表现出色,但随着AI技术的融入,特别是AIGC的出现,编程的边界被进一步拓展。在传统编程流程中,诸如数据清洗、格式化、甚至是一些重复性的逻辑判断,往往占据了程序员大量的时间。而AIGC则能接手这些任务,比如使用机器学习算法自动解析HTML结构,使得原本需要手动编写的1/3流程性代码变得多余,极大地提升了工作效率。

接下来,让我们实现传统编程与AIGC的融合

代码实现-传统编程

首先先安装request-promise包和cheerio包

  • npm: node package management
    • 用法:npm i 安装包
  • request-promise 发出http请求
  • cheerio 在内存中, 模拟DOM对象
npm i request-promise
npm i cheerio

根据传统编程思想,代码分布细化,写伪代码

 // 定义一个异步函数 main() 来抓取并解析豆瓣电影列表,
 // 然后用cheerio解析返回的HTML,查找并提取出每部电影的名称、简介和评分。
 // 最后,它将这些信息打印为格式化的JSON数组。

根据url 发送一个http请求 拿到html

const request = require('request-promise');
const cheerio = require('cheerio');

const URL = "https://movie.douban.com/chart";
    // http 请求 html
    const html = await request({
        url: URL
    })
    console.log(html);

定义函数负责提取相关信息并以JavaScript对象返回

const getMovieInfo = function(node) {
    let movieInfo = {};
    // 将tr加载进内存
    let $$ = cheerio.load(node);
    let title = $$('.pl2 a').text()
    let pic = $$('.nbg img').attr('src')
    // console.log(pic)
    // console.log(title);
    let info = $$('p.pl').text()
    let rating_nums = $$('.rating_nums').text()

    movieInfo.title = title
    movieInfo.pic = pic
    movieInfo.info = info
    movieInfo.rating_nums = rating_nums
    
    return movieInfo
}

将html字符串加载到内存中并封装

let $ = cheerio.load(html);
    // console.log($('.article table').length)
    // 严谨
    const movieNodes = $('#content .article .item');
    const movieList = [];
    for (let i = 0; i < movieNodes.length; i++) {
        // 封装 
        // 将一段电影的html解析,剥离出去, 
        // 这段功能相对独立 复用的
        movieList.push(getMovieInfo(movieNodes[i]));
    }
    
    console.log(movieList);

代码实现-AIGC融合

无需定义函数,使用AIGC来提取相关信息,下面是使用AIGC融合后的完整代码

const request = require('request-promise');
const cheerio = require('cheerio'); 
// AIGC LLM 生成式内容
// tr 字符串要生成movie json 对象 
// input prompt 
const OpenAI = require('openai');

const client = new OpenAI({
    // 凭证 密钥  算力收费  token
    apiKey: 'sk-r4N8AJ6qidnIWrkqsilwlUMekVpKhoVJ3VEaz8Ss0LUUi7bH',
    baseURL: 'https://api.chatanywhere.tech/v1'
})
// 入口文件
// 异步的
// 将douban 网页的电影列表html,爬取, 
// 返回JSON数组, 每一电影项包含name, desc, score... 
// 单点入口 
async function main() {
    // 代码 分步细化,程序员思维
    // 伪代码
    // 根据url 发送一个http请求 拿到html 
    // 根据html 分析, 拿到电影内容
    // 返回内容
    // await LLM  
    // 良好的编程规范
    const URL = "https://movie.douban.com/chart";
    // http 请求 html   408  基于请求
    // 攻击
    const html = await request({
        url: URL
    })
    console.log(html);

    

    // 代码的可读性,可能要比功能更重要
    // html分析 document + 选择器 cheerio 满足
    // 编程素养 将html字符串加载到内存中,$ =Document 
    let $ = cheerio.load(html);
    // console.log($('.article table').length)
    // 严谨
    const movieNodes = $('#content .article .item');
    let movie_html = ''
    for ( let i =0; i < 2; i++) {
        movie_html += cheerio.load(movieNodes[i]).html()
    }
    // console.log(movie_html);
    let prompt = `
    ${movie_html}
    这是一段电影列表html,请获取电影名(name), 封面链接(picture),
    简介(info),评分(score),评论人数(commentsNumber), 
    请使用括号的单词作为属性名,以JSON数组的格式返回。
    `

    const chatCompletion = await client.chat.completions.create({
        model: 'gpt-3.5-turbo', // 适合聊天的模型 很多种
        messages: [
            {
                role: 'user',
                content: prompt
            }
        ]
    })
    console.log(chatCompletion.choices);
    // const movieList = [];
    // for (let i = 0; i < movieNodes.length; i++) {
    //     // 封装? 
    //     // 将一段电影的html解析,剥离出去, 
    //     // 这段功能相对独立 复用的
    //     // main 比较复杂了, 一个函数超过10行代码, 一定可以再分函数
    //     movieList.push(getMovieInfo(movieNodes[i]));
    // }

    // console.log(movieList);
}

main()

结语

传统编程与AIGC的融合,并不是一方取代另一方的零和游戏,而是相互赋能、共同进步的共生关系。AI的加入,让编程变得更加高效、智能,解放了人类程序员的创造力,让他们能够专注于更高级别的逻辑设计和创新思考。在这个过程中,开发者需要不断学习新的技能,掌握如何有效利用AI工具来提升自身的工作效能。未来,随着技术的不断演进,我们有理由相信,编程将变得更加人性化、智能化,为解决更复杂的问题、创造更多价值开辟新的可能。