2025年java爬虫系列(一)——爬虫入门[通俗易懂]

java爬虫系列(一)——爬虫入门[通俗易懂]爬虫框架介绍 Heritrix 优势 劣势 简单 demo 地址 crawler4j 优势 劣势 简单 demo 地址 WebMagic 优势 劣势 简单 demo 地址 快速入门 seimicrawler 项目地址 简单爬虫实现 导入项目 编写爬虫 启动爬虫 同系列文章 爬虫框架介绍 java 爬虫框架非常多 比如较早的有 Heritrix 轻量级的 crawler4j

爬虫框架介绍

Heritrix

优势

劣势

简单demo地址

crawler4j

优势

劣势

简单demo地址

WebMagic

优势

劣势

简单demo地址

快速入门

seimicrawler

项目地址

简单爬虫实现

导入项目

编写爬虫

启动爬虫

同系列文章

爬虫框架介绍

java爬虫框架非常多,比如较早的有Heritrix,轻量级的crawler4j,还有现在最火的WebMagic。
他们各有各的优势和劣势,我这里顺便简单介绍一下吧。

Heritrix

优势

java的第一批爬虫框架,拥有独立的后台页面,可以实现界面操作去爬去网页。

劣势

相对其他框架,代码相对臃肿,上手难度较高,解析网页不如其他框架灵活。

简单demo地址

https://github.com/a252937166/Heritrix

crawler4j

优势

代码相当轻量级,可实现多线程爬取,上手难度低。

劣势

封装程度太低,很多功能需要开发者自己封装实现,多线程下,很容易重复爬取相同资源。

简单demo地址

https://github.com/a252937166/crawler4j

WebMagic

优势

这框架我们公司在用,各方面都比较完美吧,上手难度低,社区活跃度也较高,有问题可以得到及时反馈。

劣势

没有持久层框架的封装,需要自己实现。

简单demo地址

这个框架我没有自己的demo,大家可以去开发者的GitHub看看
https://github.com/code4craft/webmagic

快速入门

seimicrawler

我这里推荐使用seimicrawler,个人感觉这个框架配合JsoupXpath,解析网页真心非常方便,而且框架整合了spring,用起来也很顺手。

项目地址

中文官网地址:http://seimicrawler.org/
官方Github地址:https://github.com/zhegexiaohuozi/SeimiCrawler
自己修改项目地址:https://github.com/a252937166/seimicrawler/

简单爬虫实现

导入项目

下载源码,解压后把demo目录的文件单独拿出来,project目录不用管,里面是这个框架的一些源码,demo直接maven依赖它就可以了。
以maven的形式,导入demo,等待jar拉取玩,项目不报错就说明导入成功了。

编写爬虫

打开crawlers文件夹,里面每个文件都是一个爬虫,我们可以学习一下Basic,这是开发者写的最简单的爬虫demo,其他的都可以以此内推。

package com.ouyang.crawlers;

import cn.wanghaomiao.seimi.annotation.Crawler;
import cn.wanghaomiao.seimi.def.BaseSeimiCrawler;
import cn.wanghaomiao.seimi.struct.Request;
import cn.wanghaomiao.seimi.struct.Response;
import cn.wanghaomiao.xpath.model.JXDocument;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/** * @author 汪浩淼 [et.tw@163.com] * @since 2015/10/21. */
@Crawler(name = "basic")
public class Basic extends BaseSeimiCrawler {

@Override
public String[] startUrls() {
//两个是测试去重的
return new String[]{

"http://www.cnblogs.com/","http://www.cnblogs.com/"};
}

@Override
public void start(Response response) {
JXDocument doc = response.document();
try {
List urls = doc.sel("//a[@class='titlelnk']/@href");
logger.info("{}", urls.size());
Map map = new HashMap();
map.put("ddd","aaa");
for (Object s:urls){
push(new Request(s.toString(),"getTitle").setParams(map));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void getTitle(Response response){
JXDocument doc = response.document();
try {
logger.info("url:{} {}", response.getUrl(), doc.sel("//h1[@class='postTitle']/a/text()|//a[@id='cb_post_title_url']/text()"));
//do something
} catch (Exception e) {
e.printStackTrace();
}
}
}

我来解释一下,response.document()表示把网页返回信息解析为一个JXDocument类,JXDocument支持JsoupXpath语法,比如//a[@class='titlelnk']/@href,表示从网页根目录下,查找,并获取其href的值。具体语法可以见http://www.w3school.com.cn/xpath/xpath_syntax.asp。

爬虫需要实现的具体业务,在start()方法里实现就行了,想要继续爬取新的网页,用push()实现,push()会新开启一个线程,push(new Request(s.toString(),"getTitle").setParams(map),表示爬取s.toString(),这个网页,并且回调getTitle()方法。

@Crawler(name = "basic")表示爬虫名字。

启动爬虫

可以写一个main函数,new 一个Semi()对象,调用其goRun()方法机型了。

public class Boot {
public static void main(String[] args){
Seimi s = new Seimi();
s.goRun("basic");
}
}

以上代码就表示启动basic爬虫,运行main函数就开始爬取网页了。

图(1)

同系列文章

java爬虫系列(二)——爬取动态网页
java爬虫系列(三)——漫画网站爬取实战
java爬虫系列(四)——动态网页爬虫升级版
java爬虫系列(五)——今日头条文章爬虫实战

编程小号
上一篇 2025-03-15 13:06
下一篇 2025-02-06 17:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/143435.html