java爬虫抓取网页数据( Java世界中小白的我(瑟瑟发抖的状态), )

优采云 发布时间: 2021-09-23 22:08

  java爬虫抓取网页数据(

Java世界中小白的我(瑟瑟发抖的状态),

)

  

  前言

  作为Java世界中的一个小白种人,我(颤抖)对网络数据捕获一无所知。人是没有办法的。这时,我们的老板向我推荐了一款非常有用的爬虫框架webcollector。Webcollector是一个Java爬虫框架,它不需要配置,并且易于二次开发。它提供了一个简化的API,一个功能强大的爬虫程序只需少量代码即可实现。Webcollector Hadoop是Webcollector的Hadoop版本,支持分布式爬网。webcollector非常简单且易于使用。在这里,我想作为初学者与大家分享webcollector

  网络采集器的特性

  如果我们使用一个框架,我们最需要了解它的优点和缺点,以便更好地发挥它的作用。因为我只知道网络数据爬行的webcollector框架,所以我在Internet上找到了一些关于webcollector的信息并进行了分类

  web采集器与传统web爬虫的区别

  传统的网络爬虫倾向于将网站内容从一个站点下载到另一个站点。最小的数据单位是单个网页或文件。Web collector可以为定向采集设置爬网策略,并从网页中提取结构化信息

  webcollector与httpclient和jsup之间的差异

  Webcollector是一个爬虫框架,httpclient是一个HTTP请求组件,jsoup是一个网页解析器(具有内置的HTTP请求功能)

  一些程序员在单个线程中通过迭代或递归方法调用httpclient和jsup以获取数据采集,这也可以完成任务,但存在两个主要问题:

  单线程的速度比较慢,多线程爬虫的速度要比单线程爬虫快得多

  您需要编写自己的任务维护机制。该机制包括URL重复数据消除、断点爬网(即异常中断处理)和其他功能

  webcollector框架附带多线程和URL维护。用户在编写爬虫

  时不需要考虑线程池、URL去重和断点爬行等问题。

  webcollector可以处理的数量级

  目前,webcollector有*敏*感*词*和Hadoop版(webcollector Hadoop)。独立版本可以处理数千万个URL,这对于大多数精细数据采集任务来说已经足够了。Webcollector Hadoop可以处理比*敏*感*词*更多的问题,具体数量取决于集群的大小

  webcollector的遍历

  Webcollector使用粗略的宽度遍历,但是这里的遍历与网站拓扑树结构无关,用户不需要关心遍历方法。PS:作为小白,我对此有着深刻的理解

  当访问一个页面时,网络爬虫将从该页面浏览一个新的URL并继续爬网。WebCollector为探索新URL提供了两种机制:自动解析和手动解析。有关这两种机制的详细信息,请阅读以下示例中的代码注释

  webcollector的简单使用

  上面描述了一系列webcollector框架的特征。让我们简单地看看WebC采藏器在实际进程

  中的用法。

  1.首先,我们可以直接将webcollector的jar包导入到项目中,或者在POM文件中配置Maven依赖项,如下所示

  方法1:单击下载webcollector的jar包

  方法2:配置Maven依赖项,如下所示

  

cn.edu.hfut.dmic.webcollector

WebCollector

2.70

  2.创建一个实体类以从BroadthCrawler类继承并重写BroadthCrawler构造函数方法。在构造函数方法中设置基本的爬虫类属性,如设置*敏*感*词*集合、设置URL规则约束、设置断点爬网、设置线程数等(代码在下面)3.完成构造函数方法后,我们最需要的是实现方法public void visit(第页,crawldatams next)在界面访问者中。在该方法中,我们捕获所需的数据信息

  让我们举一个具体的例子来说明webcollector的爬行过程是如何实现的

  

  让我们首先创建类、构造函数和visit方法,如下所示

  package com.infosports.yuqingmanagement.crawler.impl;

import cn.edu.hfut.dmic.webcollector.model.CrawlDatum;

import cn.edu.hfut.dmic.webcollector.model.CrawlDatums;

import cn.edu.hfut.dmic.webcollector.model.Page;

import cn.edu.hfut.dmic.webcollector.plugin.berkeley.BreadthCrawler;

import cn.edu.hfut.dmic.webcollector.util.RegexRule;

public class SaoDongCrawler extends BreadthCrawler {

private final static String crawlPath = "/Users/luying/data/db/jianshu";

private final static String seed = "http://www.jianshu.com/u/e39da354ce50";

RegexRule regexRule = new RegexRule();

public SaoDongCrawler() {

super(crawlPath, false);

//添加爬取*敏*感*词*,也就是需要爬取的网站地址,以及爬取深度

CrawlDatum datum = new CrawlDatum(seed)

.meta("depth", "1");

addSeed(datum);

//设置线程数,根据自己的需求来搞

setThreads(2);

//添加正则表达式规则

regexRule.addRule("http://.*");

}

@Override

public void visit(Page page, CrawlDatums next) {

}

public static void main(String[] args) throws Exception {

//测试

SaoDongCrawler crawler = new SaoDongCrawler();

crawler.start(2);

}

}

  然后,我们打开WebDeveloper工具来查找抓取数据所需的元素和类,如下所示

  我们通过开发者工具找到了我们需要的元素,因此我们可以在访问方法中得到“nerve Sao Dong”一词,如下所示

   @Override

public void visit(Page page, CrawlDatums next) {

String name = page.select("a.name").text();

System.out.println(name);

}

  或者如果我们不想得到标签的值,只是想得到标签呢?然后通过标签得到标签的值

   @Override

public void visit(Page page, CrawlDatums next) {

Element nameElement = page.select("a.name").first();

String name = nameElement.text();

System.out.println(name);

}

  或者因为一个类的标签太多,我们需要通过上面的标签获得标签。我们应该怎么做?我们需要使用>以“name”标签为例

   @Override

public void visit(Page page, CrawlDatums next) {

Element nameElement = page.select("div.title>a.name").first();

String name = nameElement.text();

System.out.println(name);

}

  爬行结果如下所示

  

  总结

  本博客即将结束。webcollector基本上可以满足我自己的数据爬行需求。当然,毕竟我已经很久没有学习Java了,所以文章很多概念可能是模棱两可的。因此,如果有错误,我欢迎指导和批评。非常感谢

  参考文章:Java开源爬虫框架webcollector2.x入门教程-基本概念

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线