先带各位再重温一下爬虫
爬虫,可以解释为爬取网页中的数据,收集和提取互联网上的数据。首先我们需要做什么呢?第一步:发出http请求,获取html字符串;第二步:对字符串做查找正则,伪代码;第三步:聚焦,聚焦在所要的数据标签比如table、title、picture等等;最后:将这些数据放进JSON数组。
为什么说爬虫可以变得轻而易举
你也许想问:难不成上面的步骤还能再简化吗?当然不是,上面都是必要的操作,那为什么说现在爬虫可以变得更加轻松了呢。其实我们要做的就是将传统编程与提示词工程结合,这么说也许会很模糊,也就是用你固有的编程思维结合AI思维,来将爬虫简单化。那该如何简单化呢?上面列举了爬虫所需的几个步骤,我们也知道,这是每个爬虫操作都需要去执行的。这种固有的操作,我们完全可以将它交给AI,想必说到这里,你也明白了。就是将这几个步骤结合在一起让AIGC来完成,实现传统编程和提示词工程的碰撞,从编程思维来到AI思维,将四步操作变成一步,就是将html提取,编辑好合适的语言发给AIGC,它就会生成你需要的东西。
做个对比
对豆瓣电影列表的爬虫代码如下(以往的方法)
import { createCrawl } from 'x-crawl' // 创建爬虫// 创建爬虫应用const crawlApp = createCrawl() // // crawlPage 用于爬取页面crawlApp.crawlPage('https://movie.douban.com/chart').then(async (res) => { const { page, browser } = res.data // 等待元素出现在页面中 await page.waitForSelector('#wrapper #content .article') const filmHandleList = await page.$$('#wrapper #content .article table') const pendingTask = [] for (const filmHandle of filmHandleList) { // 封面链接(picture) const picturePending = filmHandle.$eval('td img', (img) => img.src) // console.log(picturePending, '////') // 电影名(name) const namePending = filmHandle.$eval( 'td:nth-child(2) a', (el) => el.innerText.split(' / ')[0] ) // 简介(info) const infoPending = filmHandle.$eval( 'td:nth-child(2) .pl', (el) => el.textContent ) // 评分(score) // const scorePending = filmHandle.$eval( // 'td:nth-child(2) .star .rating_nums', // (el) => el.textContent // ) // 评论人数(commentsNumber) const commentsNumberPending = filmHandle.$eval( 'td:nth-child(2) .star .pl', (el) => el.textContent?.replace(/\(|\)/g, '') ) pendingTask.push([ namePending, picturePending, infoPending, // scorePending, commentsNumberPending ]) } const filmInfoResult = [] let i = 0 for (const item of pendingTask) { Promise.all(item).then((res) => { // filmInfo 是一个电影信息对象,顺序在前面就决定好了 const filmInfo = [ 'name', 'picture', 'info', // 'score', 'commentsNumber' ].reduce((pre, key, i) => { pre[key] = res[i] return pre }, {}) // 保存每个电影信息 filmInfoResult.push(filmInfo) // 最后一次的处理 if (pendingTask.length === ++i) { browser.close() // 整理,根据数量决定是多还是单 const filmResult = { element: filmInfoResult, type: filmInfoResult.length > 1 ? 'multiple' : 'single' } console.log(filmResult) } }) }})
这代码量挺大吧,我也觉得挺大。而现在给的方法,一句代码都不需要自己动手,只需要CTRL+c和CTRL+v,当然了,不是复制我这里的代码,而是找到你需要的html,再写上你的需求,发给AIGC。
如下(新方法)
<a class="nbg" href="https://movie.douban.com/subject/35490167/" title="破墓"> <img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905896429.webp" width="75" alt="破墓" class=""> </a> </td><td valign="top"> <div class="pl2"><a href="https://movie.douban.com/subject/35490167/" class=""> 破墓 / <span style="font-size:13px;">The Unearthed Grave / Exhuma</span> </a><p class="pl">2024-02-16(柏林电影节) / 2024-02-22(韩国) / 崔岷植 / 金高银 / 柳海真 / 李到晛 / 全镇基 / 洪瑞俊 / 李大卫 / 小山力也 / 金智安 / 金善映 / 韩国 / 张在现 / 134分钟 / 破墓 / 悬疑 / 惊悚 / 恐怖 / 张宰贤 Jae-hyun Jang / 韩语 / 日语 / 英语</p> <div class="star clearfix"> <span class="allstar35"></span> <span class="rating_nums">6.7</span> <span class="pl">(105471人评价)</span> </div> </div> </td> </tr> </tbody></table> 这是一部电影的html片段,获取需要电影名(name),封面链接(picture),简介(info),评分(score),评论人数(commentsNumber)。请使用括号的单词作为属性名,以JSON对象的格式返回
将它发给AIGC,你便会得到所爬的数据
你看,需要的数据已经获取到了,不需要写任何一句代码,这样一来,爬虫是不是轻松了许多。
总结
如今AI高速发展,不仅爬虫,有很多操作都可以变得轻而易举,交给AIGC,我们的任务就是给它一段合适的提示词(prompt),这大幅减小了工作量,也更加灵活。最后,希望这篇文章能给你帮助,或是你有什么不同的看法,欢迎评论。