【AIGC实用案例分析3】:用爬虫爬取豆瓣电影中的信息

前言

何为编程?首先编程一定是现有一个目的(需求),根据需求做编程,我们想通过编程来解决世界上各种各样的问题。那么在传统意义上的编程,我们需要有扎实的编程基础(计算机网络、计算机组成原理...)等等相关理论知识,其次将大问题化小,不断细分我们的任务,分析我们要解决的问题如何解决,就像做算法题一样,可以先想出伪代码,什么语言都不重要,首先要有思想,有逻辑,不同的语言只是语法不同而已。最后我们将每一个功能模块化,封装、复用,这样有利于代码的可读性和可维护性。

那么在2024,我认为我们应当好好把握AI元年给我们带来的红利,我们可以基于LLM大模型去做很多我们曾经想都不敢想的事情,在这样一个背景下,就出现了大量的prompt engineer,我们只需要给我们的大模型下指令,告诉他我们想做一件什么事情,这个事情大模型非常擅长,专业的事情交给专业的人去做,我们不再需要一味的学习各种API然后各种API迭代不断的学习不断的忘记。

接下来我通过用爬虫做豆瓣电影中信息提取这么一个案例展开说说,传统编程到AIGC下的转变。

movie.douban.com/chart 豆瓣电影的网址

正文

传统意义下的编程方式

使用 request-promisecheeriofs 和 util 等模块进行网页爬取并将数据保存为 JSON 文件的代码。通过遍历豆瓣电影 Top250 页面,获取电影信息并保存到数组中,最后将数据写入 JSON 文件。

具体来说(秉承他有我拿(爬虫)思想)

  1. 先发生一个HTTP请求,用url发生一个GET请求  url:movie.douban.com/chart
  2. 响应的是HTML(字符串)
  3. 解析HTML字符串,可以像css选择器一样,拿到电影列表
  4. 最后将所有的电影对象组成数组,以json数组的方式返回,爬虫结束
  • 我们需要安装node环境,并下载相关的包以及导入相关模块
  • 通过npm init -y初始化文件夹为后端项目,获得package.json项目描述文件
  • 通过npm i request-import安装request-import模块到项目中。
  • 通过npm i cheerio安装cheerio模块到项目中。
  • request-promise: 一个基于request的Promise封装库,用于发送HTTP请求。
  • cheerio: 一个Node.js库,用于方便地处理HTML文档,提供类似jQuery的API。
  • 当函数超过一定行数可以模块化划分为几个子函数,有利于代码的可读性和调试。(封装、复用)
  • 通过css后代选择器#content .article .grid_view .item逐层找到电影项。

具体实现代码

let request = require('request-promise') // 需要安装 let cheerio = require('cheerio') // 需要安装 let fs = require('fs') const util = require('util') let movies = [] 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) 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 }) console.log('连接成功!', `正在爬取第${num + 1}页数据`) let $ = cheerio.load(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}` list.push(... await getPage(url, i)) } console.log(list.length) fs.writeFile('./output.json', JSON.stringify(list), 'utf-8', () => { console.log('生成json文件成功!') }) } main()

成功拿到结果

事实上这个传统意义上的编程,不是我们的主题因此请看下文如何实现

传统编程给AIGC让位

随着技术的不断发展,AIGC(人工智能生成内容)在一些领域展现出了强大的能力。AIGC 可以自动化地生成代码、文本、图像等内容,提高了效率和生产力。它为一些重复性、模式化的编程任务提供了新的解决方案。例如这个爬虫的案例,我们通过给LLM做一些prompt就能够完成:

通义 (aliyun.com)

只需告诉他一些指令,例如:

“请帮我设计一个简单的爬虫程序,使用Node.js环境。目标是获取豆瓣电影Top榜的数据。首先,程序需要向 'movie.douban.com/chart' 发送GET请求,然后解析返回的HTML,提取出每个电影的标题和评分。最后,将这些信息整理成JSON格式输出。请确保包含必要的错误处理。”

 

为了帮助您实现这个需求,我将提供一个简单的Node.js爬虫程序示例代码 该程序会使用`axios`进行HTTP请求以及`cheerio`库来解析HTML。 如果您还没有安装这两个库,请先通过npm安装它们: Bash 1npm install axios cheerio

以下是一个基础的爬虫程序示例代码:

 

const axios = require('axios'); const cheerio = require('cheerio'); async function fetchDoubanTopMovies() { try { const response = await axios.get('https://movie.douban.com/chart'); if (response.status !== 200) { throw new Error(`请求失败,状态码:${response.status}`); } const html = response.data; const $ = cheerio.load(html); const movies = []; $('div.item').each((index, element) => { const title = $(element).find('.title a').text().trim(); const rating = $(element).find('.rating_num').text().trim(); if (title && rating) { movies.push({ title: title, rating: parseFloat(rating) }); } }); return JSON.stringify(movies, null, 4); } catch (error) { console.error('抓取过程中发生错误:', error); return null; } } fetchDoubanTopMovies() .then(data => { if (data) { console.log('获取到的电影数据:', data); } else { console.log('未能成功获取数据'); } }) .catch(error => console.error('程序执行时出现错误:', error));

 

这段代码首先发送一个GET请求到豆瓣电影Top榜的页面,然后使用`cheerio`来解析返回的HTML。 它查找所有具有`.item`类的div元素(通常这些元素包含了每部电影的信息), 并从中提取电影的标题和评分。 请注意,网页结构可能会随时间改变,因此如果该代码在未来失效,可能需要根据新的HTML结构进行调整。 最后,程序将提取到的电影信息整理成JSON格式并输出到控制台。 同时,代码中也包含了基本的错误处理逻辑,以应对网络请求失败或其他潜在问题。

这样他就自动帮我把需要的程序给完成了

又或者我们给他一些其他的提示,例如给他一个html代码以及一些提示让他帮我完成一些功能

 

<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">(19123人评价)</span> </div> </div> </td> </tr> 这是电影hmtl , 获取电影名(name), 封面链接(picture), 简介(info), 评分(score), 评论人数(commentsNumber),请使用括号的单词作为属性名,以JSON格式返回

他将会返回:

 

{ "name": "对你的想象", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905327559.webp", "info": "2024-03-16(西南偏南电影节) / 2024-05-02(美国网络) / 安妮·海瑟薇 / 尼古拉斯·加利齐纳 / 艾拉·鲁宾 / 安妮·玛莫罗 / 瑞德·斯科特 / 帕芮·马费尔德 / 乔丹·亚伦·霍尔 / 玛蒂尔达·吉安诺普洛斯 / Meg Millidge / 奇克·曼诺哈 / Ray Cham / Jaiden...", "score": "5.9", "commentsNumber": "19123人" }

小结

AIGC 作为一种新兴技术,正逐渐改变着我们的生活和工作方式。它展现出了强大的创造力和高效性,能够生成丰富多样的内容。虽然它对传统编程方式带来了一定的冲击,但两者也可以相互结合,发挥各自的优势。AIGC 为我们带来了新的机遇和挑战,我们需要积极适应并探索其应用,以更好地推动科技的进步和发展。拥抱ai,努力为中国互联网发展贡献自己的一份力量,结合自己的专业,ai+前端、ai+后端...whatever,实现更高效率的开发方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程作品集

你的赞赏将带来极佳的运气和才气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值