Java爬虫框架WebMagic

article/2025/10/17 3:08:10

WebMagic的架构设计参照了Scrapy,而实现则应用了HttpClient、Jsoup等Java成熟的工具。
在这里插入图片描述
WebMagic由四个组件(Downloader、PageProcessor、Scheduler、Pipeline)构成:

  • Downloader : 下载器
  • PageProcessor: 页面解析器
  • Scheduler: 任务分配、url去重
  • Pipeline:数据存储、处理

WebMagic数据流转的对象:

  • Request : 一个Request对应一个URL地址 。它是是PageProcessor控制Downloader唯一方式。
  • Page : 代表了从Downloader下载到的内容
  • ResultItems : 相当于一个Map,它保存PageProcessor处理的结果,供Pipeline使用。

爬虫引擎–Spider

  • Spider是WebMagic内部流程的核心,上面的四个组件都相当于Spider的一个属性,通过设置这个属性可以实现不同的功能。
  • Spider也是WebMagic操作的入口,它封装了爬虫的创建、启动、停止、多线程等功能

使用 Maven来安装WebMagic

<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.7.3</version>
</dependency>
<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-extension</artifactId><version>0.7.3</version>
</dependency>

在这里插入图片描述
WebMagic使用slf4j-log4j12作为slf4j的实现.如果你自己定制了slf4j的实现,需要项目中去掉此依赖。

<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-extension</artifactId><version>0.7.3</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion></exclusions>
</dependency>

如果不使用Maven的话,可以去http://webmagic.io中下载最新的jar包,下载之后进行解压,然后在项目中import即可。


开始开发第一个爬虫

项目中添加了WebMagic的依赖之后,即可开始第一个爬虫的开发了!
下面是一个测试,点击main方法,选择“运行”,查看是否正常运行。

package com.example.demo;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;public class DemoPageGet implements PageProcessor {private Site site = Site.me();@Overridepublic void process(Page page) {System.out.println(page.getHtml());}@Overridepublic Site getSite() {return site;}public static void main(String[] args) {Spider.create(new DemoPageGet()).addUrl("http://httpbin.org/get").run();}
}

编写基本的爬虫

在WebMagic里,实现一个基本的爬虫只需要编写一个类,实现PageProcessor接口即可。

这部分我们直接通过GithubRepoPageProcessor这个例子来介绍PageProcessor的编写方式。

PageProcessor的定制分为三个部分,分别是爬虫的配置、页面元素的抽取和链接的发现。

public class GithubRepoPageProcessor implements PageProcessor {// 部分一:抓取网站的相关配置,包括编码、抓取间隔、重试次数等private Site site = Site.me().setRetryTimes(3).setSleepTime(1000);@Override// process是定制爬虫逻辑的核心接口,在这里编写抽取逻辑public void process(Page page) {// 部分二:定义如何抽取页面信息,并保存下来page.putField("author", page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString());page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());if (page.getResultItems().get("name") == null) {//skip this pagepage.setSkip(true);}page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()"));// 部分三:从页面发现后续的url地址来抓取page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/[\\w\\-]+/[\\w\\-]+)").all());}@Overridepublic Site getSite() {return site;}public static void main(String[] args) {Spider.create(new GithubRepoPageProcessor())//从"https://github.com/code4craft"开始抓.addUrl("https://github.com/code4craft")//开启5个线程抓取.thread(5)//启动爬虫.run();}
}

追加请求的链接

先把链接通过正则匹配出来或者拼接出来,比如: page.getHtml().links().regex("").all()
再通过addTargetRequests方法 page.addTargetRequests(url) 则将这些链接加入到待抓取的队列中去。


爬虫的配置

Spider: 爬虫程序的入口,Spider的其他组件(Downloader、Scheduler、Pipeline)都可以通过set方法来进行设置。
在这里插入图片描述
Site: 对站点本身的一些配置信息,例如编码、HTTP头、超时时间、重试策略等、代理等,都可以通过设置Site对象来进行配置。
在这里插入图片描述
配置http代理,在0.7.1版本开始,WebMagic开始使用了新的代理APIProxyProvider,因为相对于Site的“配置”,ProxyProvider定位更多是一个“组件”,所以代理不再从Site设置,而是由HttpClientDownloader设置。

更多内容见官方文档。


页面元素的抽取

WebMagic里主要使用了三种数据抽取技术:

  • XPath
  • 正则表达式
  • CSS选择器
  • 另外,对于JSON格式的内容,可使用JsonPath进行解析

使用Pipeline保存结果

WebMagic用于保存结果的组件叫做Pipeline。

例如我们通过“控制台输出结果”这件事也是通过一个内置的Pipeline完成的,它叫做ConsolePipeline。

那么,我现在想要把结果用Json的格式保存下来,怎么做呢?

我只需要将Pipeline的实现换成"JsonFilePipeline"就可以了。

public static void main(String[] args) {Spider.create(new GithubRepoPageProcessor())//从"https://github.com/code4craft"开始抓.addUrl("https://github.com/code4craft").addPipeline(new JsonFilePipeline("./webmagic"))//开启5个线程抓取.thread(5)//启动爬虫.run();
}

模拟POST请求方法

0.7.1版本之后,废弃了老的nameValuePair的写法,采用在Request对象上添加Method和requestBody来实现。

Request request = new Request("http://xxx/path");
request.setMethod(HttpConstant.Method.POST);
request.setRequestBody(HttpRequestBody.json("{'id':1}","utf-8"));

HttpRequestBody内置了几种初始化方式,支持最常见的表单提交、json提交等方式。

在这里插入图片描述



http://chatgpt.dhexx.cn/article/hBCkwt8Q.shtml

相关文章

Java爬虫框架之WebMagic的学习总结

Java爬虫框架之WebMagic WebMagic概述特性架构四大组件数据流转对象控制爬虫运转的引擎Spider WebMagic的基本使用添加WebMagic的核心与扩展依赖爬虫实现 爬虫的编写过程实现PageProcessor爬虫配置抽取页面元素链接的发现 Selectable抽取元素抽取部分API获取结果的API 使用Pipe…

Java爬虫(三)-- 爬虫框架WebMagic的使用(以csdn页面为例)

一、WebMagic介绍 WebMagic是当前比较主流的一款Java爬虫框架。WebMagic项目代码分为核心和扩展两部分。核心部分(webmagic-core)是一个精简的、模块化的爬虫实现&#xff08;这部分提供非常简单、灵活的API&#xff0c;在基本不改变开发模式的情况下&#xff0c;编写一个爬虫…

JAVA爬虫框架

WebMagic框架 webmagic结构分为Downloader,pageProcessor,Scheduler,pipeline四大组件 并由splider将他们组织起来 这四大组件对应着爬虫生命周期中的下载 处理 管理 和持久化等功能,依赖 <dependency><groupId>org.springframework.boot</groupId>&l…

一款非常牛逼的Java爬虫框架(高度灵活可配置)

点击关注公众号&#xff0c;利用碎片时间学习 介绍 平台以流程图的方式定义爬虫,是一个高度灵活可配置的爬虫平台 特性 支持Xpath/JsonPath/css选择器/正则提取/混搭提取支持JSON/XML/二进制格式支持多数据源、SQL select/selectInt/selectOne/insert/update/delete支持爬取JS动…

svn 图标不显示 window10

今天打开电脑&#xff0c;同步代码的时候&#xff0c;发现&#xff0c;所有的目录svn的图标都不显示了。 早在几年前遇到过一次&#xff0c;通过clear可以恢复&#xff0c;可是这次几次clear也不管用。 然后&#xff0c;果断打开svn的设置。找到图标的设定。 设定如下&#…

win10 SVN图标不显示 已解决

原因&#xff1a; SVN的图标的排位顺序排在下面去了&#xff0c;导致其它图标占用了它的位置&#xff0c;也就是需要把Tortoise的位置提到上面来 解决办法&#xff1a; winR&#xff0c;输入regedit进入注册表 ctrlf搜索ShellIconOverlayIdentifiers&#xff08;这里需要一会…

SVN文件夹不显示图标解决方法

从svn服务器上将文件夹导出到本地文件之后&#xff0c;svn相关文件夹没有显示相应的图标&#xff0c;解决方法如下。对于SVN来说&#xff0c;因为每个图标都代表着不同的含义&#xff0c;预示着不同的状态&#xff0c;是指示灯的作用&#xff0c;如果没有正确的图标很可能造成数…

win10 SVN 图标不显示的解决办法

win10 SVN 图标不显示的解决办法 前言一、进入注册表二、设置文件名三、重启四、检查五、原理 前言 项目关联到 SVN 之后&#xff0c;一般情况下会有各种各样的状态图标。用来标注本地与 SVN 版本异同情况。但是有时候看不到示意图标&#xff0c;今天记录一下解决办法。 一、…

svn图标没有显示的解决办法

解决办法&#xff1a; 1.打开注册表 键盘输入winr 运行&#xff0c;打开 regedit 2.修改注册表 打开注册表的如下路径&#xff0c;将前几个名字重命名&#xff0c;把名字前面的空格去掉&#xff0c;修改完成后&#xff0c;重启电脑即可。 \HKEY_LOCAL_MACHINE\SOFTWARE\Micr…

SVN、GIT图标不显示解决方案

1、WIN R打开 “运行”&#xff0c;输入"regedit"&#xff0c;打开注册表&#xff0c;然后复制下面的地址到地址栏&#xff0c;如下&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers如上图…

svn的图标突然不显示了

摘抄 https://www.jianshu.com/p/92e8e1f345c0 摘抄 https://www.jianshu.com/p/92e8e1f345c0 摘抄 https://www.jianshu.com/p/92e8e1f345c0 作者&#xff1a;易冷zzz 链接&#xff1a;https://www.jianshu.com/p/92e8e1f345c0 来源&#xff1a;简书 著作权归作者所有。商业转…

解决 win11 git svn 图标问题

不要怀疑&#xff0c;我尝试过网上各种修复方式&#xff0c;也下载过各种修复工具&#xff0c;然都失败了。 别迟疑&#xff0c;以下是最有效的方法&#xff1a; 1、winr&#xff0c;输入 regedit 打开注册表&#xff1b; 2、找到路径【计算机\HKEY_LOCAL_MACHINE\SOFTWARE\M…

Mac SnailSVN不显示状态图标

snailsvn 官网 依次打开 系统设置 -> 扩展 -> 查找程序调整优先级(优先级按降序排序)在我的扩展中没有找到排序功能, 就暂时禁用掉了 有关文件夹操作的拓展. (作者的描述: 如果有多个 Finder 扩展同时监视同一文件夹, 会有优先级问题, 只有最先出现的扩展才能添加图标…

SVN图标消失解决方案

1、首先打开注册表 WINR组合键打开运行窗口&#xff0c;输入regedit命令并回车 2、打开注册表窗口后然后找到以下目录&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 3、将我们需要的文件前面加上空…

解决svn文件图标不显示

1.首先检查svn设置中是否设置图标显示 2.winR&#xff0c;输入regedit&#xff0c;调出注册表信息&#xff0c;按下CtrlF,在注册表里搜索“ShellIconOverlayIdentifiers”查看是否存在Tortoise文件&#xff0c;存在直接跳到第四步&#xff0c;不存在&#xff0c;进行第三步 3. …

【SVN】win10下SVN图标不显示

目录 一、现象 二、打开注册表 三、找到SVN路径 四、重启电脑 一、现象 windows10绿色ICON不显示 二、打开注册表 winR 打开运行&#xff0c;输入regedit 三、找到SVN路径 \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdent…

svn服务器调整显示图标修改,svn图标不显示可以通过调整Tortoise图标名称的字母顺序来解决...

svn图标不显示可以通过调整Tortoise图标名称的字母顺序来解决 发布时间&#xff1a;2013-06-02 17:28:13 作者&#xff1a;佚名 我要评论 我们可以调整Tortoise图标名称的字母顺序&#xff0c;来提高Tortoise的优先位置&#xff0c;因为Windows 内部就是安装名称的字母顺序…

win10系统解决Svn图标不显示的问题

win10系统解决Svn图标不显示的问题 1.问题 刚才对ruoyi的文件进行了修改但是没有任何的修改的符号。我该如何恢复图标呢&#xff1f; 2.解决策略-修改注册表 出现问题的原因&#xff1a;图标名称优先级不够,不能被使用 第一步&#xff1a;winR&#xff0c;输入regedit 第二…

svn图标不显示

svn图标不显示解决方案 输入win r,在命令行内输入regedit&#xff0c; 如下&#xff1a; 点击确定后&#xff0c;会进入到注册表界面 红框中的就是svn对应状态的图标名字&#xff0c;由于此列表中的名字是按照首字母顺序排布的&#xff0c;所以SVN的图标有可能排在后面&…

关于 SVN状态图标不显示的问题(只显示绿色钩匹配) 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://blog.csdn.net/qq21497936/article/details/124147620 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子(红模仿…