当前位置:AIGC资讯 > AIGC > 正文

用爬虫带你感受AIGC的力量

先带各位再重温一下爬虫

爬虫,可以解释为爬取网页中的数据,收集和提取互联网上的数据。首先我们需要做什么呢?第一步:发出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 href="https://movie.douban.com/subject/35490167/" title="破墓"> 
<img src="https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905896429.webp" 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),这大幅减小了工作量,也更加灵活。最后,希望这篇文章能给你帮助,或是你有什么不同的看法,欢迎评论。

更新时间 2024-06-21