java spider爬虫_Java网络爬虫实操(2)

本篇文章继续介绍爬虫框架NetDiscovery的使用:如何发重复请求、如何用爬虫容器引擎驱动爬虫程序

1 )重复请求的场景举例

从2017年下半年开始,比特币、数字货币、虚拟币、区块链技术、去中心化等等新名词频频出现在媒体上,让人不想看到都很难

(本篇文章不研究数字货币是不是未来的发展方向)

风险提示:炒币有风险,入市需谨慎

b2222f3b5879

数据货币信息平台

找了一个数字货币的聚合信息平台,上面会定时刷新每种货币的价格。如果要写一个有实际价值的抓数据程序,那肯定希望这个程序能重复执行抓数据的动作吧。

目标任务:每隔一段时间去获取这个页面上的数字货币【EOS】的价格信息

b2222f3b5879

一种数字货币的价格信息

2 )代码实现

解析类

package com.sinkinka.parser;

import com.cv4j.netdiscovery.core.domain.Page;

import com.cv4j.netdiscovery.core.parser.Parser;

public class EosParser implements Parser {

@Override

public void process(Page page) {

String xpathStr = "//div[@class='coinprice']/text()";

String marketPrice = page.getHtml().xpath(xpathStr).get();

System.out.println("marketPrice=" + marketPrice);

}

}

执行方法

package com.sinkinka;

import com.cv4j.netdiscovery.core.Spider;

import com.cv4j.netdiscovery.extra.downloader.httpclient.HttpClientDownloader;

import com.sinkinka.parser.EosParser;

public class EosSpider {

public static void main(String[] args) {

String eosUrl = "https://www.feixiaohao.com/currencies/eos/";

long periodTime = 1000 * 600;

Spider.create()

.name("EOS")

.repeatRequest(periodTime, eosUrl)、

//下面这行代码要注意,要设置>=periodTime,想了解具体作用,可以去分析源代码

.initialDelay(periodTime)

.parser(new EosParser())

.downloader(new HttpClientDownloader())

.run();

}

}

执行结果

b2222f3b5879

演示数据

3 )爬虫容器引擎

数字货币有几百上千种,每种货币信息都在单独的页面上,如果要同时获取多种数字货币的信息,怎么处理?

依赖框架,有一种实现方法是:给每种数字货币定义一个爬虫程序,然后把爬虫程序放到容器里,统一交给爬虫引擎去驱动。

代码示例:

package com.sinkinka;

import com.cv4j.netdiscovery.core.Spider;

import com.cv4j.netdiscovery.core.SpiderEngine;

import com.cv4j.netdiscovery.extra.downloader.httpclient.HttpClientDownloader;

import com.sinkinka.parser.EosParser;

public class TestSpiderEngine {

public static void main(String[] args) {

//爬虫容器引擎

SpiderEngine engine = SpiderEngine.create();

//爬虫程序1

String eosUrl = "https://www.feixiaohao.com/currencies/eos/";

long periodTime1 = 1000 * 5;

Spider spider1 = Spider.create()

.name("EOS")

.repeatRequest(periodTime1, eosUrl)

.parser(new EosParser())

.downloader(new HttpClientDownloader())

.initialDelay(periodTime1);

engine.addSpider(spider1);

//可以增加多个爬虫到容器中,

// engine.addSpider(spider2);

// ......

engine.httpd(8088); //这一行要注意,通过接口可以获取访问爬虫容器内的状态

engine.runWithRepeat();

}

}

{

"code":200,

"data":[

{

"downloaderType":"HttpClientDownloader", //用的哪个下载器

"leftRequestSize":0, //队列中还剩的request数量

"queueType":"DefaultQueue", //队列类型:jdk(DefaultQueue)、redis、kafka

"spiderName":"EOS", //爬虫的名字,在引擎里唯一

"spiderStatus":1, //1:运行 2:暂停 4:停止

"totalRequestSize":1 //加入到队列中的request总数量,减去上面的leftRequestSize,等于该爬虫已经完成的重复请求次数

}

],

"message":"success"

}

4 )总结

本篇简单介绍了NetDiscovery中发重复请求这个功能。这就是框架的价值,如果不用框架,自己再去实现的话,要多写一些代码的。

爬虫引擎还有很多功能,敬请期待。

今天是西方情人节,祝天下有情人节日快乐!

祝大家身体健康、家庭和睦、工作顺利!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值