webmagic

WebMagic

只谈情不闲聊 提交于 2020-12-29 06:51:55
WebMagic 是干嘛的? WebMagic 是一个 Java 平台上的开源爬虫框架,其设计参考了 Scrapy,实现则参考了 HttpClient 和 Jsoup。其由四大组件组成: Downloader,负责下载网页,使用 HttpClient。 PageProcessor,负责解析网页和链接发现,使用 Jsoup 和 Xsoup。 Scheduler,负责管理待抓取的 URL 和去重。 Pipeline,负责结果数据的持久化。 快速开始 (1)依赖引入 ext { versions = [ "web_magic": '0.7.3' ] } dependencies { // 这里有自己项目的日志实现 compile project(':base') compile("us.codecraft:webmagic-core:${versions.web_magic}") { exclude group: 'org.slf4j', module: 'slf4j-log4j12' // 移除默认的日志实现 } compile("us.codecraft:webmagic-extension:${versions.web_magic}") { exclude group: 'org.slf4j', module: 'slf4j-log4j12' } } (2)快速开始 爬取

JAVA 爬虫框架webmagic 初步使用Demo

放肆的年华 提交于 2020-11-19 06:16:09
一想到做爬虫大家第一个想到的语言一定是python,毕竟python比方便,而且最近也非常的火爆,但是python有一个全局锁的概念新能有瓶颈,所以用java还是比较牛逼的, webmagic 官网 https://webmagic.io/ 讲的非常详细,当然java比较优秀的框架还有很多不知这些 各类JAVA爬虫框架 Python中大的爬虫框架有scrapy(风格类似django),pyspider(国产python爬虫框架)。 除了Python,Java中也有许多爬虫框架。 nutch apache下的开源爬虫程序,功能丰富,文档完整,有数据抓取解析以及存储的模块。 它的特点是规模大。 heritrix 比较成熟 地址:internetarchive/heritrix3 · GitHub很早就有了,经历过很多次更新,使用的人比较多,功能齐全,文档完整,网上的资料也多。有自己的web管理控制台,包含了一个HTTP 服务器。操作者可以通过选择Crawler命令来操作控制台。 crawler4j UCI大学(加利福尼亚欧文分校)出品,简洁,古老,结构清晰 webmagic 国产,借鉴了scrapy,有pipeline,功能比较简单。Request也有meta属性,meta属性是一个字典,meta属性的value是Object类型 具体参考 https://www.cnblogs

SLF4J: Class path contains multiple SLF4J bindings.

梦想的初衷 提交于 2020-08-17 03:00:02
错误信息: SLF4J Warning: Class Path Contains Multiple SLF4J Bindings 错误原因: 我个人博客系统一个爬虫组件用到webmagic,而webmagic与lomback中的slf有冲突。 解决办法(webmagic排除相关依赖即可): <!-- webmagic--> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>${webmagic.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> 参考解决问题地址: SLF4J Warning: Class Path Contains Multiple SLF4J Bindings 来源: oschina 链接: https://my

webmagic 0.4.0的特性

梦想的初衷 提交于 2020-03-04 15:28:33
0.4.0已发布,新闻: http://www.oschina.net/news/45720/webmagic-0-4-0 webmagic 0.4.0将于本周内发布,新增特性: 大幅优化下载效率 升级HttpClient到4.3.1,重写了HttpClientDownloader的代码 #32 。 在http请求中主动开启gzip,降低传输开销 #31 。 修复0.3.2及之前版本连接池不生效的问题 #30 ,使用新的连接池机制,实现连接复用功能。 经测试,下载速度可达到90%左右的提升。 新增同步下载模式,对于简单任务更方便 <!-- lang: java --> OOSpider ooSpider = OOSpider.create(Site.me().setSleepTime(100), BaiduBaike.class); BaiduBaike baike = ooSpider.<BaiduBaike>get("http://baike.baidu.com/search/word?word=httpclient&pic=1&sug=1&enc=utf8"); System.out.println(baike); Spider部分: 重构了多线程的代码,修复几个线程安全问题。 可以主动设置当所有任务完成时,Spider是否终止。 可以设置初始的Request

记webmagic一个多线程问题排查和修复的过程

主宰稳场 提交于 2020-03-04 15:23:11
在webmagic的多线程抓取中有一个比较麻烦的问题:当Scheduler拿不到url的时候,不能立即退出,需要等到没抓完的线程都运行完毕,没有新url产生时,才能退出。之前使用Thread.sleep来实现,当拿不到url时,sleep一段时间再取,确定没有线程执行之后,再退出。 但是这种方式始终不够优雅。Java里面有wait/notify机制可以解决这种同步的问题。于是webmagic 0.4.0用wait/notify机制代替了之前的Thread.sleep机制。代码如下: while (!Thread.currentThread().isInterrupted() && stat.get() == STAT_RUNNING) { Request request = scheduler.poll(this); if (request == null) { if (threadAlive.get() == 0 && exitWhenComplete) { break; } // wait until new url added waitNewUrl(); } else { final Request requestFinal = request; threadAlive.incrementAndGet(); executorService.execute(new

springboot+webmagic+mysql

亡梦爱人 提交于 2020-03-03 19:31:16
此工程springboot整合webmagic爬虫框架,用mybatis将爬取的数据存入mysql pom文件 webmagic依赖 < ! -- 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 > mybatis逆向工程依赖 < ! -- mybatis core -- > < dependency > < groupId > org . mybatis . spring . boot < / groupId > < artifactId > mybatis - spring - boot - starter < / artifactId > < version > 2.1 .0 < /

Webmagic控制爬取深度

偶尔善良 提交于 2020-02-26 02:01:30
最近搞毕业设计,使用到了webmagic,但是才开始学习,对各个组件都还不是很熟悉。相信初学者都会遇到一个问题,那就是: 必须要让所有URL都处理完,才能结束整个爬虫过程吗? 当然,动动脑筋就知道当然不用,但是作为新手还是不知道怎么去控制这个爬虫,我一开始也是只会傻傻的设置一个最开始的url,然后写processs方法。但是经过不断的百度,渐渐加深了对webmagic的理解,也开始看起源码来了。 这两篇文章算是非常有启发的 https://www.zhihu.com/question/46394779 https://bbs.csdn.net/topics/391952114 经过源码的查看,大致理清楚了spider的执行流程:入口是Spider.run(); 之后spider首先下载(并不是真正的下载),生成一个page对象,里面包含了网页的信息, 这一部分使用的是downloader的组件,然后就是开始process,使用的是 processer组件,而我们编写的process方法就是在这里被调用的,而我们写的process方法里面,最终要的是addTargetRequest这个方法,使用这个可以再将新的爬取网页加入队列,由于有新的request加入队列,process方法会在下一次循环执行,process完之后就是pipeline,进行一些下载或者存储

大三上寒假15天--第10天

那年仲夏 提交于 2020-02-11 00:31:56
今天继续学习webmagic爬虫技术,组件包含: 1.Downloader Downloader 负责从互联网上下载页面,以便后续处理。 WebMagic 默认使用了 Apache HttpClient 作为下载工具。 2.PageProcessor PageProcessor 负责解析页面,抽取有用信息,以及发现新的链接。 WebMagic 使用 Jsoup 作为 HTML 解析工具,并基于其开发了解析 XPath 的工具 Xsoup 。 在这四个组件中, PageProcessor 对于每个站点每个页面都不一样,是需要使用者定制的部分。 3.Scheduler Scheduler 负责管理待抓取的 URL ,以及一些去重的工作。 WebMagic 默认提供了 JDK 的内存队列来管理 URL ,并用集合来进行去重。也支持使用 Redis 进行分布式管理。 除非项目有一些特殊的分布式需求,否则无需自己定制 Scheduler 。 4.Pipeline Pipeline 负责抽取结果的处理,包括计算、持久化到文件、数据库等。 WebMagic 默认提供了 “ 输出到控制台 ” 和 “ 保存到文件 ” 两种结果处理方案。 Pipeline 定义了结果保存的方式,如果你要保存到指定数据库,则需要编写对应的 Pipeline 。对于一类需求一般只需编写一个 Pipeline 。

学习使用Java的webmagic框架爬取网页内容

别等时光非礼了梦想. 提交于 2020-02-10 23:40:05
(一)使用前的配置:   1,使用IDEA创建web项目: https://blog.csdn.net/MyArrow/article/details/50824793   2,(1)添加依赖: <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> <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-selenium</artifactId> <version>0.7.3</version> </dependency>   (2)从GitHub官网下载webmagic的压缩包( https://codeload.github.com/code4craft/webmagic/zip/master ),将webmagic-core使用Module from

Java爬虫框架之WebMagic

旧城冷巷雨未停 提交于 2020-02-10 23:24:39
一、介绍 WebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。 二、如何学习 1.查看官网 官网地址为: http://webmagic.io/ 官网详细文档: http://webmagic.io/docs/zh/ 2.跑通hello world示例(具体可以参考官网,也可以参考博客) 我下面写的单元测试案例,可作为Hello World示例。 注意需要导入Maven依赖: <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>    3.带着一个目的 说说我的目的,最近我开发的博客系统,其中有个导入第三方博客的插件,这个插件比较简单就是一个搜索框,在对应的搜索框里面填写URL,点击搜索即可导入到自己的博客。 以导入博客园单篇文章为例: 下面是我的源代码(单篇文章导入