likes
comments
collection
share

网页数据爬取cheerio与openai对比与结合

作者站长头像
站长
· 阅读数 33

cheerio

//使用传统编程方法获取目标网页信息

//先初始化: npm init -y

//再将我们的软件包下载 npm i cheerio

//导入包JS文件

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

//创建异步处理主函数

 async function main(){
 }
 main()

//在主函数内部 // 根据url 发送一个http请求 拿到html // 根据html 分析,拿到电影的内容 // 返回内容

 const URL="https://movie.douban.com/chart";
 // http 请求 拿到html 408 基于请求
const html=await request({
   url:URL
})

//在cheerio中,我们需要把HTML document传进去。

let $=cheerio.load(html);

//这个 $ 可以在文档中查看

网页数据爬取cheerio与openai对比与结合

//$('#content .article .item')=HTML中document.querySelectAll('#content .article .item')
const movieNodes=$('#content .article .item');
const movieList=[]

//将数据循环导入 movieList

for(let i=0;i<movieNodes.length;i++){
//getMovieInfo()在外部进行封装
  movieList.push(getMovieInfo(movieNodes[i]))
}
//最后打印movieList
    console.log(movieList)

//对getMovieInfo()进行封装

  const getMovieInfo=function(node){
  let movieInfo={};
  let $$=cheerio.load(node)
  //text()获取文字内容
  const title=$$('.pl2 a').text()
  //attr()获取src
  const pic=$$('.nbg img').attr('src')
  //获取电影信息
  const info=$$('p.pl').text()
  const rating_nums=$$('.rating_nums').text()
  // console.log(info)
  // console.log(rating_nums)
  movieInfo.title=title
  movieInfo.pic=pic
  movieInfo.info=info
  movieInfo.rating_nums=rating_nums

  return movieInfo
}

//不了解这里封装函数调用的可以在[ ](中文自述文件 ·cheeriojs/cheerio 维基 (github.com))查看 网页数据爬取cheerio与openai对比与结合 网页数据爬取cheerio与openai对比与结合 //最后 npm cheerio.js运行,得到数据 网页数据爬取cheerio与openai对比与结合

openai

//对于完全的openai包的使用我们需要去目标网页获取到它的主体数据然后将数据让ai进行分析,还是需要自己分析找出大部分的数据,省去的劳力稍微少一点。

//使用openai方法获取目标网页信息

//先初始化: npm init -y

//再将我们的软件包下载 npm i openai

//导入包JS文件

const OpenAI=require('openai');
//配置对象
const client=new OpenAI({
// 凭证 密钥 算力收费 token   可以去官网购买apiKey

apiKey:'xxxxxx',
baseURL:'https://api.chatanywhere.tech/v1'
})

//async 声明 表示main函数内部会有异步任务

async function main(){

const prompt=`这里放你需要的网页内容对象数据,然后告诉你的需求`
//eg:const prompt=`<tr class="item">
<td width="100" valign="top">
        <a class="nbg" href=" " title="对你的想象">
            < img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.webp" width="75" alt="对你的想象" class="">
        </a >
</td>
<td valign="top">
    <div class="pl2">
        <a href="https://movie.douban.com/subject/35503073/" class="">
                对你的想象
            / <span style="font-size:13px;">关于你的想法 / 概念中的你</span>
        </a >
        <p class="pl">2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...</p >
            <div class="star clearfix">
                    <span class="allstar30"></span>
                    <span class="rating_nums">5.9</span>
                    <span class="pl">(21306人评价)</span>
            </div>
    </div>
</td>
</tr>
一段电影HTML,请获取影名(name),封面链接(picture),简介(info),评分(scroce),评论人数(commentNumber)。
请使用括号的单词作为属性名以JSON的格式返回

`

//创建异步任务
const chatCompletion= await client.chat.completions.create({
   model:'gpt-3.5-turbo',   //适合聊天的模型 大模型有多种
   messages:[
    {
       role:'user',
       content:prompt, //聊天内容
   },
  ]
 })
 
 //chatCompletion.choices为ai发送回的数据,函数可以在官网查询
 
 console.log(chatCompletion.choices);

} main();

cheerio与openai结合

如果理解了cheerio和openai分别单独工作的原理,那么结合起来一定能理解的。

cheerio与openai两个包的结合,优化了自己去将目标页面的目标数据全部copy输入给ai去分析,使用cheerio获取到数据文件后,在让openai进场分析。

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

const client=new OpenAI({
 apiKey:'xxxxxx',
 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<movieNodes.length;i++){
  movie_html+=cheerio.load(movieNodes[i]).html()
}
const prompt=`${movie_html}
这是一段电影列表html,请获取影名(name),封面链接(picture),简介(info),评分(scroce),评论人数(commentNumber)。
请使用括号的单词作为属性名以JSON的格式返回.`

const chatCompletion=await client.chat.completions.create({
  model:'gpt-3.5-turbo',   //适合聊天的模型 大模型有多种
  messages:[
   {
      role:'user',
      content:prompt,
  },
]
})
console.log(chatCompletion.choices)
}
转载自:https://juejin.cn/post/7370925939318702132
评论
请登录