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

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

大家好,又见面了,我是你们的朋友全栈君。

爬虫框架介绍

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<Object> 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,表示从网页根目录下,查找<a class='titlelnk'></>,并获取其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爬虫系列(五)——今日头条文章爬虫实战

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/156729.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 如何用c语言调用c++做成的动态链接库

    今天在做东西的时候遇到一个问题,就是如何在C语言中调用C++做的动态链接库so文件如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明,那么你如何用c调用呢,别着急,本文通过一个小小

    2021年12月23日
  • App的宣传方式?

    ##1.线上渠道各大下载市场、应用商店、大平台、下载站的覆盖,线上推广的第一步是要上线,这是最基础的。无需砸钱,只需最大范围的覆盖,具体有:运营商渠道推广、第三方商店、手机厂商商店、积分墙推广、刷榜推广、社交平台推广、广告平台、换量推广等等很多方式。##2.线下推广主要是手机厂商预装、水货刷机、行货店面刷机、地推、线下活动推广等。##3.是线上宣传PR传播、事件营

  • win10 java jdk环境变量 配置

    win10 java jdk环境变量 配置以前只是大概说了以下jdk配置的注意事项,今天准备详细记录一下,万一以后用的着呢。当然这不是我的原创工作,只是把网上有的内容整合了以下。首先到官网将jdk的安装包下载下来,这是网址(http://www.oracle.com/technetwork/java/javase/downloads/index.html)进去以后会看到如下画面:点击左边的JavaPlatform(JD

  • mysql第一二三范式_第一范式、第二范式、第三范式[通俗易懂]

    mysql第一二三范式_第一范式、第二范式、第三范式[通俗易懂]第一范式、第二范式、第三范式第一范式如果一个关系模式R的所有属性都是不可分的基本数据项,则R1NF(即R符合第一范式)。两点:一、每个字段都只能存放单一值课程有两个值,不符合第一范式,可改为如下二、每笔记录都要能利用一个惟一的主键来加以识别第一范式、第二范式、第三范式第一范式如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF(即R符合第一范式)。两点:一、每个字段都只能存…

  • Drool的LHS和RHS

    Drool的LHS和RHSLHS:LeftHandSide,在Rete网络的左边部分,即规则的when部分。RHS:RightHandSide,在Rete网络的右边部分,即规则的then部分,可以用纯java代码写。rule”rule4″salience4when$stu:Stu(getName()==”张三”,gender==”male”)…

    2022年10月24日
  • php storm2021.10激活码(JetBrains全家桶)「建议收藏」

    (php storm2021.10激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlH2AE5L25Z5-eyJsa…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号