webmagic-scripts 使用指南:用 JavaScript/Ruby 脚本零代码编写 WebMagic 爬虫
后端网页爬虫【免费下载链接】webmagicA scalable web crawler framework for Java.项目地址https://gitcode.com/gh_mirrors/we/webmagic点击查看免费下载webmagic-scripts 是 WebMagic 爬虫框架Java中的一个实验性子模块它让你不写 Java 代码只用一段简单的脚本默认 JavaScript也支持 Ruby/JRuby即可完成页面抽取、链接发现与结果输出。本文以 webmagic-scripts/README.md 为主体结合模块源码完整讲解脚本 API、控制台命令行用法、多语言机制与底层执行原理读完你既能直接运行别人写好的脚本也能自己编写并流通一套抓取脚本。一、设计目标让爬虫脚本可编写、可流通模块的目标非常明确用简单脚本的方式编写爬虫为一些常用场景提供可流通的脚本——如果已经有人写好了脚本你直接使用即可无需下载依赖、编写 Java 代码也不需要经历编译打包流程。从仓库结构看该模块位于 webmagic-scripts其 pom.xml 依赖webmagic-core、webmagic-extension并通过maven-jar-plugin将主类配置为us.codecraft.webmagic.scripts.ScriptConsole这正是控制台一键运行能力的来源。它同时引入jruby、jython、commons-cli等依赖对应着多语言引擎支持与命令行参数解析。二、快速上手控制台运行一个抓取脚本原文档提供了一个控制台版本webmagic-console压缩包。解压后使用如下命令执行脚本java -jar -Dfile.encodingutf-8 webmagic-console.jar -f 脚本文件名 [-l 语言默认是javascript] [-t 线程数] [-s 抓取间隔毫秒] url1 url2 …各参数含义如下表参数含义默认值-f脚本文件名必填无-l脚本语言javascript或rubyjavascript-t抓取线程数1-s两次请求之间的抓取间隔毫秒1000位置参数起始 URL可多个url1 url2 …无例如对仓库中自带的 js/github.js 脚本可以这样执行java -jar -Dfile.encodingutf-8 webmagic-console.jar -f github.js -t 2 -s 0 https://github.com/code4craft该命令以 2 个线程、0 毫秒抓取间隔从https://github.com/code4craft开始抓取 GitHub 仓库数据。注意-Dfile.encodingutf-8用于保证脚本文件以 UTF-8 编码读取避免中文或特殊字符乱码。从源码看控制台入口 ScriptConsole.java 会依次完成解析命令行参数 → 用ScriptProcessorBuilder构建ScriptProcessor→ 配置Site设置sleepTime、重试次数 3接受状态码集合200/404/403/500/502→ 创建Spider并添加起始 URL →spider.run()启动抓取。若未提供任何 URL程序会打印用法提示并以-1退出。三、脚本 API三个核心函数与 page 对象脚本之所以简单是因为模块预先注入了少量开箱即用的辅助函数。JavaScript 的辅助函数定义在 js/defines.jsfunction $(str){ return page.getHtml().$(str).toString(); } function xpath(str){ return page.getHtml().xpath(str).toString(); } function urls(str){ links page.getHtml().links().regex(str).all(); page.addTargetRequests(links); }即脚本中可直接使用三个全局函数$(cssSelector)按 CSS 选择器抽取页面元素并转为字符串xpath(xpathExpr)按 XPath 表达式抽取页面元素并转为字符串urls(regex)从当前页面所有链接中匹配正则将命中的 URL 作为后续抓取目标对应 WebMagic 的目标请求机制实现自动翻页/发现新页面。Ruby 的辅助函数定义在 ruby/defines.rb除xpath、urls外还额外提供了css函数Python 的辅助函数定义在 python/defines.py同样提供xpath、css、urls。除了辅助函数脚本运行环境中还注入了两个关键对象见 ScriptProcessor.java 的process方法pageus.codecraft.webmagic.Page实例可直接调用page.getUrl()、page.getHtml()、page.addTargetRequests(...)等 WebMagic 原生方法configSite实例用于在脚本中调整抓取配置。在 JavaScript 中访问这些对象直接用page.xxx在 Ruby 中则通过$page等全局变量defines.rb 中的$page.getHtml()两种语言的约定略有差异使用时需注意。四、实例解析用 JavaScript 抓取 GitHub 仓库数据原文档给出了抓取 GitHub 仓库数据的 JavaScript 脚本即仓库中的 js/github.jsvar namexpath(//h1[classentry-title public]/strong/a/text()) var readmexpath(//div[idreadme]/tidyText()) var starxpath(//ul[classpagehead-actions]/li[1]//a[classsocial-count js-social-count]/text()) var forkxpath(//ul[classpagehead-actions]/li[2]//a[classsocial-count]/text()) var urlpage.getUrl().toString() if (name!null){ println(name) println(readme) println(star) println(url) } urls((https://github\\.com/\\w/\\w)) urls((https://github\\.com/\\w))逐行拆解字段抽取用xpath(...)分别抽取仓库名name、README 正文readme通过 WebMagic 的tidyText()提取干净文本、Star 数与 Fork 数页面 URLpage.getUrl().toString()拿到当前页面地址条件输出只有当name ! null即命中仓库详情页而非个人主页时才输出结果借助 JavaScript 引擎自带的println打印到控制台链接发现urls((https://github\\.com/\\w/\\w))匹配形如用户/仓库的详情页链接urls((https://github\\.com/\\w))匹配个人主页链接两者共同驱动 Spider 自动扩散抓取范围。这段脚本展示了脚本式爬虫的典型抽取-输出-发现三段式写法无需任何 Java 类定义直接交给控制台运行即可。仓库中还提供了另一个 JavaScript 示例 js/oschina.js它用$(div.BlogTitle h1)这种 CSS 写法抽取博客标题并通过urls(http://my\\.oschina\\.net/flashsword/blog/\\d)发现后续博客列表页同时演示了脚本内定义config对象可携带ua、sleepTime等配置项的写法。五、多语言支持Ruby/JRuby 与语言参数原文档说明选用 JavaScript 是因为用户面广选用 Ruby 则是因为Ruby 语法编写 DSL 更简洁。Ruby 版本ruby/github.rbname xpath //h1[classentry-title public]/strong/a/text() readme xpath //div[idreadme]/tidyText() star xpath //ul[classpagehead-actions]/li[1]//a[classsocial-count js-social-count]/text() fork xpath //ul[classpagehead-actions]/li[2]//a[classsocial-count]/text() url$page.getUrl().toString() puts name,readme,star,fork,url unless namenil urls (https://github\\.com/\\w/\\w) urls (https://github\\.com/\\w)Ruby 版本省略了函数调用括号xpath ...、urls ...的写法更接近自然语言 DSL输出使用 Ruby 的puts条件输出使用unless namenil。注意 Ruby 脚本中页面对象通过$page访问。多语言通过-l参数区分。例如执行这个 Ruby 脚本java -jar -Dfile.encodingutf-8 webmagic-console.jar -f github.rb -t2 -s0 -l ruby https://github.com/code4craft从 Params.java 的源码看语言别名映射为-l取值对应引擎js、javascript、JavaScript、JSJavaScriptruby、jruby、Ruby、JRubyJRuby此外虽然原文档只提到 JavaScript 与 Ruby仓库中实际上还内置了JythonPython语言实现Jython.java并有示例脚本 python/oschina.py。同时模块的 [pom.xml](https://link.gitcode.com/i/a1512246080de2e02b654296c0274dc0) 中还引入了 Kotlin 与 Groovy 支持[Github.kt](https://link.gitcode.com/i/6b9a9e42d296e437002be1031fdd38c3) 演示了 Kotlin 编写标准 PageProcessor 的写法[Github.groovy](https://link.gitcode.com/i/d2cd080be00e479623eb64456304ad22) 演示了 Groovy DSL 风格配置Site 与抽取规则的写法可见多语言是其设计主线之一。六、源码级原理ScriptEngine、EnginePool 与执行链路原文档说明这部分使用 Java 的 ScriptEngine 机制完成。深入源码可以看到完整的执行链路1. 处理器ScriptProcessorScriptProcessor.java 实现 WebMagic 的PageProcessor接口。process(Page page)方法从ScriptEnginePool借出一个引擎将page与config即Site注入ScriptContext.ENGINE_SCOPE然后调用language.process(engine, defines, script, page)执行辅助函数定义 用户脚本最后把引擎归还池中。2. 语言抽象LanguageLanguage.java 是抽象基类每个实现类绑定三要素引擎名称engineName、辅助函数定义文件defineFile如js/defines.js、结果收集文件gatherFile。Javascript.java 直接engine.eval(defines \n script)把辅助函数和用户脚本拼接后整体求值而 JRuby.java 会捕获求值返回的RubyHash将其迭代写入page.getResultItems()这就是 Ruby 脚本天然以字典形式返回结果的底层原因。3. 引擎池ScriptEnginePoolScriptEnginePool.java 按线程数预创建 N 个ScriptEngine通过ScriptEngineManager.getEngineByName(language.getEngineName())用LinkedBlockingQueue维护getEngine()出队、release()入队并用AtomicInteger统计可用数量——这保证了多线程抓取时每个线程有独立脚本引擎避免引擎状态互相污染。4. 测试佐证ScriptProcessorTest.java 分别用Javascript、JRuby、Jython三种语言加载 classpath 下的 oschina 脚本配合Spider.create(pageProcessor)实际抓取并校验执行流程该测试类标注Ignore属于需要联网环境的集成性测试。七、以库的形式集成ScriptProcessorBuilder除了控制台脚本能力也能作为 Java 库直接嵌入自己的程序。构建器 ScriptProcessorBuilder.java 提供链式 APIcustom()创建构建器默认语言为 JavaScript默认线程数 1language(Language)指定语言new Javascript()/new JRuby()/new Jython()scriptFromFile(fileName)从文件系统读取脚本scriptFromClassPathFile(fileName)从 classpath 读取脚本如js/oschina.jsscript(String)直接传入脚本源码字符串thread(int)设置引擎池线程数build()构建ScriptProcessor。参考 ScriptProcessorTest.java 的用法ScriptProcessor pageProcessor ScriptProcessorBuilder.custom() .language(new Javascript()) .scriptFromClassPathFile(js/oschina.js) .build(); pageProcessor.getSite().setSleepTime(0); Spider.create(pageProcessor).addUrl(http://my.oschina.net/flashsword/blog).setSpawnUrl(false).run();build()后得到的是标准PageProcessor可直接交给Spider.create(...)使用与 WebMagic 原有 API 无缝衔接。八、进阶命令行参数解析与日志级别控制台的参数解析由 CommandLineOption.java 实现基于 commons-cli实际支持 5 个选项选项作用-l语言交给Params.setLanguagefromArg做别名匹配-f脚本文件路径-s抓取间隔毫秒Integer.parseInt解析-t线程数Integer.parseInt解析-g日志级别交给 ConfigLogger.java 处理-g可取值包括debug、info、warn、trace、off、error大小写不敏感通过设置 SLF4J root logger 的日志级别来控制控制台输出详略便于排查脚本问题。从 Params.java 还可确认各参数默认值语言默认Javascript、线程数默认 1、抓取间隔默认 1000 毫秒与 README 描述一致。九、注意事项与实验状态原文档明确指出这个功能目前仍在实验阶段。因此在实际使用中需要了解以下前提与限制依赖运行时环境JavaScript 依赖 JDK 自带的 Nashorn 等 ScriptEngine 实现Ruby、Python 支持依赖jruby、jython依赖包见 pom.xml引擎是否可用取决于你的 Java 版本与 classpath脚本运行于沙箱之外脚本本质是在 JVM 内直接求值可访问注入的page、config对象请勿运行来源不可信的脚本实验性 API辅助函数集合、结果收集方式Ruby 的 Hash 返回、Python 的result字典在不同语言间并不完全统一升级 WebMagic 版本时脚本可能需要相应调整控制台方式仓库以webmagic-scriptsMaven 模块形式提供源码与构建配置主类为ScriptConsole如需控制台版 jar 包可自行构建该模块获取。总体而言webmagic-scripts 以脚本即爬虫的思路大幅降低了 WebMagic 的使用门槛让常用抓取场景沉淀为一行命令即可运行的脚本资产。无论是快速验证抽取规则、临时抓取数据还是向团队流通标准化的抓取脚本它都是一条值得尝试的轻量路径。赞分享后端网页爬虫【免费下载链接】webmagicA scalable web crawler framework for Java.项目地址https://gitcode.com/gh_mirrors/we/webmagic点击查看免费下载相关推荐WebMagic 爬虫框架使用教程WebMagic 爬虫框架使用教程 项目介绍 WebMagic 是一个简单灵活的 Java 爬虫框架它基于模块化设计易于扩展和维护。WebMagic 提供了后端网页爬虫终极指南用eSearch免费离线OCR轻松识别古籍竖排文字终极指南用eSearch免费离线OCR轻松识别古籍竖排文字 还在为古籍文献、书法作品的文字识别而烦恼吗传统OCR工具面对竖排文字时常常束手无策识别结果混乱桌面应用OCR屏幕录制视频处理图像处理从封禁到稳定WebMagic爬虫速率控制完全指南从封禁到稳定WebMagic爬虫速率控制完全指南 你是否曾因爬虫请求过于频繁导致IP被封禁是否遇到过目标网站反爬机制导致数据抓取不稳定本文将通过WebMa后端网页爬虫上一篇为什么你的六足机器人走不稳Hexapod5 的 5 个关键设计决策下一篇Altair桑基图终极指南Python流量数据可视化与路径分析指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

深入理解 wot-design-uni 的 wd-icon 图标组件:字体图标、自定义图标与图片图标的实现原理

深入理解 wot-design-uni 的 wd-icon 图标组件:字体图标、自定义图标与图片图标的实现原理

前端UI组件移动开发小程序 【免费下载链接】wot-design-uni 一个基于Vue3TS开发的uni-app组件库,提供70高质量组件,支持暗黑模式、国际化和自定义主题。 项目地址: https://gitcode.com/gh_mirrors/wo/wot-design-uni 点击查看 免费下载 wd-…

2026/10/14 20:26:45 阅读更多 →
纯血鸿蒙学生党三件套实测:拍照提取书页文字、课表签到备忘与本地电子书阅读

纯血鸿蒙学生党三件套实测:拍照提取书页文字、课表签到备忘与本地电子书阅读

开学有一阵了,手机里最高频的其实不是游戏和短视频,而是几类学习搭子:课上拍板书、课后整理资料、平时查教学周、睡前看两页书。这学期我把这些需求收拢到三款纯血鸿蒙应用上——「OCR扫描匣」「课程表管家」「爱阅读」。它们的共同点很明确&…

2026/10/14 20:25:44 阅读更多 →
火萤视频桌面 2026 下载使用教程:停服之后它还能怎么用

火萤视频桌面 2026 下载使用教程:停服之后它还能怎么用

火萤视频桌面是个把视频变成动态壁纸的工具:选一个视频文件,让它当你的桌面背景,动态地放着。 先说清它现在的状态,这一步很重要:最后版本是 v5.2.5.9,已经停止维护;原来那个域名也已经易主&am…

2026/10/14 20:25:44 阅读更多 →

最新新闻

AI高薪风口来袭!小白程序员如何抓住机遇,收藏这份学习指南?

AI高薪风口来袭!小白程序员如何抓住机遇,收藏这份学习指南?

文章主要介绍了AI行业的薪资现状,从实习生日薪5000元到年薪上亿,AI人才市场正在经历一场白热化的争夺战。文章指出,AI正在“入侵”每一个行业,人才缺口超过500万,普通人有机会分到一杯羹。文章建议普通人通过系统学习掌…

2026/10/14 21:14:53 阅读更多 →
大厂校招薪资大揭秘:小白程序员必看,收藏这份热门岗位薪资指南!

大厂校招薪资大揭秘:小白程序员必看,收藏这份热门岗位薪资指南!

本文汇总了字节跳动、腾讯、阿里巴巴等热门大厂校招薪资情况,涵盖前后端开发、AI/Agent方向、测开等岗位。数据来源于往届案例及公开信息,详细展示了不同级别薪资待遇及福利。文章提醒求职者在选择Offer时,不仅要关注总包,还要了解…

2026/10/14 21:14:53 阅读更多 →
如何快速上手cad-viewer:10分钟在浏览器中打开你的第一份DWG/DWG图纸

如何快速上手cad-viewer:10分钟在浏览器中打开你的第一份DWG/DWG图纸

前端3D渲染图形学 【免费下载链接】cad-viewer The world’s first fully web-based DXF/DWG viewer and editor that runs entirely in the browser — no backend server required. 项目地址: https://gitcode.com/gh_mirrors/cad/cad-viewer 点击查看 免费下载 …

2026/10/14 21:14:53 阅读更多 →
大模型高薪诱惑:年薪百万?小白必看收藏!

大模型高薪诱惑:年薪百万?小白必看收藏!

一篇顶会一作AIGC方向211本硕,某短视频大厂算法岗月入4.5万,实际年薪或超百万。但需注意,高薪并非保底,且薪资构成复杂,包括签字费、期权等。大厂算法岗普通档薪资为26k-36k,该岗位薪资远超普通水平&#x…

2026/10/14 21:14:53 阅读更多 →
AI工程师两大门派:传统算法与AI大模型应用开发,收藏这份入门指南!

AI工程师两大门派:传统算法与AI大模型应用开发,收藏这份入门指南!

文章介绍了AI领域的两大门派:传统算法工程师和AI大模型应用开发工程师。前者是“基建狂魔”,通过数学和编程解决实际问题,如精准推荐、最优路线规划等;后者是“场景魔术师”,利用现成大模型解决业务落地难题&#xff0…

2026/10/14 21:14:53 阅读更多 →
阿里云短信签名模板审核避坑指南与Python调用实战

阿里云短信签名模板审核避坑指南与Python调用实战

简介:本资源是一份面向Java开发者的企业级短信集成实战示例,聚焦阿里云短信服务(Dysmsapi)的快速接入与稳定调用,适用于用户注册验证、密码重置、订单通知等典型业务场景。压缩包共92个文件,含68个C#源码文…

2026/10/14 21:13:53 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →