爬虫:传统与智能的碰撞,交织,融合

115 阅读4分钟

前言

在当今快速发展的科技时代,编程作为构建数字世界的基石,其形态和方法论正经历着前所未有的变革。传统编程,以其严谨的逻辑结构、标准化的操作流程,为软件开发奠定了坚实的基础。而人工智能生成内容(AIGC)的兴起,则为这一领域带来了新的活力与可能,促使我们重新思考编程的本质与未来。

本文将以(豆瓣电影排行榜)为示例,探讨传统编程与AIGC的融合路径,分析两者如何相互补充,以提升开发效率并拓宽技术边界。

经典复现:传统编程实现爬虫

传统编程,它强调架构设计的合理性、代码质量以及标准化操作流程。npm(Node Package Manager)作为Node.js的包管理器,极大地简化了依赖管理,使得开发者能够轻松安装如request-promisecheerio等第三方库,分别用于发送HTTP请求和解析HTML文档,从而实现爬虫功能,比如爬取豆瓣电影数据。现在先让我们在终端使用Node.js的指令npm i request-promise npm i cheerio安装第三方库。

再思考如果使用传统编程应该怎么实现爬虫?

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

2.根据html 分析, 拿到电影内容

3.返回内容

传统编程代码如下:

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

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

    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);
    const movieList = [];
    for (let i = 0; i < movieNodes.length; i++) {
        movieList.push(getMovieInfo(movieNodes[i]));
    }

    console.log(movieList);
}

const getMovieInfo = function(node) {
    let movieInfo = {};
    // 将tr加载进内存
    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()

部分结果如下:

image.png

融合之路:传统与智能的交响曲

实现传统编程与AIGC的有效融合,首先需要明确哪些部分最适合交由AI处理。一般而言,重复性高、模式化的任务,如数据清洗、模板代码生成、基础测试用例编写等,最适宜自动化。AI的优势在于能够快速学习和应用模式,将那些标准化、流程化的任务逐步移交给AI工具,但其创造力和对复杂逻辑的理解尚无法完全替代人类。接着咱们再来看看结合AIGC,让AI参与到编程当中去。同样咱们先在终端使用Node.js的指令npm i openai安装第三方库。

结合AIGC代码如下:

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

const client = new OpenAI({
    apiKey: '*****', // 输入自己的api-key
    baseURL: 'https://api.chatanywhere.tech/v1'
})

async function main() {
    // 根据url 发送一个http请求 拿到html 
    // 根据html 分析, 拿到电影内容
    // 返回内容
    const URL = "https://movie.douban.com/chart";
    const html = await request({
        url: URL
    })
    console.log(html);
    // 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()

部分结果如图,可以看出结合AI,能将那些标准化、流程化的任务逐步移交给AI工具,减少自身的工作量。

image.png

结语

编程的根本在于解决实际需求,无论是构建复杂的后端系统,还是开发用户友好的前端界面,其目标始终是提升效率、优化体验。然而,传统编程方式往往伴随着繁琐的重复劳动,如大量模板代码的编写、数据处理逻辑的实现等,这些不仅消耗开发者的时间,也限制了创新思维的空间。此外,随着项目规模的扩大,维护成本与复杂度呈指数级增长,对于大型企业而言,动辄数万程序员的团队协作,无疑是对项目管理和代码质量控制的巨大考验。

传统编程与AIGC(人工智能生成内容)的融合带来了多方面的益处,深刻地影响着软件开发的效率、创新性和可持续性。提高开发效率,AIGC能够自动完成一些重复性高、模式化的工作,如代码生成、文档编写、基本测试用例设计等,这显著减少了开发者在这些任务上的时间投入,使他们能够集中精力解决更复杂的问题和创新功能的开发,从而整体加速软件开发周期