【未来已来?】当传统编程遇上AIGC:豆瓣电影爬虫案例

104 阅读4分钟

在当今科技与艺术日益交融的时代,编程领域正经历一场前所未有的革命——传统编程技艺与人工智能生成内容(AIGC)的无缝对接。这场变革不仅重新定义了编程的边界,更是激发了无限的创意潜力。本文将以一个生动实例,即爬取并解析豆瓣电影排行榜数据的项目,深入剖析传统编程与AIGC技术如何协同作战,共同开启编程新境界。我们将通过两个关键环节,直观展现两者差异,揭示AIGC如何在保留传统精髓的同时,提升效率并激发创新。

传统编程:根基深厚,步步为营

传统编程,以其严谨的逻辑构建与规范化的流程,为软件工程打下坚实基础。以下是一个典型示例,展示如何通过Node.js环境,搭配request-promisecheerio库,进行网页数据的爬取与解析:

传统的完整代码展示

const request = require('request-promise');
const cheerio = require('cheerio');
//单点入口
async function main() {
    // 伪代码:
    // 根据url发送一个http请求 拿到html 
    // 根据html分析,拿到电影内容
    // 返回内容
    const URL = "https://movie.douban.com/chart";
    // http请求html 基于请求
    const html = await request({
        url: URL
    })

    // html分析 document + 选择器 cheerio 满足
    // 将html字符串加载到内存中,返回的$ = document
    let $ = cheerio.load(html);
    const movieNodes = $('#content .article .item');

    const movieList = [];
    for (let i = 0; i < movieNodes.length; i++) {
        // 这段功能相对独立 复用的 将一段电影的html解析封装成getMovieInfo函数
        movieList.push(getMovieInfo(movieNodes[i]));
    }
    console.log(movieList);
    }

    const getMovieInfo = function (node) {
        let movieInfo = {};
        // 将电影信息加载进内存
        let $$ = cheerio.load(node);
        let title = $$('.pl2 a').text()
        let pic = $$('.nbg img').attr('src')
        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;
    }

    main();

AIGC:智能介入,代码生成的跃迁

然而,面对日益复杂的网页结构与海量数据,传统方法的局限性逐渐显现。此时,AIGC技术的引入如同一股清流,以其自动生成逻辑与理解能力,大大简化了重复劳动。以下是如何借助OpenAI的API,利用预先训练的模型来智能解析电影详情:

利用AI的代码展示

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

const client = new OpenAI({n
    apiKey: '****',
    baseURL: 'https://api.chatanywhere.tech/v1'
})

//单点入口
async function main() {
    // 伪代码:
    // 根据url发送一个http请求 拿到html 
    // 根据html分析,拿到电影内容
    // 返回内容
    const URL = "https://movie.douban.com/chart";
    // http请求html 基于请求
    const html = await request({
        url: URL
    })

    // html分析 document + 选择器 cheerio 满足
    // 将html字符串加载到内存中,返回的$ = document
    let $ = cheerio.load(html);
    const movieNodes = $('#content .article .item');
    let movie_html = '';
    for (let i = 0; i < 2; i++) {
        movie_html += cheerio.load(movieNodes[i]).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 getMovieInfo = function (node) {
        let movieInfo = {};
        // 将电影信息加载进内存
        let $$ = cheerio.load(node);
        let title = $$('.pl2 a').text()
        let pic = $$('.nbg img').attr('src')
        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;
    }

    main();

在解析具体电影信息这一步,我们引入了AIGC技术。通过OpenAI的API,我们构造了一个请求,将HTML片段作为输入,引导AI模型生成针对电影列表的解析代码。模型理解了HTML结构,自动提取电影名、封面链接、简介、评分及评论人数等关键信息,输出为JSON数组。这一过程不仅减少了手动编写解析逻辑的时间,还提高了准确度和可维护性。

AIGC带来的影响与未来展望

在上述案例中,AIGC技术直接承担了约1/3原本属于程序员的工作量,显著提升了开发效率。它让程序员得以从繁琐的重复工作中抽身,专注于更高级别的逻辑设计和创新。这种结合不仅加速了项目的迭代周期,也为编程语言的边界探索提供了新的可能性。

展望未来,随着AIGC技术的成熟和普及,编程将更加智能化。开发者将更多地扮演指导者的角色,定义问题,而让AI辅助实现细节。这不仅意味着更高的生产率,也可能带来编程教育、团队合作模式乃至整个软件开发生态的根本变化。然而,如何平衡自动化与人类创造力、确保代码质量及安全性,将是持续探索的课题。

总之,传统编程与AIGC的融合,正如一股不可逆转的潮流,正重塑着编程世界的面貌,让技术的未来充满无限可能。在这个过程中,保持开放的心态,不断学习并拥抱变化,是每一位开发者应对时代挑战的关键。