新手对于经典传统编程“爬虫”与AIGC的融合的学习

经典传统编程实现"爬虫"

通过我们程序员的思维构造个大纲:

1.根据url 发送一个http请求 拿到html 2.根据html 分析,拿到电影的内容 3.返回内容

爬虫(Web Crawler 或 Spider)通常被认为是后端技术的一部分。它涉及到自动化地访问网页、解析网页内容、提取所需数据,并将其存储在数据库或其他存储系统中。

所以对于咱们前端工程师得把这后端问题转为前端问题这里就得使用到选择技术栈并配置环境,使用Node.js解决这些问题

  1. Node.js 本身:作为基础运行环境,提供 JavaScript 在服务器端运行的能力,实现从前端到后端的无缝衔接。
  2. npm(Node Package Manager) :Node.js 的包管理器,用于管理项目,通过npm i request-promise cheerio等命令,开发者可以轻松安装诸如request-promise用于发起HTTP请求,以及cheerio用于解析HTML文档的库。
  • npm i 安装包 request-promise 发出http请求 / cheerio 在内存中,模拟DOM对象

在终端输入npm init -y 使js也能解决前端问题

输入npm i request-promise cheerio等命令引用外部文件

引用这两个外部模块

js 复制代码
const request = require('request-promise')
const cheerio = require('cheerio')

对函数封装,将一段电影的html解析,剥离出去(可使这段功能相对独立 可复用)

js 复制代码
let $ = cheerio.load(html);
    const movieNodes = $('#content .article .item')
    const movieList = []
    for (let i = 0; i < movieNodes.length; i++){

        movieList.push(getMovieInfo(movieNodes[i]));
    }

使用cheerio库来解析HTML文档,并从中提取特定的信息。

js 复制代码
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_num = $$('.rating_nums').text()
    
    movieInfo = {
        title: title,
        pic: pic,
        info: info,
        rating_num: rating_num
    }

完整Javascript代码如下:

js 复制代码
const request = require('request-promise')//终端输入npm i  request-promise转后端
const cheerio = require('cheerio')//终端输入npm i cheerio
// 入口文件
//async 异步的
// 将豆瓣网页的电影列表html,爬取
// 返回JSON数组,每一项电影包含name,desc....
//单点入口
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')
    const movieList = []
    for (let i = 0; i < movieNodes.length; i++){
        //用函数封装?
        //将一段电影的html解析,剥离出去
        //这段功能相对独立 可复用的
        //因为main已经比较复杂了,一个函数超过10行代码,一定可以再分函数
        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_num = $$('.rating_nums').text()
    //console.log(title);
    //console.log(pic);
    //console.log(info);

    movieInfo = {
        title: title,
        pic: pic,
        info: info,
        rating_num: rating_num
    }
    console.log(movieInfo)
    return movieInfo


}

main()

使用AIGC可以省去部分代码编写

  • 1/3的流程性代码(html parse)不需要写了
  • 工作效率更高

添加openai工具包并为其配置运行环境

js 复制代码
const OpenAI = require('openai');

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

根据需求输入prompt对ai提问

AI 可将getMovieInfo的内容代替,省去了对函数封装和,对于该HTML的任何需求只需要输入中文就可以得到

js 复制代码
let prompt = `
    ${movie_html}
    这是一段电影列表html,请获取电影名(name), 封面链接(picture),
    简介(info),评分(score),评论人数(commentsNumber), 
    请使用括号的单词作为属性名,以JSON数组的格式返回。
    `

显而易见省去许多代码的输入,以下getMovieInfo的内容被代替

js 复制代码
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_num = $$('.rating_nums').text()
    
    movieInfo = {
        title: title,
        pic: pic,
        info: info,
        rating_num: rating_num
    }

适合聊天的模型很多种,我选择了gpt-3.5-turbo

js 复制代码
const chatCompletion = await client.chat.completions.create({
        model: 'gpt-3.5-turbo', 
        messages: [
            {
                role: 'user',
                content: prompt
            }
        ]
    })

以下是完整的JavaScript代码

js 复制代码
const request = require('request-promise');
const cheerio = require('cheerio');  
const OpenAI = require('openai');

const client = new OpenAI({
    // 凭证 密钥  算力收费  token
    apiKey: 'sk-r4N8AJ6qidnIWrkqsilwlUMekVpKhoVJ3VEaz8Ss0LUUi7bH',
    baseURL: 'https://api.chatanywhere.tech/v1'
})

async function main() {
    const URL = "https://movie.douban.com/chart";
    const html = await request({
        url: URL
    })

    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
            }
        ]
    })

}


main()
相关推荐
BigYe程普15 分钟前
我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程
开发语言·前端·chrome·chatgpt·reactjs·个人开发
神之王楠28 分钟前
如何通过js加载css和html
javascript·css·html
余生H32 分钟前
前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比
前端·javascript·node.js·全栈
程序员-珍35 分钟前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发
axihaihai40 分钟前
网站开发的发展(后端路由/前后端分离/前端路由)
前端
流烟默1 小时前
Vue中watch监听属性的一些应用总结
前端·javascript·vue.js·watch
2401_857297911 小时前
招联金融2025校招内推
java·前端·算法·金融·求职招聘
茶卡盐佑星_1 小时前
meta标签作用/SEO优化
前端·javascript·html
与衫1 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql
Ink1 小时前
从底层看 path.resolve 实现
前端·node.js