一、介绍

WebMagic是一款基于Java的开源网络爬虫框架,能够快速、灵活、高效地实现网络数据的爬取和抽取。WebMagic支持多线程、分布式、自动重试等特性,而且使用起来也非常方便。

二、优点

1. 快速:使用了NIO框架,能够高效地进行网络通信,提高爬虫效率。

2. 灵活:支持自定义爬取规则,能够适应不同的网站结构和数据格式。

3. 高效:采用了异步非阻塞的方式,同时支持多线程和分布式部署,提高爬虫的效率和稳定性。

4. 易用:提供了简单易懂的API,开发者能够快速上手。

三、四大组件

1. Downloader(页面下载组件):负责下载网页,可选择不同的下载器。

2. PageProcessor(页面处理组件):对下载的页面进行处理,包括解析页面,提取有用的数据等。

3. Pipeline(结果输出组件):负责对 PageProcessor 处理出的结果进行处理,可以将结果存储在文件、数据库、搜索引擎等地方。

4. Scheduler(URL管理器):用于管理待抓取的 URL 队列,保证数据的准确性和抓取效率,还支持使用Redis等分布式存储来实现分布式抓取。

四、使用场景

1. 数据采集:能够帮助企业或个人快速、高效地获取网络上的数据,用于数据挖掘、业务分析等领域。

2. 站点监测:能够监测特定网站的变化,如新闻、价格、商品等,帮助企业及时了解市场动态。

3. 网络抓取:WebMagic可以模拟人类浏览器从网站抓取页面和内容,在网站的每个层次上收集信息和数据,从而构建完整的产品目录和分类。

五、注意事项

1. 避免反爬虫机制:一些网站会设置反爬虫机制,需要通过模拟浏览器行为、使用代理等方式进行规避。

2. 控制爬取速度:过快的爬取速度会给网站带来负担,同时也容易被网站封禁IP。

六、补充内容

1. 多语言支持:WebMagic有Python和Scala等语言的版本,能够适应不同开发者的需求。

2. 爬虫任务调度:WebMagic能够与Quartz等任务调度框架结合使用,实现定时爬取数据的功能。

3. WebMagic支持多线程:能够利用多核CPU提高爬虫效率。

4. WebMagic支持多种功能:Cookie、代理等功能,能够模拟登录、避免反爬等操作。

5. WebMagic支持多种格式的数据存储:如MySQL、Redis、Elasticsearch等,方便后续数据处理。

6. 处理异常情况:WebMagic能够处理一些异常情况,如页面404、解析错误等,提高爬虫的健壮性。

七、实际场景

1. 案例一

    (1) 场景

爬取一个简单的页面。

    (2) 代码

pom.xml

<!--web magic-->
<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-core</artifactId><version>0.8.0</version>
</dependency>
<dependency><groupId>us.codecraft</groupId><artifactId>webmagic-extension</artifactId><version>0.8.0</version>
</dependency>

WebMagicCase1.java

/*** 简单的WebMagic爬取页面案例** @author wxy* @since 2023-05-30*/
public class WebMagicCase1 {public static void main(String[] args) {String[] urls = new String[]{"https://blog.csdn.net/qq_45871274/article/details/129162237"};new MyTask().execute(urls);}
}

MyTask.java

import us.codecraft.webmagic.Spider;/*** 爬取任务** @author wxy* @since 2023-05-30*/
public class MyTask {public void execute(String... url) {Spider spider = Spider// 指定页面解析器.create(new MyProcessor())// 指定爬取结果的处理器.addPipeline(new MyPipeline()).addUrl(url)// 创建3个线程.thread(3);//异步爬取spider.start();}
}

PageProcessor.java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.processor.PageProcessor;import java.util.ArrayList;
import java.util.List;/*** 页面解析** @author wxy* @since 2023-05-30*/
public class MyProcessor implements PageProcessor {@Overridepublic void process(Page page) {String pageStrHtml = page.getHtml().get();Document pageHtmlDocument = Jsoup.parse(pageStrHtml);List<String> contentList = new ArrayList<>();// 获取文章标题Elements title = pageHtmlDocument.select("h1[id=articleContentId]");// 写入标题文本内容page.putField("title", title.text());// 获取文章内容Elements contents = pageHtmlDocument.select("div[id=content_views]");for (Element content : contents) {for (Element element : content.children()) {// 写入每一个标签中的文本内容contentList.add(element.text());}// 写入文章全部文本内容page.putField("contents", contentList);}}@Overridepublic Site getSite() {//在爬取页面时对http请求的一些设置 例如编码、HTTP头、超时时间、重试策略 等、代理等return Site.me()// 重试次数.setRetryTimes(3)// 间隔时间.setSleepTime(100)// 设置超时时间.setTimeOut(10000);}
}

MyPipeline.java

import us.codecraft.webmagic.ResultItems;
import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.pipeline.Pipeline;import java.util.List;/*** 爬取结果的处理** @author wxy* @since 2023-05-30*/
public class MyPipeline implements Pipeline {@Overridepublic void process(ResultItems resultItems, Task task) {// 打印文章标题文本内容(在这里解析并保存至数据库)System.out.println("文章标题: ");System.out.println(resultItems.get("title").toString());// 打印文章内容文本内容List<String> contents = resultItems.get("contents");System.out.println("文章内容: ");for (String content : contents) {System.out.println(content);}}
}

最后将爬取的文章标题和内容输出:

探秘WebMagic:爬虫神器相关推荐

  1. java 使用webmagic 爬虫框架爬取博客园数据

    java 使用webmagic 爬虫框架爬取博客园数据存入数据库 学习记录   webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. ht ...

  2. beautifulsoup网页爬虫解析_Python爬虫神器:PyQuery,解析网页更简单,小白也能学会

    图/文:迷神 我们做python爬虫,通过requests抓取到内容就需要正则匹配,或者其他解析库解析内容.很多可能和我一样的人,都使用jquery的,那用的还是非常爽的.而pyquery库就是jQu ...

  3. python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...

    前言: 今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷 ...

  4. 5分钟学会Python爬虫神器autoscraper——自动化爬虫必备

    5分钟学会Python爬虫神器autoscraper--自动化爬虫必备 爬虫神器autoscraper介绍 安装 使用 批量抓取 查看结果 爬虫神器autoscraper介绍 今天给大家介绍一个非常智 ...

  5. magicmatch java_签名图片一键批量生成 使用Java的Webmagic爬虫实现

    使用Webmagic爬虫实现的签名档一键生成 实现原理 这里爬取的网址是http://jiqie.zhenbi.com/c/ 然后获取到里面提交数据,提交地址,在对这些数据进行Post提交 解析htm ...

  6. Python爬虫神器pyppeteer,对 js 加密降维打击

    爬虫神器pyppeteer,对 js 加密降维打击 pyppeteer 是对无头浏览器  puppeteer 的 Python 封装.无头浏览器广泛用于自动化测试,同时也是一种很好地爬虫思路. 使用 ...

  7. 开源爬虫神器,Playwright vs Puppeteer 对比,你应该选择哪个?

    Playwright是一个用于浏览器自动化的 Node.js库. Puppeteer也是一个用于浏览器自动化的 Node.js 库.让我们看看它们的历史由来,并考虑在实际使用应该如何选择.Angula ...

  8. 使用WebMagic爬虫框架爬取暴走漫画

    WebMagic是黄亿华先生开发的一款Java轻量级爬虫框架.我之所以选择WebMagic,因为它非常轻量级,可以学习爬虫的原理,而且用WebMagic非常容易进行功能扩展.也许你会听过另一个爬虫框架 ...

  9. WebMagic 爬虫框架问题描述

    问题描述 ❌Multiple bindings were found on the class path ❌Could not get a resource from the pool ✔️更换为Ht ...

  10. Python3 爬虫神器总结

    文章目录 前言 请求神器requests requests安装 requests简单示例 解析申请 Beautiful Soup Beautiful Soup安装 lxml安装 关注我的公众号,有 P ...

最新文章

  1. 2020 年的算法,降温之后会更好
  2. 常规流之块级格式化上下文(Block Formatting Contexts)
  3. SPOJ-VLATTICE Visible Lattice Points-莫比乌斯反演
  4. Singleton 和 Monostate 模式
  5. Spark精华问答 | Spark的计算方法是什么?
  6. 实作 ASP.NET 多笔数据离线编辑
  7. asp之ajax技术:responstext中文乱码
  8. C#对多态性的两种支持
  9. h5评论直接显示代码_全套H5教程免费学,让你0基础自学制作H5页面
  10. vue 引入html模板,vue单页面用script方式引入 使用模板时报错。 - 社区 - 妙味课堂...
  11. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.6.2 使用StAX解析器
  12. 使用智遥工作流,优化SAP请购流程
  13. 计算机网络——网络层:控制层面
  14. UIAutomatorViewer基础
  15. 如何下载B站视频,解决视频没有声音/音画分离问题(IDM+Potplayer)
  16. excel同一行中如何添加换行
  17. 【洛谷 P5850】 calc加强版(生成函数+NTT)
  18. Clickhouse 踩坑之旅 ---- MergeTree不合并分区的问题
  19. Lyndon的量化修炼之路——均线差与MACD联动策略(一)
  20. 畅想物联网安全未来,几维安全让万物互联更安全

热门文章

  1. 苹果付费分享《十三煞》
  2. 最近几天小说站的观察
  3. Codeforces Round #786 (Div.3) 题解 (CF786) [A-G]
  4. CF786-D ABC-SORT
  5. 软件测试增值式集成测试的三种方法,混合渐增式集成测试方法
  6. 用户不小心忘记了密码,造成无法登录Windows2000 时怎么办?
  7. 菜鸟教程C语言-14
  8. 第二届“红明谷”杯数据安全大赛Misc之一
  9. 【C/C++】基础知识之string字符串
  10. 基于IHS变换的图像融合