为什么AI编程让爬虫开发变得如此简单?

160 阅读10分钟

引言

在现代软件开发领域,传统编程和人工智能生成内容(AIGC)的融合逐渐成为一种趋势。这种融合不仅提高了开发效率,还改变了程序员的工作方式和编程范式。本文将探讨传统编程与AIGC的结合,通过一个具体的示例展示如何将这种结合应用于实际项目中,从而提升开发效率和代码质量。

目录

1. 为什么要编程?

2. 传统编程

3. 爬虫:从豆瓣电影获取数据

4.结合AIGC:让AI参与编程

5.总结

一、为什么要编程?

编程的目的在于解决实际需求。无论是后端开发还是前端开发,编程都是为了实现特定功能、满足用户需求。例如,后端开发需要处理服务器逻辑、数据库操作和API接口,前端开发则需要实现用户界面和交互效果。

二、传统编程

传统编程的编程素养和标准

在传统编程中,编程素养和标准至关重要,它们不仅影响代码的质量,还影响开发过程的效率和团队协作的效果。以下是一些关键的编程素养和标准:

编码规范

遵循统一的编码规范可以提高代码的可读性和可维护性。编码规范通常包括命名规则、代码格式、注释风格等。以下是一些常见的编码规范:

  • 命名规则:变量名、函数名和类名应采用具有描述性的命名方式,避免使用缩写和无意义的名称。例如,使用getUserInfo而不是getUsrInf
  • 代码格式:统一的代码格式有助于提高代码的可读性。可以使用代码格式化工具(如Prettier)来自动化这一过程。
  • 注释风格:适当的注释可以帮助其他开发者理解代码的逻辑和意图。注释应简洁明了,避免过度注释和无意义的注释。

代码审查

代码审查是保证代码质量的重要环节。通过团队成员之间的代码审查,可以发现潜在的问题,分享最佳实践,并确保代码的一致性。代码审查的重点包括:

  • 逻辑正确性:确保代码逻辑正确,功能实现符合需求。
  • 代码风格:检查代码是否符合团队的编码规范。
  • 性能和安全性:识别和优化可能的性能瓶颈和安全漏洞。

架构和默认优质操作

良好的架构设计是传统编程的重要基础。通过设计良好的系统架构,可以确保系统的可扩展性和维护性。例如,分层架构、微服务架构等都是常见的设计模式。这些架构设计能够帮助开发者更好地组织代码,明确各个模块的职责,减少耦合,提高系统的可维护性。

标准化操作

标准化操作是传统编程的另一重要特点。通过制定编码规范、代码审查流程、持续集成和持续部署(CI/CD)等标准,可以确保代码的一致性和可读性。编码规范包括命名规则、注释风格、代码格式等,而CI/CD流程则确保代码在每次提交时都经过自动化测试和部署,以保证代码质量。

流水线操作

在大厂,开发流程往往像流水线一样高效运转。每个程序员专注于特定的任务,从需求分析、设计、编码、测试到部署,每个环节都有明确的分工和协作机制。这种流水线操作方式确保了项目的高效推进和高质量交付。

三、爬虫:从豆瓣电影获取数据

爬虫是一种常见的编程任务,用于从网页上抓取数据。下面是一个使用传统编程方法编写的爬虫示例,它从豆瓣电影网站获取电影信息。

image.png 首先先理清这个是前端项目还是后端项目?显而易见是后端项目。在后端开发中,Node.js作为JavaScript的运行环境,提供了强大的工具和库来处理各种任务,如HTTP请求处理、文件操作和数据库连接等。以下是后端项目的初始化过程:

# 初始化Node项目
npm init -y

# 安装必要的依赖包
npm install request-promise 
npm i cheerio

通过这些步骤,我们可以快速搭建一个Node.js项目,并安装所需的依赖包来实现特定功能。

示例代码解析

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

async function main() {
    // 定义豆瓣电影排行榜的URL
    const URL = "https://movie.douban.com/chart";

    // 发送HTTP请求,获取网页HTML内容
    const html = await request({ url: URL });

    // 使用Cheerio解析HTML内容
    let $ = cheerio.load(html);

    // 选择包含电影信息的DOM节点
    const movieNodes = $('#content .article .item');

    // 初始化一个数组,用于存储电影信息
    const movieList = [];

    // 遍历每个电影节点,提取电影信息
    for (let i = 0; i < movieNodes.length; i++) {
        movieList.push(getMovieInfo(movieNodes[i]));
    }

    // 输出电影信息列表
    console.log(movieList);
}

// 提取单个电影节点的信息
const getMovieInfo = function(node) {
    let movieInfo = {};

    // 使用Cheerio加载当前电影节点
    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对象
    movieInfo.title = title;
    movieInfo.pic = pic;
    movieInfo.info = info;
    movieInfo.rating_nums = rating_nums;
    
    return movieInfo;
}

// 调用主函数
main();

效果如下

[
  {
    index: 0,
    message: {
      role: 'assistant',
      content: '[\n' +
        '  {\n' +
        '    "name": "盟军敢死队",\n' +
        '    "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2908134079.jpg",\n' +
        '    "info": "2024-04-18(中国香港) / 2024-04-19(美国) / 2024-05-24(中国大陆) / 亨利·卡维尔 / 艾莎·冈萨雷斯 / 阿兰·里奇森 / 亚历克斯·帕蒂弗 / 赫洛·费因斯-提芬 / 
巴布斯·奥卢桑莫昆 / 亨利·扎格 / 蒂尔·施威格 / 亨利·戈尔丁 / 加利·艾尔维斯 / 弗莱迪·福克斯...",\n' +
        '    "rating_nums": "7.1"\n' +
        '  },\n' +
        '  {\n' +
        '    "name": "对你的想象",\n' +
        '    "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.jpg",\n' +
        '    "info": "2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...",\n' +
        '    "rating_nums": "5.9"\n' +
        '  },\n' +
        '  {\n' +
        '    "name": "挑战者",\n' +
        '    "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2902765793.jpg",\n' +
        '    "info": "2024-04-17(澳大利亚) / 2024-04-26(美国) / 赞达亚 / 乔什·奥康纳 / 迈克·费斯特 / 费斯·费伊 / 安德烈·加布瓦 / 艾梅莉娅·卡米尔·海伍德 / 杰克·詹森 / A·J·利斯特 / 沙恩·T·哈里斯 / 基努·哈姆 / 卡莱恩·富尼耶 / 考特尼·布鲁克斯 /...",\n' +
        '    "rating_nums": "6.6"\n' +
        '  },\n' +
        '  {\n' +
        '    "name": "哥斯拉-1.0",\n' +
        '    "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900227040.jpg",\n' +
        '    "info": "2023-11-01(东京国际电影节) / 2023-11-03(日本) / 神木隆之介 / 滨边美波 / 山田裕贵 / 青木崇高 / 吉冈秀隆 / 安藤樱 / 佐佐木藏之介 / 西垣匠 / 中村织央 / 谷口翔太 / 须田邦裕 / 水桥研二 / 阿南健治 / 饭田基祐 / 远藤雄弥 / 田中美央 / 桥爪功...",\n' +
        '    "rating_nums": "6.5"\n' +
        '  },\n' +
        '  {\n' +
        '    "name": "银河写手",\n' +
        '    "picture": "https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2905680871.jpg",\n' +
        '    "info": "2023-07-24(FIRST青年电影展) / 2024-03-30(中国大陆) / 宋木子 / 合文俊 / 李飞 / 李文茹 / 宋晓亮 / 张皓森 / 刘默然 / 祁又一 / 魏来 / 白志强 / 李阔 /  单丹丹 /  尹思淇 / 沈腾 / 中国大陆 / 李阔 / 单丹丹 / 103分钟 / 106分钟(影展版) / 剧情 / 喜剧...",\n' +
        '    "rating_nums": "6.5"\n' +
        '  }\n' +
        ']'
    },
    logprobs: null,
    finish_reason: 'stop'
  }
]

四、结合AIGC:让AI参与编程

AIGC,即人工智能生成内容,近年来迅速发展。通过结合自然语言处理(NLP)和深度学习技术,AIGC能够生成高质量的文本内容、代码片段,甚至是完整的应用程序。将AIGC引入编程过程,可以大幅提升开发效率,减少重复性劳动。

在上述示例中,我们可以使用AIGC来简化HTML解析和数据提取的过程。通过将HTML内容作为输入,利用大型语言模型(LLM)生成所需的JSON格式数据。

示例代码解析

const OpenAI = require('openai');
const client = new OpenAI({
    apiKey: 'your-api-key',  // 请替换为您的API密钥
    baseURL: 'https://api.chatanywhere.tech/v1'  // API服务地址
});

async function main() {
    // 定义豆瓣电影排行榜的URL
    const URL = "https://movie.douban.com/chart";

    // 发送HTTP请求,获取网页HTML内容
    const html = await request({ url: URL });

    // 使用Cheerio解析HTML内容
    let $ = cheerio.load(html);

    // 选择包含电影信息的DOM节点
    const movieNodes = $('#content .article .item');

    // 初始化一个字符串,用于存储部分电影HTML内容
    let movie_html = '';
    for (let i = 0; i < 2; i++) {
        // 将每个电影节点的HTML内容添加到movie_html字符串中
        movie_html += cheerio.load(movieNodes[i]).html();
    }

    // 定义prompt,将movie_html作为输入传递给AIGC
    let prompt = `
        ${movie_html}
        这是一段电影列表HTML,请获取电影名(name)、封面链接(picture)、简介(info)、评分(rating_nums),请使用括号中的单词作为属性名,以JSON格式返回。
    `;

    // 调用OpenAI的API生成JSON数据
    const chatCompletion = await client.chat.completions.create({
        model: 'gpt-3.5-turbo',
        messages: [{ role: 'user', content: prompt }]
    });

    // 输出生成的JSON数据
    console.log(chatCompletion.choices);
}

// 调用主函数
main();

效果如下,这不是节省了很多时间!

[
  {
    index: 0,
    message: {
      role: 'assistant',
      content: '{\n' +
        '  "name": "盟军敢死队",\n' +
        '  "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2908134079.jpg",\n' +
        '  "info": "2024-04-18(中国香港) / 2024-04-19(美国) / 2024-05-24(中国大陆) / 亨利·卡维尔 / 艾莎·冈萨雷斯 / 阿兰·里奇森 / 亚历克斯·帕蒂弗 / 赫洛·费因斯-提芬 / 巴 布斯·奥卢桑莫昆 / 亨利·扎格 / 蒂尔·施威格 / 亨利·戈尔丁 / 加利·艾尔维斯 / 弗莱迪·福克斯...",\n' +
        '  "rating_nums": "7.1"\n' +
        '}, {\n' +
        '  "name": "对你的想象",\n' +
        '  "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.jpg",\n' +
        '  "info": "2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...",\n' +
        '  "rating_nums": "5.9"\n' +
        '}, {\n' +
        '  "name": "挑战者",\n' +
        '  "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2902765793.jpg",\n' +
        '  "info": "2024-04-17(澳大利亚) / 2024-04-26(美国) / 赞达亚 / 乔什·奥康纳 / 迈克·费斯特 / 费斯·费伊 / 安德烈·加布瓦 / 艾梅莉娅·卡米尔·海伍德 / 杰克·詹森 / A·J· 利斯特 / 沙恩·T·哈里斯 / 基努·哈姆 / 卡莱恩·富尼耶 / 考特尼·布鲁克斯 /...",\n' +
        '  "rating_nums": "6.6"\n' +
        '}, {\n' +
        '  "name": "哥斯拉-1.0",\n' +
        '  "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900227040.jpg",\n' +
        '  "info": "2023-11-01(东京国际电影节) / 2023-11-03(日本) / 神木隆之介 / 滨边美波 / 山田裕贵 / 青木崇高 / 吉冈秀隆 / 安藤樱 / 佐佐木藏之介 / 西垣匠 / 中村织央 / 谷口翔太 / 须田邦裕 / 水桥研二 / 阿南健治 / 饭田基祐 / 远藤雄弥 / 田中美央 / 桥爪功...",\n' +
        '  "rating_nums": "6.5"\n' +
        '}, {\n' +
        '  "name": "银河写手",\n' +
        '  "picture": "https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2905680871.jpg",\n' +
        '  "info": "2023-07-24(FIRST青年电影展) / 2024-03-30(中国大陆) / 宋木子 / 合文俊 / 李飞 / 李文茹 / 宋晓亮 / 张皓森 / 刘默然 / 祁又一 / 魏来 / 白志强 / 李阔 / 单 丹丹 /  尹思淇 / 沈腾 / 中国大陆 / 李阔 / 单丹丹 / 103分钟 / 106分钟(影展版) / 剧情 / 喜剧...",\n' +
        '  "rating_nums": "6.5"\n' +
        '}'
    },
    logprobs: null,
    finish_reason: 'stop'
  }
]

五、总结

传统编程方法和AIGC的融合,为软件开发带来了新的可能性。通过将AI引入编程过程,开发者可以从繁琐的重复性劳动中解放出来,专注于更具创造性和挑战性的任务。在本文中,我们通过一个具体的示例展示了如何结合传统编程和AIGC来提升开发效率和代码质量。

这种融合不仅提高了开发效率,还为开发者提供了更强大的工具和技术手段。随着AI技术的不断进步和普及,我们可以预见,未来的编程将更加智能化和高效。作为开发者,我们需要不断学习和适应新的技术,才能在快速变化的技术环境中保持竞争力。