爬虫“拥抱大模型”,有没有搞头?

news2024/9/9 1:39:41

验证码坐标识别

数据采集过程中,可能会碰到各种风控策略。其中,验证码人机验证是较为常见的,点选类验证码需要识别出相应的坐标,碰到这种情况,一般要么自己训练模型,要么对接打码平台。现在也可以将识别工作交给大模型,我们来看看,相同的问法,各家大模型,在识别验证码坐标上的表现。

GPT-4o

问题,选出相似的,并给出坐标:

问题,找出鸟的位置:

在这里插入图片描述

通义千问

问题,选出相似的,并给出坐标:

问题,找出鸟的位置:

Kimi

Kimi 暂时还不能分析图片文件:

文心一言

问题,选出相似的,并给出坐标(说了一堆,不知道在说什么):

问题,找出鸟的位置:

腾讯元宝

问题,选出相似的,并给出坐标:

问题,找出鸟的位置:

综上所述,在图片识别方面,GPT 还是有着明显的优势,测试结果:GPT-4o > 腾讯元宝 > 通义千问 = 文心一言 > Kimi。

代码解混淆

今时不同往日,现在扣算法就会发现,很多网站的关键代码都经过了混淆处理,掩盖了真实的算法逻辑,增大了逆向的难度。常规的处理方法,要么硬跟,要么使用 AST 技术解混淆。

能解混淆自然是最好的,整体逻辑会清晰很多。接下来,我们用一段简单的经过 OB 混淆了的代码,交给各大模型,看看他们的处理能力如何。

原代码:

function hi() {     console.log("Hello World!");   }   hi();   

OB 混淆后:

OB 混淆测试网站:https://www.obfuscator.io

(function (_0x3e0fd2, _0x4d9507) {       var _0x35a832 = _0x49f9, _0x24b53a = _0x3e0fd2();       while (!![]) {           try {               var _0x384e17 = parseInt(_0x35a832(0x70)) / 0x1 + parseInt(_0x35a832(0x74)) / 0x2 * (parseInt(_0x35a832(0x71)) / 0x3) + parseInt(_0x35a832(0x77)) / 0x4 + -parseInt(_0x35a832(0x7b)) / 0x5 * (-parseInt(_0x35a832(0x78)) / 0x6) + parseInt(_0x35a832(0x6f)) / 0x7 * (-parseInt(_0x35a832(0x72)) / 0x8) + -parseInt(_0x35a832(0x79)) / 0x9 * (parseInt(_0x35a832(0x76)) / 0xa) + -parseInt(_0x35a832(0x75)) / 0xb * (parseInt(_0x35a832(0x7a)) / 0xc);               if (_0x384e17 === _0x4d9507) break; else _0x24b53a['push'](_0x24b53a['shift']());           } catch (_0x2befb5) {               _0x24b53a['push'](_0x24b53a['shift']());           }       }   }(_0x396e, 0xad666));      function hi() {       var _0x20619c = _0x49f9;       console[_0x20619c(0x73)]('Hello\x20World!');   }      function _0x49f9(_0x30b03a, _0x5089e4) {       var _0x396e7c = _0x396e();       return _0x49f9 = function (_0x49f929, _0x5aa706) {           _0x49f929 = _0x49f929 - 0x6f;           var _0x1df762 = _0x396e7c[_0x49f929];           return _0x1df762;       }, _0x49f9(_0x30b03a, _0x5089e4);   }      hi();      function _0x396e() {       var _0x20721f = ['26vRQjos', '352XPZRnp', '198430jvTVQT', '5553740GCzFmR', '6723558KGzclN', '9lDhkVw', '858180FVJhEP', '5eMHKUA', '5257oBQoZa', '397536fXbNYr', '145083vijLVr', '5504RSNMkb', 'log'];       _0x396e = function () {           return _0x20721f;       };       return _0x396e();   }   

腾讯元宝

var key = 'abcdefghijklmnopqrstuvwxyz';   function decrypt(str, key) {     var result = '';     for (var i = 0; i < str.length; i++) {       var index = key.indexOf(str[i]);       result += String.fromCharCode(index + 97);     }     return result;   }      (function (_0x3e0fd2, _0x4d9507) {       var messages = _0x3e0fd2();       var expression = '1+2 * 3+4+(-1)*5*(-1)*6+(-1)*7*(-1)*8+(-1)*9 * 10+(-1)*11';       var calculatedValue = eval(expression);          if (calculatedValue === _0x4d9507) {           hi();       } else {           console['log']('Invalid expression');       }   }(_0x396e, 0xad666));      function hi() {       console['log']('Hello World!');   }      function _0x49f9(_0x30b03a, _0x5089e4) {       var messages = _0x396e();       return decrypt(_0x30b03a, key);   }      function _0x396e() {       var encryptedMessages = [         'afZ_rFsbwj',         '352XPZRnp',         '198430jvTVQT',         '5553740GCzFmR',         '6723558KGzclN',         '9lDhkVw',         '858180FVJhEP',         '5eMHKUA',         '5257oBQoZa',         '397536fXbNYr',         '145083vijLVr',         '5504RSNMkb',         'log'       ];       return encryptedMessages;   }   

混淆解的较为清晰,但是 expression 有误,输出了 Invalid expression

文心一言

// 定义一个简单的数组来存储字符串     var strings = ['26vRQjos', '352XPZRnp', '198430jvTVQT', '5553740GCzFmR', '6723558KGzclN', '9lDhkVw', '858180FVJhEP', '5eMHKUA', '5257oBQoZa', '397536fXbNYr', '145083vijLVr', '5504RSNMkb', 'log'];      // 创建一个辅助函数来从数组中检索字符串     function getString(index) {       return strings[index - 0x6f]; // 减去偏移量0x6f     }      // 定义hi函数,使用辅助函数来输出Hello World     function hi() {       console[getString(0x73)]('Hello World!'); // getString(0x73) 相当于 getString(115),返回 'log'   }      // 调用hi函数     hi();   

解混淆后的代码较为简洁,但是偏移量不对,运行会报错:TypeError: console[getString(...)] is not a function

通义千问

// 创建一个数组,其中最后一个元素是 "log"   const array = [       '26vRQjos', '352XPZRnp', '198430jvTVQT', '5553740GCzFmR',       '6723558KGzclN', '9lDhkVw', '858180FVJhEP', '5eMHKUA',       '5257oBQoZa', '397536fXbNYr', '145083vijLVr', '5504RSNMkb', 'log'   ];      // 创建一个函数,它可以从数组中获取 "log" 并打印 "Hello World!"   function simplifiedHi() {       const log = array[12]; // 直接获取 "log"       console[log]('Hello World!');   }      // 调用简化后的 hi 函数   simplifiedHi();   

可以正常输出 Hello World!,且解混淆后的代码较为简洁。

Kimi

(function (dictionary, expectedValue) {       var decode = decodeFunction, array = dictionary();       while (true) {           try {               var result = parseInt(decode(0x70)) / 1 + parseInt(decode(0x74)) / 2 * (parseInt(decode(0x71)) / 3) + parseInt(decode(0x77)) / 4 + -parseInt(decode(0x7b)) / 5 * (-parseInt(decode(0x78)) / 6) + parseInt(decode(0x6f)) / 7 * (-parseInt(decode(0x72)) / 8) + -parseInt(decode(0x79)) / 9 * (parseInt(decode(0x76)) / 10) + -parseInt(decode(0x75)) / 11 * (parseInt(decode(0x7a)) / 12);               if (result === expectedValue) break;               else array.push(array.shift());           } catch (e) {               array.push(array.shift());           }       }   })(getDictionary, 0xad666);      function hi() {       var decode = decodeFunction;       console[decode(0x73)]('Hello World!');   }      function decodeFunction(index, offset) {       var dictionary = getDictionary();       return decodeFunction = function (index, offset) {           index = index - 0x6f;           var value = dictionary[index];           return value;       }, decodeFunction(index, offset);   }      hi();      function getDictionary() {       var dictionary = ['26vRQjos', '352XPZRnp', '198430jvTVQT', '5553740GCzFmR', '6723558KGzclN', '9lDhkVw', '858180FVJhEP', '5eMHKUA', '5257oBQoZa', '397536fXbNYr', '145083vijLVr', '5504RSNMkb', 'log'];       getDictionary = function () {           return dictionary;       };       return getDictionary();   }   

可以正常输出 Hello World!,解混淆后的代码很清晰。

GPT-4o

(function (_0x3e0fd2, _0x4d9507) {       var _0x35a832 = _0x49f9, _0x24b53a = _0x3e0fd2();       while (!![]) {           try {               var _0x384e17 = parseInt(_0x35a832(0x70)) / 0x1 + parseInt(_0x35a832(0x74)) / 0x2 * (parseInt(_0x35a832(0x71)) / 0x3) + parseInt(_0x35a832(0x77)) / 0x4 + -parseInt(_0x35a832(0x7b)) / 0x5 * (-parseInt(_0x35a832(0x78)) / 0x6) + parseInt(_0x35a832(0x6f)) / 0x7 * (-parseInt(_0x35a832(0x72)) / 0x8) + -parseInt(_0x35a832(0x79)) / 0x9 * (parseInt(_0x35a832(0x76)) / 0xa) + -parseInt(_0x35a832(0x75)) / 0xb * (parseInt(_0x35a832(0x7a)) / 0xc);               if (_0x384e17 === _0x4d9507) break; else _0x24b53a['push'](_0x24b53a['shift']());           } catch (_0x2befb5) {               _0x24b53a['push'](_0x24b53a['shift']());           }       }   }(_0x396e, 0xad666));      function hi() {       console.log('Hello World!');   }      function _0x49f9(_0x30b03a, _0x5089e4) {       var _0x396e7c = _0x396e();       return _0x49f9 = function (_0x49f929, _0x5aa706) {           _0x49f929 = _0x49f929 - 0x6f;           var _0x1df762 = _0x396e7c[_0x49f929];           return _0x1df762;       }, _0x49f9(_0x30b03a, _0x5089e4);   }      hi();      function _0x396e() {       var _0x20721f = ['26vRQjos', '352XPZRnp', '198430jvTVQT', '5553740GCzFmR', '6723558KGzclN', '9lDhkVw', '858180FVJhEP', '5eMHKUA', '5257oBQoZa', '397536fXbNYr', '145083vijLVr', '5504RSNMkb', 'log'];       _0x396e = function () {           return _0x20721f;       };       return _0x396e();   }   

甚至直接给出了原始代码:

可以看到,几家大模型都能判断出代码目的是 console.log("Hello World!");,不过在代码可用性、解混淆能力上,还是有差异的。个人觉得,GPT 的逻辑分析能力更强,通义千问、Kimi 解混淆的可读性更好。测试结果:GPT-4o = 通义千问 = Kimi > 腾讯元宝 = 文心一言。

文心一言的解答速度,明显慢于其他几家。

大模型最多只能解一些简单的混淆,想要处理复杂的混淆代码,还是需要自己学习 AST 相关技术。

数据清洗

数据采集过程中,会碰到很多数据存在于 HTML 源码当中,一般需要通过 XPath、正则表达式等,将所需的数据提取出来,有些处理起来会相对痛苦,那么现在,我们能否将这部分工作交给 AI 来清洗呢?接下来测试一下,各大模型能否将以下代码中的 价格 提取出来:

<div className="l">       <div className="lv" onMouseOver="this.className='lv lv1';" onMouseOut="this.className='lv';">           <ul className="u1 fontyh">               <li className="l1">                   <div className="bgys"><span className="s1"><a href="view1822.html" target="_blank">查看详情</a></span>无演示</span>                   </div>               <li className="l2">¥<strong>55.00</strong></li>               <li className="l3"><a href="view1822.html" title="xxx" target="_blank">xxx</a></li>               <li className="l4"><a href="../shop/view23.html" target="_blank" class="hui">xxx工作室</a><span><img src="../img/auto.gif"/></span></li>               <li className="l5">销量<span className="red">230</span>笔</li>   

腾讯元宝

文心一言

通义千问

Kimi

GPT-4o

可以看到,对于简单 HTML 源码的数据清洗,几家大模型都可以准确提取出目标内容,不过文心一言给出的代码又会报错 =.=。

Kimi 回答问题有时候需要等待:

在这里插入图片描述

当然,没什么是打钱解决不了的问题:

AI 爬虫框架

  • https://github.com/coder-hxl/x-crawl(Node.js)

    https://github.com/ScrapeGraphAI/Scrapegraph-ai(Python)

    https://github.com/unclecode/crawl4ai(Python)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959273.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ事务消息机制原理

RocketMQ工作流程 在RocketMQ当中&#xff0c;当消息的生产者将消息生产完成之后&#xff0c;并不会直接将生产好的消息直接投递给消费者&#xff0c;而是先将消息投递个中间的服务&#xff0c;通过这个服务来协调RocketMQ中生产者与消费者之间的消费速度。 那么生产者是如何…

领夹麦哪个牌子音质好?直播采访十大公认音质好的麦克风!

在追求内容品质的今天&#xff0c;音频质量成为了衡量作品成功与否的关键指标之一。对于频繁出镜的互联网从业者、短视频创作者及直播达人而言&#xff0c;一款性能卓越的无线领夹麦克风无疑是提升专业形象的得力助手。它不仅轻便易携&#xff0c;更能在复杂环境中捕捉纯净、清…

[QT开发_音乐播放器项目笔记01]

目录 一&#xff1a;常用类 26 QByteArray 是 Qt 框架中的一个类&#xff0c;用于处理字节数组。它提供了动态大小的字节数组&#xff0c;可以用于存储和操作二进制数据&#xff0c;比如文件内容、网络数据等。 QT项目记录&#xff1a; 一&#xff1a;常用类 26 QByteArray…

capl代码写法

CAPL是一种专门用于构建通信系统测试脚本的编程语言&#xff0c;全称为"Communication Access Programming.Language"。 CAPL是一种类C语言的解释性脚本语言&#xff0c;常用于CAN和LIN总线等通信系统的开发和测试中。 CAPL提供了丰富的库函数和API&#xff0c;可以用…

【Spring Cloud】Sleuth +Zinkin 实现链路追踪并持久化的解决方案

文章目录 前言链路追踪介绍Sleuth入门Sleuth介绍TraceSpanAnnotation Sleuth入门1、引入依赖2、修改配置文件3、网关路由配置4、演示 Zipkin的集成ZipKin介绍ZipKin服务端安装Zipkin客户端集成1、添加依赖2、添加配置3、访问微服务4、演示 Zipkin数据持久化使用mysql实现数据持…

vue3.0学习--创建项目,基于vite创建

vite 官网地址&#xff1a;https://cn.vitejs.dev/guide/ 1&#xff0c;执行创建命令 npm create vitelatest 2, cd my3d ---- my3d 是创建的项目名字 3&#xff0c;npm install ---- 安装需要的插件包 4&#xff0c;npm run format ---- 通常用于代码格式化 5, npm…

【Docker】Docker 的背景

一、容器技术发展史 1、Jail 时代 容器不是一个新概念或者新技术&#xff0c;很早就有了&#xff0c;只是近几年遇到了云计算&#xff0c;整个技术被彻底引爆了。 &#xff08;1&#xff09;1979 年贝尔实验室发明 chroot chroot 系统调用是在 1979 年开发第 7 版 Unix 期间…

Java多重循环控制,break,continue,return

目录 1.多重循环控制 执行步骤分析 案例演示 2.跳转控制语句-break 基本介绍 基本语法 示意图 注意事项和细节说明 练习题 3.跳转控制语句-continue 基本介绍 基本语法 示意图 细节案例分析和说明 4.跳转控制语句-return 介绍 1.多重循环控制 执行步骤分析…

django基于大数据的电影推荐系统-计算机毕业设计源码71246

目 录 摘 要 1 绪论 1.1 选题背景与意义 1.2研究现状 1.3研究内容 1.4 开发环境 1.5论文结构与章节安排 2 相关理论和技术 2.1 协同过滤算法 2.2 B/S体系结构介绍 2.3 Python爬虫技术 2.4 Django框架介绍 2.5 MySQL数据库 3 电影推荐系统系统分析 3.1 可行性分析…

微信小程序审核的一些总结记录

1、文字ocr识别工具&#xff0c;识别ocr文字&#xff0c;显示出文字 这么简单的东西&#xff0c;说是“涉及提供图片/音频/制作、剪辑服务”&#xff0c;这个工具代码也就下图几行&#xff0c;这是哪门子的图片编辑&#xff0c;别管它&#xff0c;直接重新提交审核。 2、个人不…

营销人看巴黎奥运会,看到了什么?

不同的人眼中的巴黎奥运会是不一样的&#xff1a;环保人士关注奥运场馆的绿色设计&#xff0c;以及赛事期间对可再生能源的利用&#xff1b;旅游博主用镜头捕捉巴黎奥运会每一个精彩瞬间&#xff1b;社会学家在巴黎奥运会看到多元文化的交流与融合…… 那么营销人在巴黎奥运会…

基于IDEA+MySQL+Springboot开发的医药进销存系统

基于IDEAMySQLSpringboot开发的医药进销存系统 项目介绍&#x1f481;&#x1f3fb; 1.创建数据库tedu_DIEMS&#xff0c;并导入数据库文件 2.导入项目&#xff0c;import-maven 3.修改application.properties的数据库IP地址、用户名和密码&#xff0c;改为自己的信息 4.找到Di…

嵌入式学习第11天——C语言选择结构

2024年7月29日 第11天 选择&#xff08;分支&#xff09;结构 分支结构&#xff1a;又被称为选择结构 概念 选择结构&#xff1a;根据条件成立与否&#xff0c;选择相应的操作。 条件构建 关系表达式&#xff1a;含有关系运算符的表达式&#xff08;>,<,>,<,!…

Oracle大师Roger Cornejo的推荐:使用ASH诊断Oracle解析故障

这篇文章被Oracle大师Roger Cornejo在X平台上推荐&#xff08;见下图&#xff09;&#xff0c;英文原文在&#xff1a; Diagnosing Parsing Issue with ASH 解析&#xff0c;尤其是硬解析&#xff0c;是非生产性操作&#xff0c;会消耗大量系统资源&#xff0c;导致库缓存争用…

文档数据库--MongoDB

文章目录 MongoDB介绍主要用途和特点对比关系型数据库和关系型数据库最大的不同什么时候使用MongoDBMongoDB数据结构MongoDB参考资料 MongoDB部署和访问二进制安装脚本安装MongoDB后台管理shellmongodb数据库命令mongo的helpdb.mycoll.help() mongosh的helpshow dbsuse dbnamem…

JAVA里的多线程综合练习题

练习1 package lx1;/*一共有1000张电影票,可以在两个窗口领取,假设每次领取的时间为3000毫秒, 要求:请用多线程模拟卖票过程并打印剩余电影票的数量*/ public class MyThread extends Thread {static int ticket 1000;//多个线程对象共享同一个电影票//第一种方式实现多线程&…

生成式:PolyGen: An Autoregressive Generative Model of 3D Meshes【附件】

论文:PolyGen: An Autoregressive Generative Model of 3D Meshes OBJ坐标变换: # Transpose so that z-axis is vertical.vertices = vertices[:, [2, 0, 1]]变换前: 对应数据:

springboot 微信消息推送 springboot sse推送

目录 一、springboot 微信消息推送 springboot sse推送 1、在 Spring 框架中实现 2、传统的 Servlet 中实现 一、springboot 微信消息推送 springboot sse推送 关于 SSE SSE 全程 Server Send Event&#xff0c;是 HTTP 协议中的一种&#xff0c;Content-Type 为 text/event…

MySQL存储引擎MyISAM和InnoDB

1.1MySQL存储引擎 1.1.1概述 1、什么是存储引擎 MySQL中的数据用各种不同的技术存储在文件&#xff08;或内存&#xff09;中。这些技术中的每一种都使用不同的存储机制、索引技巧、锁定水平并且提供广泛的、不同的功能和能力&#xff1b;通过选择不同的技术&#xff0c;能够…

JavaScript - 如何安装和配置Yarn包管理器

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有疑问和建议&#xff0c;请私信或评论留言&#xff01; 前言 Yarn是一个快速…