在数据抓取领域,传统爬虫与 AI 辅助爬虫各有千秋。传统爬虫基于规则进行数据抓取,适用于结构稳定、规则明确的网站。然而,随着网站结构的频繁变动和复杂化,传统爬虫逐渐暴露出其局限性。相比之下,AI 辅助爬虫借助人工智能技术,能够智能解析网页、自适应变化,展现出更高的灵活性和准确性。那么,面对不同的抓取需求,我们该如何选择呢?本文将深入探讨传统爬虫与 AI 辅助爬虫的特点与优劣,为您提供决策参考。
传统爬虫主要依赖于固定的规则或模式来抓取网页数据。它们通常通过识别网页中的特定元素,如类名、标签或结构,来定位和提取所需信息。然而,这种方式的局限性显而易见。一旦网站进行更新,改变了原有的类名、标签或结构,传统爬虫就会因为无法识别新的元素而失效,导致数据抓取失败或错误。
AI 辅助爬虫能够智能地分析和理解网页内容,从而更准确地定位并提取所需信息。通过自然语言处理等技术,它们能够理解网页的语义信息,从而更精确地定位所需数据,即使网站进行了更新,AI 辅助爬虫也能继续有效地抓取数据。
选用大家熟悉的豆瓣来进行示范,而爬虫则是用 x-crawl 。
传统爬虫,通过网页中的特定元素获取豆瓣电影排行榜的电影信息
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) // 电影名(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) } }) } })
爬虫 + AI ,让爬虫和 AI 获取豆瓣电影排行榜的电影信息
import { createCrawl, createCrawlOpenAI } from 'x-crawl' // 创建爬虫应用 const crawlApp = createCrawl() // 创建 AI 应用 const crawlOpenAIApp = createCrawlOpenAI({ clientOptions: { apiKey: process.env['OPENAI_API_KEY'] }, defaultModel: { chatModel: 'gpt-4-turbo-preview' } }) // crawlPage 用于爬取页面 crawlApp.crawlPage('https://movie.douban.com/chart').then(async (res) => { const { page, browser } = res.data // 等待元素出现在页面中, 并获取 HTML await page.waitForSelector('#wrapper #content .article') const targetHTML = await page.$eval( '#wrapper #content .article', (e) => e.outerHTML ) browser.close() // 让 AI 获取电影信息 (描述越详细越好) const filmResult = await crawlOpenAIApp.parseElements( targetHTML, `这是电影列表, 需要获取电影名(name), 封面链接(picture), 简介(info), 评分(score), 评论人数(commentsNumber)。使用括号的单词作为属性名` ) console.log(filmResult) })
两个示例最终展示的电影信息
{ "elements": [ { "name": "老狐狸", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900908599.webp", "info": "2023-10-27(东京国际电影节) / 2023-11-24(中国台湾) / 白润音 / 刘冠廷 / 陈慕义 / 刘奕儿 / 门胁麦 / 黄健玮 / 温升豪 / 班铁翔 / 杨丽音 / 傅孟柏 / 高英轩 / 庄益增 / 张再兴 / 许博维 / 管罄 / 钟瑶 / 游珈 / 郑恩 / 戴雅芝 / 姜仁 / 萧鸿文...", "score": "8.1", "commentsNumber": "29211 人评价" }, { "name": "机器人之梦", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2899644068.webp", "info": "2023-05-20(戛纳电影节) / 2023-12-06(西班牙) / 2024(中国大陆) / 伊万拉班达 / 阿尔伯特特里佛塞加拉 / 拉法卡尔沃 / 何塞加西亚托斯 / 何塞路易斯梅地亚维拉 / 加西埃拉莫利娜 / 埃斯特索兰斯 / 西班牙 / 法国 / 巴勃罗贝格尔...", "score": "9.1", "commentsNumber": "64650 人评价" }, { "name": "白日之下", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2904961420.webp", "info": "2023-06-11(上海国际电影节) / 2023-11-02(中国香港) / 2024-04-12(中国大陆) / 姜大卫 / 余香凝 / 林保怡 / 梁仲恒 / 陈湛文 / 周汉宁 / 梁雍婷 / 龚慈恩 / 宝如 / 朱柏谦 / 朱康 / 许月湘 / 胡枫 / 鲍起静 / 高翰文 / 彭杏英 / 罗浩铭 / 谭玉瑛...", "score": "8.0", "commentsNumber": "36540 人评价" }, { "name": "可怜的东西", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2897662939.webp", "info": "2023-09-01(威尼斯电影节) / 2023-12-08(美国) / 艾玛斯通 / 马克鲁弗洛 / 威廉达福 / 拉米尤素夫 / 克里斯托弗阿波特 / 苏西本巴 / 杰洛德卡尔迈克 / 凯瑟琳亨特 / 薇琪佩珀代因 / 玛格丽特库里 / 汉娜许古拉 / 杰克巴顿...", "score": "7.0", "commentsNumber": "130113 人评价" }, { "name": "完美的日子", "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2898894527.webp", "info": "2023-05-25(戛纳电影节) / 2023-12-21(德国) / 2023-12-22(日本) / 役所广司 / 柄本时生 / 中野有纱 / 山田葵 / 麻生未 / 石川小百合 / 三浦友和 / 田中泯 / 大下浩人 / 犬山犬子 / 牧口元美 / 长井短 / 研直子 / 茂吕师冈 / 县森鱼 / 片桐入 / 芹泽兴人...", "score": "8.3", "commentsNumber": "33562 人评价" }, { "name": "新威龙杀阵", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905374090.webp", "info": "2024-03-08(西南偏南电影节) / 2024-03-21(美国网络) / 杰克吉伦哈尔 / 康纳麦格雷戈 / 杰西卡威廉姆斯 / 比利马格努森 / 丹妮拉曼希沃 / 吉米索拉艾库美罗 / 卢卡斯盖奇 / 特拉维斯范文克 / 达伦巴内特 / 乔昆姆德阿尔梅达...", "score": "6.3", "commentsNumber": "9980 人评价" }, { "name": "首尔之春", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2905204009.webp", "info": "2023-11-22(韩国) / 黄政民 / 郑雨盛 / 李星民 / 朴解浚 / 金成 / 朴勋 / 安世镐 / 郑允荷 / 丁海寅 / 南允皓 / 全秀芝 / 韩国 / 金成洙 / 141 分钟 / 首尔之春 / 剧情 / 金成洙 Sung-su Kim / 韩语", "score": "8.8", "commentsNumber": "171858 人评价" }, { "name": "金手指", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2901830629.webp", "info": "2023-12-30(中国大陆) / 梁朝伟 / 刘德华 / 蔡卓妍 / 任达华 / 方中信 / 陈家乐 / 白只 / 姜皓文 / 太保 / 钱嘉乐 / 袁咏仪 / 周家怡 / 岑珈其 / 李靖筠 / 吴肇轩 / 柯炜林 / 冯泳贤 / 杜曜宇 / 李建城 / 古永锋 / 中国香港 / 中国大陆 / 庄文强...", "score": "6.1", "commentsNumber": "135956 人评价" }, { "name": "美国小说", "picture": "https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2902166424.webp", "info": "2023-09-08(多伦多国际电影节) / 2023-12-15(美国) / 杰弗里怀特 / 翠西艾利斯罗斯 / 约翰奥提兹 / 伊萨雷 / 斯特林K布朗 / 埃里卡亚历山大 / 莱斯利格塞斯 / 亚当布罗迪 / 凯斯大卫 / 迈拉卢克利希亚泰勒 / 雷蒙德安东尼托马斯...", "score": "7.7", "commentsNumber": "26223 人评价" }, { "name": "利益区域", "picture": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2899514583.webp", "info": "2023-05-19(戛纳电影节) / 2023-12-15(美国) / 克里斯蒂安富里道尔 / 桑德拉惠勒 / 约翰卡特豪斯 / 拉尔夫赫尔福特 / 弗雷娅克罗伊茨卡姆 / 马克斯贝克 / 伊摩根蔻格 / 斯蒂芬妮佩特罗维茨 / 拉尔夫齐尔曼 / 玛丽罗莎提特言...", "score": "7.4", "commentsNumber": "24875 人评价" } ], "type": "multiple" }
const pendingTask = [] for (const filmHandle of filmHandleList) { const picturePending = filmHandle.$eval('td img', (img) => img.src) const namePending = filmHandle.$eval( 'td:nth-child(2) a', (el) => el.innerText.split(' / ')[0] ) const infoPending = filmHandle.$eval( 'td:nth-child(2) .pl', (el) => el.textContent ) const scorePending = filmHandle.$eval( 'td:nth-child(2) .star .rating_nums', (el) => el.textContent ) const commentsNuberPending = 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) => { const filmInfo = ['name', 'picture', 'info', 'score', 'commentsNumber'].reduce < any > ((pre, key, i) => { pre[key] = res[i] return pre }, {}) filmInfoResult.push(filmInfo) if (pendingTask.length === ++i) { const filmResult = { element: filmInfoResult, type: filmInfoResult.length > 1 ? 'multiple' : 'single' } } }) }
依靠固定的类名和结构,过程还是比较繁琐的。
const filmResult = await crawlOpenAIApp.parseElements( targetHTML, `这是电影列表, 需要获取电影名(name), 封面链接(picture), 简介(info), 评分(score), 评论人数(commentsNumber)。使用括号的单词作为属性名` )
一句话的事。
传统爬虫
需要依靠 “固定的类名”
和 “各种繁琐的操作”
来获取数据,如果网站更新频繁,那么网站更新后类名或结构的改变可能导致传统的爬虫抓取策略失效,需要重新获取最新的类名以及更新各种操作才能爬取数据。AI 辅助爬虫
只需要 “一段话”
就能够更加高效、智能和便捷获取到所需的数据。甚至可以将整个 HTML 传给 AI 帮我们操作,由于网站内容更加复杂需要更准确描述要取的位置,并且会消耗大量的 Tokens ,但即使网站后续的更新导致类名或结构发生改变也能正常爬到数据,因为我们可以不再依赖于固定的类名或结构来定位并提取所需信息,而是让 AI 理解并解析网页的语义信息,从而更高效、智能和便捷提取所需数据。如果所需的内容更多,那么传统爬虫所做的步骤也就更多,而 AI 辅助爬虫只需增加几句话就能搞定,并且不用担心网站更新后的类名和结构是否会发生改动。
传统爬虫主要依赖于预设的规则或模式来抓取网页数据,它们对于结构稳定、规则明确的网站表现出色。然而,随着网络技术的飞速发展和网站结构的频繁更新,传统爬虫面临着越来越多的挑战。一旦网站结构发生变化,传统爬虫通常需要重新调整规则,甚至可能导致抓取失败,这大大降低了其效率和准确性。
相比之下,AI 辅助爬虫结合了人工智能技术,能够智能地解析网页结构和语义,自适应网站的变化。通过机器学习和自然语言处理等技术,AI 辅助爬虫可以识别并学习网页中的特征,从而更准确地定位和提取所需数据。这使得 AI 辅助爬虫在面对复杂多变的网站结构时,能够保持高效的抓取能力。
总的来说,传统爬虫和 AI 辅助爬虫各有其适用场景。对于结构稳定、规则明确的网站,传统爬虫可能是一个更经济、更直接的选择。然而,对于结构复杂、频繁更新的网站,AI 辅助爬虫则展现出了更高的灵活性和准确性优势。在选择时,我们需要根据具体的抓取需求、网站特点以及资源投入等因素进行综合考虑。
文中示例中所用到的爬虫都是来自 x-crawl ,不管是传统爬虫还是 AI 辅助爬虫它都可以满足您,并且还拥有很多好用的功能。
x-crawl 是一个灵活的 Node.js AI 辅助爬虫库。灵活的使用方式和强大的 AI 辅助功能,使爬虫工作变得更加高效、智能和便捷。
它由两部分组成:
如果您觉得 x-crawl 对您有所帮助,或者您喜欢 x-crawl ,可以在 GitHub 上给 x-crawl 存储库 点个 star 。您的支持是我们持续改进的动力!感谢您的支持!
x-crawl GitHub: https://github.com/coder-hxl/x-crawl
x-crawl 文档: https://coder-hxl.github.io/x-crawl/cn/
![]() | 1 hpan 2024-04-22 10:16:55 +08:00 ![]() AI 能爬图文并保持图文结构吗 |
2 coderhxl OP @hpan 上面的示例就是爬了图片和文字哦,并且可以看到结构很完美。AI 是一句话的事,而传统爬虫还是比较繁琐的。 如果想查看 AI 需要处理的 HTML:由于内容太多此处放不下,就只能放在此链接 https://coder-hxl.github.io/x-crawl/cn/guide/#example2 示例 2 底部的 查看 AI 需要处理的 HTML |
3 coderhxl OP @hpan { "name": "老狐狸", "picture": "https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2900908599.webp", "info": "2023-10-27(东京国际电影节) / 2023-11-24(中国台湾) / 白润音 / 刘冠廷 / 陈慕义 / 刘奕儿 / 门胁麦 / 黄健玮 / 温升豪 / 班铁翔 / 杨丽音 / 傅孟柏 / 高英轩 / 庄益增 / 张再兴 / 许博维 / 管罄 / 钟瑶 / 游珈 / 郑恩 / 戴雅芝 / 姜仁 / 萧鸿文...", "score": "8.1", "commentsNumber": "29211 人评价" } 我截取了一个电影信息让您瞧瞧,picture 就是图片 |
4 gauthier 2024-04-22 10:41:34 +08:00 ![]() 能用别的语言模型吗? |
![]() | 5 wujunchuan2008 2024-04-22 10:49:35 +08:00 ![]() 有点意思 |
![]() | 6 4BVL25L90W260T9U 2024-04-22 10:51:46 +08:00 ![]() @livid 疑似 GPT 生成的帖子 |
7 coderhxl OP @gauthier 对于 OpenAI 的话,也可以使用 gpt-3.5-turbo ,默认就是这个了。后续也可能加入其他的 AI 模型,其实看名字就可以知道一点点了 createCrawlOpenAI ,这个是以 OpenAI 命名的,如果加入其他 AI 也会容易兼容。 |
8 coderhxl OP @wujunchuan2008 感谢您的支持。 |
9 coderhxl OP @ospider 哈哈,的确是用了 AI 帮忙,毕竟我文学水平有限,不过用的是百度的文心一言。不是让 AI 直接生成的,而是问他传统爬虫是什么之类的,然后筛选。像 x-crawl 这种,AI 又不认识。 |
10 coderhxl OP @ospider 你可以去问问 AI 了不了解 x-crawl ,毕竟这个工具还是我开发的,AI 版本还是前几天加入的 |
![]() | 12 blankmiss 2024-04-22 11:07:45 +08:00 ![]() 第一步识别是否是机器人,game over |
![]() | 14 karatsuba 2024-04-22 11:10:20 +08:00 ![]() 众所周知爬虫最难的不是拉数据 |
![]() | 15 blankmiss 2024-04-22 11:13:01 +08:00 第一你那个效率很低,第二 无法避免风控 #14 说的很对 第三 对接口逆向没什么帮助 第四 像八爪鱼 这种可视化插件 更方便 |
![]() | 16 herozzm 2024-04-22 11:15:46 +08:00 ![]() 除非用理想本地大模型,不然用 ai 的话一天爬上万不得亏惨 |
![]() | 17 herozzm 2024-04-22 11:16:15 +08:00 我觉得 AI 更多用在数据提取过滤和清洗,而不是抓取这个环节 |
18 coderhxl OP @karatsuba 这篇文章只是讲述传统爬虫与 AI 辅助爬虫的特点与优劣,为您提供决策参考。并没有讲太多的题外话,其他功能 x-crawl 也有,像设备指纹,轮换代理都有哦,https://coder-hxl.github.io/x-crawl/cn/ 下面的特征可以瞧瞧 |
19 maolon 2024-04-22 11:25:37 +08:00 ![]() 老实的说用 gpt 做每一次的爬取也太奢侈了吧。 先不说钱,gpt4 的 t/s 本来就不高,gpt3 也没高到哪里去,长一点的内容要处理到啥时候去。 最好还是用 ai 识别爬取 sample 内容,然后用它来自动生成一个 xxx.com.path.parser 的 util, 然后你的爬虫动态调用这个 |
![]() | 20 zephyru 2024-04-22 11:26:11 +08:00 ![]() 的确,这个自己玩玩还行,大规模抓取用 AI 辅助效率不高,当前成本还蛮高的... 与其让 Ai 解析 html 文本,不如让 AI 辅助生成解析用的函数... |
![]() | 22 ensonfun 2024-04-22 11:28:11 +08:00 ![]() 用 AI 的成本呢?每篇都用 AI 成本很高吧? |
![]() | 24 624144061 2024-04-22 11:36:12 +08:00 ![]() 好好好,这就看看实现 star 了 |
25 coderhxl OP @624144061 感谢您,https://coder-hxl.github.io/x-crawl/cn/guide/create-ai-application 这里可以免费领 api key |
26 fank99 2024-04-22 11:38:10 +08:00 ![]() 更像是自动的页面解析工具。。 |
![]() | 30 624144061 2024-04-22 11:41:16 +08:00 ![]() 可以考虑做成 fastgpt 或者 dify 的插件,服务于 aigc ,本身就有本地大模型的前提下,这个库就不用考虑成本了 |
![]() | 32 ayang23 2024-04-22 11:48:44 +08:00 ![]() 喂给 AI 一个或几个页面,生成一个解析函数,再交给传统爬虫,就能用得起了。 |
![]() | 33 triangle111 2024-04-22 11:48:55 +08:00 ![]() 之前写过一个 TF-IDF 提取的页面内容的,不过感觉页面解析会有很多广告/推荐阅读等干扰信息,如果不排除掉直接上 AI 感觉效果应该不是很好。 另外这种感觉要么更小白点,直接搞个 gui 界面,要么更专业点,比如对一些接口进行 hook ,判断哪些 headers cookie 是关键的。 |
37 coderhxl OP @triangle111 对的,所以最好两者结合起来用,可以先获取 Body ,然后对 Body 内的一些元素进行删除,特别是 script 和 svg 这两个的内容,内容越多消耗的资源也就越多,而且还没啥用。这样就能以最小的代价利用 AI 爬取数据。 |
39 barat 2024-04-22 11:58:44 +08:00 ![]() 主要还是依赖 puppeteer ,没有 puppeteer ,AI 也是白搭,但是 puppeteer 又很重 |
41 luozic 2024-04-22 12:00:26 +08:00 ![]() 解析数据这种,可以用 AI 来辅助生成代码; 爬虫的难的是稳定的能取到数据 |
42 coderhxl OP @luozic 对的,x-crawl 也有很多功能能稳定爬取到数据,像重试,代理,设备指纹... 可以瞧瞧这里 https://coder-hxl.github.io/x-crawl/cn/guide/#features |
43 coderhxl OP 感谢各位大佬的评论和提供的建议! |
![]() | 44 clemente 2024-04-22 12:16:25 +08:00 ![]() 爬虫要的是精确数据 不需要 AI |
45 MapleEve 2024-04-22 12:23:39 +08:00 ![]() 部署一个 dify ,传统爬虫加 AI 筛选 |
48 1018ji 2024-04-22 12:29:19 +08:00 ![]() 我选 ai |
![]() | 50 R4rvZ6agNVWr56V0 2024-04-22 12:40:55 +08:00 ![]() 对于本站人群而言,难的不是技术。 AI 仅仅是实现目的的工具,但是比起自己 coding 又太贵。 |
52 ashuai 2024-04-22 12:47:56 +08:00 ![]() AI 应该用来编写脚本,脚本失效时通知 AI 更新脚本 |
53 coderhxl OP @ashuai 也可以这么做,第一次爬取的时候缓存路径,后面让传统爬虫用缓存路径的,如果错误就调用 AI 重新获取路径再缓存。 |
55 CAze 2024-04-22 13:40:19 +08:00 ![]() 我现在都是这样做的,把要爬取的 html 网页丢给 gpt ,让他生成辅助函数,省钱又高效 |
![]() | 57 kevin1452 2024-04-22 13:49:05 +08:00 ![]() op 的思路很棒~ 不过我的理解只是适用于没有研发的人, 少量抓取数据.. 成本/速度/吞吐量都不太友好.. 粗略看下也没解决反爬的问题, ai 能在这方面帮上忙吗? |
58 coderhxl OP @kevin1452 目前咱们是将 HTML 交给 AI 通过自然语言提取数据,结合 AI 技术的爬虫能够更好地应对网站更新后类名结构改变的问题。像代理,设备指纹 x-crawl 也有,只是并非这篇文章的主题就没有写,https://coder-hxl.github.io/x-crawl/cn/guide/#features 可以瞧瞧这里 |
59 terranboy 2024-04-22 14:00:30 +08:00 ![]() 只是让 AI 分析下 HTML 结构 好像没啥意义 |
60 coderhxl OP @terranboy 依赖于固定的规则或模式来抓取网页数据的爬虫不也是这样,而且一旦网站进行更新,改变了原有的类名、标签或结构,传统爬虫就会因为无法识别新的元素而失效,导致数据抓取失败或错误。AI 辅助爬虫能够智能地分析和理解网页内容,从而更准确地定位并提取所需信息。通过自然语言处理等技术,它们能够理解网页的语义信息,从而更精确地定位所需数据,即使网站进行了更新,AI 辅助爬虫也能继续有效地抓取数据。当然成本也很高 |
![]() | 61 zhangfeiwudi 2024-04-22 14:11:07 +08:00 ![]() 有点意思,通过 AI 来做数据清洗,但是爬虫貌似 ai 参与不了 |
62 coderhxl OP @zhangfeiwudi AI 辅助爬虫,算是让 AI 筛选数据 |
66 CAze 2024-04-22 14:53:50 +08:00 ![]() @coderhxl 把 html 内容复制出来,并且告诉 gpt 我需要抓取哪些内容的关键字,并且给定一个 json 结构,一般能完成 90 %的工作了 |
![]() | 68 bubble21 2024-04-22 15:13:28 +08:00 ![]() 能提取(识别)图片里面的文字吗? |
![]() | 71 tinyzilan123 2024-04-22 15:31:07 +08:00 ![]() 把爬取到的内容给 AI 解析,直接返回需要的字段的意思吧 这样消耗的 token 会有不少吧,毕竟爬虫本身就是大量重复工作 |
72 coderhxl OP @tinyzilan123 对的,所以有另一种解决方案,二者结合,第一次爬取的时候缓存路径,后面让传统爬虫用缓存路径的,如果错误就调用 AI 重新获取路径再缓存。这样既不用担心网站更新导致爬虫工作失败,也避免浪费 token |
73 coderhxl OP @tinyzilan123 就看使用者怎么用了 |
![]() | 74 topang 2024-04-22 15:47:21 +08:00 ![]() 能用本地模型就好了 |
![]() | 76 jianyang 2024-04-22 15:56:07 +08:00 ![]() 有时候这些个 AI 并不是很听话、比如以 GPT3.5 来说、要求其回复格式后,它的回复也会有偶尔不听话的时候、GPT4.0 还算听话一些,可是用 4.0 做这玩意也太奢侈了,再就是效率太低了,这也是最关键的地方。 之前我也想过用 AI 辅助爬虫,我觉得最佳方式是让 AI 来写取关键信息的正则或者 xpath 等,程序还是常规爬区方式,主要用于非程序员或者偷懒写规则都挺好。 |
77 coderhxl OP @jianyang AI 主要是能够更好地应对网站更新后类名或结构改变的问题,并且 AI 还能根据要求筛选数据等操作。 |
![]() | 79 charslee013 2024-04-22 16:52:49 +08:00 ![]() 想请教一下下,采用其他平替的开源模型效果如何?比如说 01-Yi 34B 200K 这种支持超长文本输入的,在成本和推理速度上会不会更优秀一些? |
80 coderhxl OP @charslee013 这个得试了才能知道,如果有好的建议也会采纳的 |
81 changz 2024-04-22 17:56:36 +08:00 真有钱啊 |
82 teenthsch 2024-04-22 20:45:47 +08:00 我想说的是,ai 的输出不是都非常稳定吧 |
![]() | 83 gongquanlin 2024-04-23 09:00:22 +08:00 里面的浏览器指纹拉下来代码看了下,还是改的 UA 之类的内容 核心的 GPU 指纹、dns leak 、webrtc leak 都没有处理 |
87 coderhxl OP @gongquanlin 基本的设备指纹也够用 |
![]() | 89 hpan 2024-04-24 16:16:00 +08:00 @coderhxl 不错不错,不过我的意思是,能不能把图片直接下载回来,然后我要将爬取的内容发布到 wordpress 或者公众号,需要将图片文件上传上去,毕竟链接应用搞不好哪天就失效了 |
![]() | 90 charslee013 2024-04-24 18:18:40 +08:00 我自己测试了一下,在 qwen1.5 32B-Chat 模型下能够有效的提取 HTML 结构并且返回想要的结果,不一定要使用 GPT4 而且还省下了大量 Token 的费用,具体测试代码在这 https://gist.github.com/charSLee013/e3feebf457b3650e8c84095789da55d7 |
91 coderhxl OP @hpan 可以调用 crawlFile API 爬文件,https://coder-hxl.github.io/x-crawl/cn/guide/crawl-file |
92 coderhxl OP @charslee013 很 OK |