赞
踩
爬虫相信很多人都对此有所了解,它主要依靠编写代码实现对网页结构的解析,通过模拟浏览器行为获取目标数据!随着人工智能技术的发展,LLM大模型的出现为爬虫技术带来了新的思路。与传统的编程模式不同,使用AI大模型+prompt可以显著提高程序员的编程效率。通过结合人工智能和自然语言处理技术,开发者可以更加高效地编写爬虫代码,并实现对网页内容的智能解析和提取。
下面我将通过爬取豆瓣电影top250数据来讲解!
html结构:
传统编程爬取一个网页并获取数据的思路步骤(js)
axios
, request
, http
等)向目标网站发起 HTTP 请求,获取网页的 HTML 内容。cheerio
, jsdom
, htmlparser2
等)对获取的 HTML 内容进行解析,形成可操作的 DOM 树或类似的数据结构。通过上述步骤爬取豆瓣电影top250数据的实现代码
// 引入所需模块 let request = require('request-promise') // 用于发起 HTTP 请求 let cheerio = require('cheerio') // 用于解析 HTML let fs = require('fs') // 用于文件操作 const util = require('util') // 存储电影信息的数组 let movies = [] // 豆瓣电影 Top250 的基础 URL let basicUrl = 'https://movie.douban.com/top250' // 用于确保回调函数只执行一次的函数 let once = function (cb) { let active = false if (!active) { cb() active = true } } // 打印信息到控制台 function log(item) { once(() => { console.log(item) }) } // 解析电影信息的函数 function getMovieInfo(node) { let $ = cheerio.load(node) // 使用 Cheerio 解析 HTML let titles = $('.info .hd span') // 选择标题元素 titles = ([]).map.call(titles, t => { return $(t).text() // 提取标题文本 }) let bd = $('.info .bd') // 选择信息所在的父元素 let info = bd.find('p').text() // 提取电影信息 let score = bd.find('.star .rating_num').text() // 提取评分 return { titles, info, score } // 返回电影信息对象 } // 获取页面数据的异步函数 async function getPage(url, num) { let html = await request({ url }) // 发起 HTTP 请求获取页面 HTML console.log('连接成功!', `正在爬取第${num + 1}页数据`) let $ = cheerio.load(html) // 使用 Cheerio 加载 HTML let movieNodes = $('#content .article .grid_view').find('.item') // 选择电影节点 let movieList = ([]).map.call(movieNodes, node => { return getMovieInfo(node) // 解析电影信息 }) return movieList // 返回电影信息列表 } // 主函数 async function main() { let count = 25 // 要爬取的页数 let list = [] // 循环爬取每一页的数据 for (let i = 0; i < count; i++) { let url = basicUrl + `?start=${25 * i}` // 构造每一页的 URL list.push(... await getPage(url, i)) // 将每一页的数据添加到列表中 } console.log(list.length) // 将结果写入到 JSON 文件 fs.writeFile('./output.json', JSON.stringify(list), 'utf-8', () => { console.log('生成json文件成功!') }) } main() // 调用主函数开始执行
这里爬取的页面是豆瓣电影电影评分页面,但是整体html结构思路是一样的(小伙伴们注意一下)
通过上述传统编程的爬虫步骤,我们是不是应该思考哪些步骤是可以从程序员手中释放,交给大模型的呢?
下面代码运用了通义千问API,大家可以自己在可以在模型服务灵积 DashScope - 阿里云 (aliyun.com)中点击立即开通后点击控制台的API_KEY管理获得。
import requests from bs4 import BeautifulSoup import dashscope def fetch_movie_list(url): # 设置HTTP请求头 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0' } # 发送HTTP GET请求获取页面内容 response = requests.get(url, headers=headers) # 检查响应状态码 if response.status_code == 200: # 使用BeautifulSoup解析HTML响应 soup = BeautifulSoup(response.text, 'html.parser') movie_list = [] # 使用CSS选择器提取电影信息 movies = soup.select('#wrapper #content .article .item') # 提取前两部电影的HTML内容并拼接成字符串 all_movies_text = ''.join([movie.prettify() for movie in movies[:2]]) return all_movies_text else: print("Failed to retrieve content") # 调用fetch_movie_list函数获取电影信息 url = 'https://movie.douban.com/chart' movies = fetch_movie_list(url) print(movies) # 构建提示信息 prompt = f""" {movies}这是一段电影列表,去获取电影名(name),封面链接(picture),简介(info),评分(score), 评论人数(commetsNumber),请使用括号的单词作为属性名,以JSON数组的格式返回 """ print(prompt) dashscope.api_key = '自己的密钥' def call_qwen_with_prompt(): messages = [ { 'role': 'user', 'content': prompt } ] response = dashscope.Generation.call( dashscope.Generation.Models.qwen_turbo, messages=messages, result_messages='messages' ) print(response) call_qwen_with_prompt()
通过上述对比,可以看出使用API+prompt的爬虫方式相比传统爬虫方式更加方便、高效,并且具有更多的灵活性和扩展性。传统爬虫需要编写复杂的代码来处理HTTP请求、解析网页内容和存储数据,而使用API+prompt的方式,只需调用相应的API接口,提供简洁明确的提示信息,即可获得生成的回复或结果,省去了繁琐的编码工作。
此外,API+prompt的方式还可以借助强大的AI模型来进一步分析和处理数据,实现更深层次的理解和生成相关内容。通过输入不同的提示信息,可以根据需求定制化地获取所需的数据或生成特定的回复,极大地丰富了爬虫应用的可能性。
不过大模型的运用远不仅仅能够实现传统代码可以完成的事情,它还可以实现很多人工智能的事情,比如情感分析,图像检测等,可以帮助开发者在他们的项目中实现各种智能功能,为创造带来无限可能性!
这段代码是一个使用OpenAI GPT-3.5 Turbo模型进行情感判断的示例。下面是代码的分流程步骤讲解:
const OpenAI = require('openai')
require('dotenv').config();
openai
库被引入,用于与OpenAI API进行通信。
同时,dotenv
库也被引入,用于从环境变量中获取API密钥。
将密钥存储在
.env
文件中有几个好处:
- 安全性: 将敏感信息如 API 密钥放在环境变量中,而不是直接硬编码在代码中,可以提高安全性。这样即使代码被泄露,密钥也不会暴露在外部。
- 易管理: 使用
.env
文件可以更轻松地管理多个环境的配置。比如,在开发环境和生产环境使用不同的密钥,只需在不同的.env
文件中配置即可。- 简洁性: 通过使用环境变量,代码可以更简洁,不需要在代码中硬编码密钥,提高了可读性和维护性。
- 避免提交到版本控制:
.env
文件通常会被添加到.gitignore
中,这样就可以避免将敏感信息提交到版本控制系统中。
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: 'https://api.chatanywhere.tech/v1'
})
通过OpenAI
构造函数创建一个OpenAI客户端实例,传入API密钥和API的基础URL。
let prompt = `判断一下的用户情感是正面还是负面的
评论:买的银色版真的好看,一天就到了,晚上就开始拿起来玩,系统很丝滑流畅,
做工扎实,手感细腻,很精致哦,华为一如既往好品质
情感:正面
评论:随意降价,不予保价,服务态度差
情感负面
`
let myPrompt = `
${prompt}
评论:小狗很可爱,但是动物毛发过敏
情感:
`
prompt
是一个包含用户评论和相应情感标签的文本,myPrompt
是在prompt
的基础上加上了新的评论的文本,并留出了空白部分以用于填写情感。
这个操作的目的在于利用OpenAI的模型(在这里是GPT-3.5-turbo)来填补这些留白的情感标签。通过将用户新增的评论和空白情感标签组合起来,我们可以让AI模型理解新增评论的情感,并给出相应的情感标签。这样做的好处是能够实现情感分类,即确定新增评论是正面的还是负面的,从而更好地理解用户的情感倾向。
通过这种方式,我们可以利用AI模型来自动地对用户的评论进行情感分类,为进一步的分析和处理提供了基础。
const chatCompletions = await client.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [
{ role: 'user', content: myPrompt }
],
n: 1,
})
通过调用client.chat.completions.create()
方法,使用GPT-3.5 Turbo模型进行聊天式的文本生成。model
参数指定所使用的模型,messages
参数包含了用户的角色和内容,n
参数指定返回的生成文本的数量。
// 引入所需的依赖 const OpenAI = require('openai'); // 引入 OpenAI Node.js SDK require('dotenv').config(); // 引入 dotenv 库,用于加载环境变量 // 这里假设项目已经安装了 node-fetch 等依赖 // 实例化 OpenAI 客户端 const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY, // 从环境变量中获取 OpenAI API 密钥 baseURL: 'https://api.chatanywhere.tech/v1' // 设置 OpenAI API 的基本 URL }); // 异步函数,用于执行主要逻辑 async function main() { // 设置要输入给模型的提示文本 let prompt = `判断一下的用户情感是正面还是负面的 评论:买的银色版真的好看,一天就到了,晚上就开始拿起来玩,系统很丝滑流畅, 做工扎实,手感细腻,很精致哦,华为一如既往好品质 情感:正面 评论:随意降价,不予保价,服务态度差 情感负面 `; let myPrompt = ` ${prompt} 评论:小狗很可爱,但是动物毛发过敏 情感: `; // 发送请求给 OpenAI API,获取聊天的回复 const chatCompletions = await client.chat.completions.create({ model: 'gpt-3.5-turbo', // 使用的模型版本 messages: [{ role: 'user', content: myPrompt }], // 用户的消息 n: 1 // 生成一条回复 }); // 打印返回的聊天回复 console.log(chatCompletions.choices[0]); } main(); // 调用主函数执行主要逻辑
相信很多小伙伴会疑惑小编上述为何交叉用了两种语言,其实,我这样做是为了向大家介绍这两种语言如何通过大模型来实现人工智能,并强调大模型的出现让前端开发更为便利,不再必须依赖Python等后端技术。另一方面也向大家讲讲它们的一些区别!
语言类型:
编程范式:
异步编程:
类型系统:
语法:
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
-END-
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。