爬虫传统编程与提示词工程的碰撞:AIGC开创新时代数据采集的可能性

1,156 阅读9分钟

前言

随着信息时代的发展,数据已经成为了驱动创新和发展的关键资源之一。在这个信息爆炸的时代,如何高效地获取和利用数据成为了各行各业所面临的重要挑战。在数据获取的技术中,爬虫(Web Crawler)是一种被广泛应用的工具,它能够自动化地从互联网上收集各种类型的信息。然而,传统的爬虫编程方式在面对复杂多变的网络环境和数据结构时,往往显得力不从心。而提示词工程(Prompt Engineering)的出现,则为爬虫技术的发展开辟了全新的可能性。

传统爬虫实现数据采集的形式

传统的爬虫编程主要依赖于对网页的解析和模式匹配。 传统爬虫编程方法通常涉及使用库(如 RequestsBeautifulSoup 等,本文将使用 x-crawl 进行演示)来发送HTTP请求并解析HTML页面,从而提取所需的信息。

传统方法的基本步骤为:

  1. 发送HTTP请求以获取对应页面的HTML源码。
  2. 使用解析库解析HTML页面,提取所需的信息。
  3. 对提取的信息进行处理和存储,例如保存到数据库或文件中。

以耳熟能详的“爬取豆瓣电影排行榜”项目为例,使用 x-crawl 库爬取豆瓣电影排行榜的参考代码如下:

运行上述代码可以得到以下结果:

{
  element: [
    {
      name: '破墓',
      picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905896429.webp',
      info: '2024-02-16(柏林电影节) / 2024-02-22(韩国) / 崔岷植 / 金高银 / 柳海真 / 李到晛 / 全镇基 / 洪瑞俊 / 李大卫 / 小山力也 / 金智安 / 金善映 / 韩国 / 张在现 / 134分钟 / 破墓 / 悬疑 / 惊悚 /  恐怖 / 张宰贤 Jae-hyun Jang / 韩语 / 日语 / 英语',
      commentsNumber: '105652人评价'
    },
    {
      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...',
      commentsNumber: '17295人评价'
    },
    {
      name: '哥斯拉-1.0',
      picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900227040.webp',
      info: '2023-11-01(东京国际电影节) / 2023-11-03(日本) / 神木隆之介 / 滨边美波 / 山田裕贵 / 青木崇高 / 吉冈秀隆 / 安藤樱 / 佐佐木藏之介 / 西垣匠 / 中村织央 / 谷口翔太 / 须田邦裕 / 水桥研二 / 阿南健治 / 饭田基祐 / 远藤雄弥 / 田中美央 / 桥爪功...',
      commentsNumber: '22360人评价'
    },
    {
      name: '彷徨之刃',
      picture: 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2907398842.webp',
      info: '2024-05-17(中国大陆) / 王千源 / 王景春 / 齐溪 / 张宥浩 / 王天辰 / 周政杰 / 阿如那 / 吴双 / 中国大陆 / 陈卓 / 2024-05-03 16:17 / 107分钟 / 剧情 / 犯罪 / 悬疑 / 杨薇薇 Weiwei Yang / 李佳颖 Carol Li / 徐翔云 Xiangyun Xu / 陈卓 Zhuo Chen / 汉语普通话...',
      commentsNumber: '尚未上映'
    },
    {
      name: '银河写手',
      picture: 'https://img2.doubanio.com/view/photo/s_ratio_poster/public/p2905680871.webp',
      info: '2023-07-24(FIRST青年电影展) / 2024-03-30(中国大陆) / 宋木子 / 合文俊 / 李飞 / 李文茹 / 宋晓亮 / 张皓森 / 刘默然 / 祁又一 / 魏来 / 白志强 / 李阔 / 单丹丹 /  尹思淇 / 沈腾 / 中国大陆 /  李阔 / 单丹丹 / 103分钟 / 106分钟(影展版) / 剧情 / 喜剧...',
      commentsNumber: '34223人评价'
    },
    {
      name: '老狐狸',
      picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900908599.webp',
      info: '2023-10-27(东京国际电影节) / 2023-11-24(中国台湾) / 白润音 / 刘冠廷 / 陈慕义 / 刘奕儿 / 门胁麦 / 黄健玮 / 温升豪 / 班铁翔 / 杨丽音 / 傅孟柏 / 高英轩 / 庄益增 / 张再兴 / 许博维 / 管罄 / 钟瑶 / 游珈瑄 / 郑旸恩 / 戴雅芝 / 姜仁 / 萧鸿文...',
      commentsNumber: '48893人评价'
    },
    {
      name: '魔鬼深夜秀',
      picture: 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2905556722.webp',
      info: '2023-06-11(澳大利亚) / 2024-04-19(美国网络) / 大卫·达斯马齐连 / 劳拉·戈登 / 伊恩·布利斯 / 费萨尔·巴齐 / 英格丽·托蕾莉 / 里斯·奥特里 / 乔治娜·海格 / 乔什·邝·塔特 / 斯蒂夫·莫察基斯 / 宝 拉·阿伦德尔 /  塔马拉·谢尔顿 / 克里斯托弗·卡比...',
      commentsNumber: '18909人评价'
    },
    {
      name: '完美的日子',
      picture: 'https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2898894527.webp',
      info: '2023-05-25(戛纳电影节) / 2023-12-21(德国) / 2023-12-22(日本) / 役所广司 / 柄本时生 / 中野有纱 / 山田葵  / 麻生祐未 / 石川小百合 / 三浦友和 / 田中泯 / 大下浩人 / 犬山犬子 / 牧口元美 /  长井短 / 研直子 / 茂吕师冈 / 县森鱼 / 片桐入 / 芹泽兴人...',
      commentsNumber: '41583人评价'
    },
    {
      name: '机器人之梦',
      picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2899644068.webp',
      info: '2023-05-20(戛纳电影节) / 2023-12-06(西班牙) / 2024(中国大陆) / 伊万·拉班达 / 阿尔伯特·特里佛·塞加拉 / 拉法·卡尔沃 / 何塞·加西亚·托斯 / 何塞·路易斯·梅地亚维拉 / 加西埃拉·莫利娜 / 埃斯特·索兰斯 / 西班牙 / 法国 / 巴勃罗·贝格尔...',
      commentsNumber: '75948人评价'
    },
    {
      name: '血爱成河',
      picture: 'https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2902183869.webp',
      info: '2024-01-20(圣丹斯电影节) / 2024-03-08(美国) / 克里斯汀·斯图尔特 / 凯蒂·M·奥布莱恩 / 艾德·哈里斯 / 戴夫·弗兰科 / 吉娜·马隆 / 安娜·巴瑞辛尼科夫 / 基思·雅各 / 伊薇特·法齐奥-德莱尼 / 戴维·德劳 / 凯莱布·贝克 / 米坎德鲁 / 莉莉·哈里斯...',
      commentsNumber: '6233人评价'
    }
  ],
  type: 'multiple'
}

从以上案例可以看出,传统进行爬虫编程进行数据采集有以下痛点:

  • 开发者需要编写大量的代码来应对各种可能的网页结构和数据格式。这种方式虽然在某些情况下表现良好,但是面对复杂的网页布局和动态加载的内容时,往往会遇到各种挑战,导致爬取效率低下甚至失败。
  • 当豆瓣网站结构或排行榜页面布局发生变化时,传统爬虫可能需要频繁地更新和调整代码,维护成本较高。
  • 传统爬虫往往难以应对反爬虫(Anti-Scraping)机制的挑战,容易被网站封禁或识别出来。

相比之下,提示词工程采用了一种全新的数据采集思路。它不再依赖于对网页结构的深度解析,而是通过大模型从用户输入的关键词或主题出发,自动推测相关的网页内容,并从中提取所需信息。这种方式不仅能够避开网页结构的复杂性,提高了爬取的效率,而且更加灵活和智能,能够应对各种反爬虫机制的挑战。

提示词工程赋能数据采集

仍旧是以爬取豆瓣电影排行榜为例,这里先采用最普通的 chat 方式与 GPT模型 进行交互,让大模型为我们进行数据采集:

测试模型

tongyi.aliyun.com/

提问内容

```html
<table width="100%" class="">
    <tbody>
        <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/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">(105467人评价)</span>
                    </div>
                </div>
            </td>
        </tr>
    </tbody>
</table>
```

这是一部电影的html片段。获取需要电影名(name),封面链接(picture),简介(info), 评分(score),评论人数(commentsNumber)。 请使用括号的单词作为属性名,以JSON数组的格式返回。

返回结果

```json
[    {        "name": "破墓",        "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905896429.webp",        "info": "2024-02-16(柏林电影节) / 2024-02-22(韩国) / 崔岷植 / 金高银 / 柳海真 / 李到晛 / 全镇基 / 洪瑞俊 / 李大卫 / 小山力也 / 金智安 / 金善映 / 韩国 / 张在现 / 134分钟 / 破墓 / 悬疑 / 惊悚 / 恐怖 / 张宰贤 Jae-hyun Jang / 韩语 / 日语 / 英语",        "score": "6.7",        "commentsNumber": "105467人"    }]
```

小结

仅仅通过以上这个小实验即可确定,只要给大模型提供未经处理的信息并规定所需内容和输出格式,即可以跳过繁琐的编程过程与处理方式,动态且快速地获取到准确的信息。且这个过程不受网页布局与网页结构变动的影响,大模型可以自行判断网页的结构变动,无需开发者人工干预。

如使用OpenAI等大模型的调用库(Libraries)结合提示词工程进行信息爬取,即可完全替代传统的爬虫编程进行数据采集的形式,使得代码量显著下降,采集结果也会更加准确

另外,本文使用的 x-crawl 作为新一代爬虫工具,也迅速地拥抱了大模型,OpenAI调用库为开发者提供了AI辅助爬虫工具。读者可以阅读其官方文档:创建 AI 应用以进一步了解,本文不再过多介绍。

本文总结

爬虫传统编程与提示词工程的碰撞,不仅仅是技术上的交流和融合,更是对数据采集思路的一次革命性突破。传统编程模式强调的是对数据结构和规律的深度理解和分析,而提示词工程则更注重于数据的语义和关联性。两者的结合,既保留了传统爬虫的高效性和灵活性,又赋予了爬虫技术更加智能和适应性

未来,随着人工智能和自然语言处理等技术的不断发展,提示词工程必将成为数据采集的主流方式之一。它将为各行各业提供更加便捷、高效的数据获取手段,推动数据驱动型发展的深入实践。同时,也需要我们不断地探索和创新,进一步完善提示词工程的理论和技术体系,以应对日益复杂多变的数据采集需求,开创数据时代的全新篇章。