网页数据爬取cheerio与openai对比与结合
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);
//这个 $ 可以在文档中查看
//$('#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))查看
//最后 npm cheerio.js运行,得到数据
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