探秘WebMagic:爬虫神器
一、介绍
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:爬虫神器相关推荐
- java 使用webmagic 爬虫框架爬取博客园数据
java 使用webmagic 爬虫框架爬取博客园数据存入数据库 学习记录 webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. ht ...
- beautifulsoup网页爬虫解析_Python爬虫神器:PyQuery,解析网页更简单,小白也能学会
图/文:迷神 我们做python爬虫,通过requests抓取到内容就需要正则匹配,或者其他解析库解析内容.很多可能和我一样的人,都使用jquery的,那用的还是非常爽的.而pyquery库就是jQu ...
- python contains类似函数_五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码)...
前言: 今天为大家带来的内容,是五步教会你用python爬虫神器PyQuery!(内含详细步骤和代码),在这里还是要啰嗦下,为了有更好的观赏性,大部分代码用图片的方式呈现出来!喜欢的话不忘点赞关注不迷 ...
- 5分钟学会Python爬虫神器autoscraper——自动化爬虫必备
5分钟学会Python爬虫神器autoscraper--自动化爬虫必备 爬虫神器autoscraper介绍 安装 使用 批量抓取 查看结果 爬虫神器autoscraper介绍 今天给大家介绍一个非常智 ...
- magicmatch java_签名图片一键批量生成 使用Java的Webmagic爬虫实现
使用Webmagic爬虫实现的签名档一键生成 实现原理 这里爬取的网址是http://jiqie.zhenbi.com/c/ 然后获取到里面提交数据,提交地址,在对这些数据进行Post提交 解析htm ...
- Python爬虫神器pyppeteer,对 js 加密降维打击
爬虫神器pyppeteer,对 js 加密降维打击 pyppeteer 是对无头浏览器 puppeteer 的 Python 封装.无头浏览器广泛用于自动化测试,同时也是一种很好地爬虫思路. 使用 ...
- 开源爬虫神器,Playwright vs Puppeteer 对比,你应该选择哪个?
Playwright是一个用于浏览器自动化的 Node.js库. Puppeteer也是一个用于浏览器自动化的 Node.js 库.让我们看看它们的历史由来,并考虑在实际使用应该如何选择.Angula ...
- 使用WebMagic爬虫框架爬取暴走漫画
WebMagic是黄亿华先生开发的一款Java轻量级爬虫框架.我之所以选择WebMagic,因为它非常轻量级,可以学习爬虫的原理,而且用WebMagic非常容易进行功能扩展.也许你会听过另一个爬虫框架 ...
- WebMagic 爬虫框架问题描述
问题描述 ❌Multiple bindings were found on the class path ❌Could not get a resource from the pool ✔️更换为Ht ...
- Python3 爬虫神器总结
文章目录 前言 请求神器requests requests安装 requests简单示例 解析申请 Beautiful Soup Beautiful Soup安装 lxml安装 关注我的公众号,有 P ...
最新文章
- 2020 年的算法,降温之后会更好
- 常规流之块级格式化上下文(Block Formatting Contexts)
- SPOJ-VLATTICE Visible Lattice Points-莫比乌斯反演
- Singleton 和 Monostate 模式
- Spark精华问答 | Spark的计算方法是什么?
- 实作 ASP.NET 多笔数据离线编辑
- asp之ajax技术:responstext中文乱码
- C#对多态性的两种支持
- h5评论直接显示代码_全套H5教程免费学,让你0基础自学制作H5页面
- vue 引入html模板,vue单页面用script方式引入 使用模板时报错。 - 社区 - 妙味课堂...
- 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.6.2 使用StAX解析器
- 使用智遥工作流,优化SAP请购流程
- 计算机网络——网络层:控制层面
- UIAutomatorViewer基础
- 如何下载B站视频,解决视频没有声音/音画分离问题(IDM+Potplayer)
- excel同一行中如何添加换行
- 【洛谷 P5850】 calc加强版(生成函数+NTT)
- Clickhouse 踩坑之旅 ---- MergeTree不合并分区的问题
- Lyndon的量化修炼之路——均线差与MACD联动策略(一)
- 畅想物联网安全未来,几维安全让万物互联更安全