首页 > 编程知识 正文

大数据数据采集的意义,大数据下传统数据采集必要性

时间:2023-05-05 07:44:36 阅读:53116 作者:4760

一方面如何收集大数据1.1系统日志收集通过大数据收集系统日志的工具,目前使用最广泛的是Hadoop的Chukwa、ApacheFlumeAFacebook的Scribe和LinkedIn的Kafka 在这里主要学习Flume。

Flume是一个可靠的分布式收集、聚合和传输系统。 Flume支持自定义日志系统中的不同数据发件人以收集数据、轻松处理数据以及写入收件人(如文本和HDFS )。

Flume的核心其实是从数据源收集数据,然后将收集到的数据发送到指定的目的地……

1.2网络采集大数据网络采集是指通过在网络爬虫和网站上发布API等方法,从网站上获取大数据信息。 该方法可以从网页中提取非结构化数据,存储为统一的本地数据文件,并结构化存储。 支持收集照片、音频、视频等文件和附件。

通常,互联网爬虫工具包括分布式互联网爬虫工具(Nutch )、Java互联网爬虫工具(Crawler4j、WebMagic、WebCollector )、非Java互联网爬虫工具

1.2.1网络爬虫原理网络爬虫其实是一个按照一定规则自动抓取web信息的程序或脚本。

网络爬虫自动收集所有可访问的页面内容,为搜索引擎和大数据分析提供数据源。 通常有三种功能:数据收集、数据处理和数据存储。网络爬虫是如何爬数据的?这是因为网页除了用户可以浏览的文字信息外,还包含超链接信息,通过获取超链接URL并辅助一定的算法,爬虫可以获得数据

1.2.2爬虫工作流的基本情况是:爬虫首先获取种子URL的一部分,将这些URL放入待捕获的URL队列中,从队列中取出待捕获的URL,解析DNS获取主机IP,将URL放入网页最后,将这些URL放入捕获的队列中,这样循环。

1.2.3爬虫捕获策略网上页数以亿为单位,问题在于应该用什么策略爬这些页面的数据,大致可分为几种类型。

常用爬虫,也称为网络爬虫,主要收集门户网站搜索引擎和大型web服务提供商的数据,分为深度优先策略和广度优先策略。 “聚焦网络爬虫”(也称为主题网络爬虫)是指在与预定义主题相关的页面上选择性滚动的网络爬虫。 也就是说,有文本、图像等明确的主题。 ……要聚焦网络爬虫,1 .基于内容,2 .基于链接结构,3 .基于扩展学习(,4 .基于上下文)? )增量网络爬虫是指获取的目标页面是尽可能新的页面。 深层网络爬虫将传统搜索引擎可以索引的页面划分为表层页面,深层网络爬虫获取的页面是除此之外的“深层页面”。 1.3具体爬虫工具1.3.1Scrapy Scrapy是为获取网站数据和提取结构性数据而编写的APP应用框架,可应用于数据挖掘、信息处理或历史数据存储等一系列程序

虽然Scrpay非常强大,但它适用于Python,本人正好没有接触Python,这一部分请先理解……

1.3.2Crawler4j、WebMagic、WebCollector三个都是JAVA的独立爬虫开源框架,区别可能在于算法和调度等方面? 我只搜索了这个,但是没有找到。 姑且这么想吧。

在这里,用WebMagic制作一下Demo吧!

1.4跑完网络幻像百度后,找到了网络幻像的官方文档

让我们按照中的例子进行测试:

首先新建maven项目。 网络项目也可以吗? 要是maven就好了。 是的,当然,即使不是maven,也可以手动部署jar包,但为了方便,我们还是使用maven吧。 官网上有官方的简单例子。 publicclassgithubrepopageprocessorimplementspageprocessor (/部分1 )用于捕获站点的配置,包括编码、捕获间隔和重试次数)专用process是自定义爬虫逻辑的中心界面,其中提取逻辑公共语音流程(public void process )//第2部分:定义如何提取页面信息,page.putfield )、page page.getHtml ).XPath ) )/H1(@class='entry-titlepublic ' )/strong/a/text ) ) ) ) if (page } page.put

Field("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()")); // 部分三:从页面发现后续的url地址来抓取 page.addTargetRequests(page.getHtml().links().regex("(https://github\.com/[\w\-]+/[\w\-]+)").all()); } @Override public Site getSite() { return site; } public static void main(String[] args) { Spider.create(new GithubRepoPageProcessor()) //从"https://github.com/code4craft"开始抓 .addUrl("https://github.com/code4craft") //开启5个线程抓取 .thread(5) //启动爬虫 .run(); }}

运行走一波,发现报错了……

log4j:WARN No appenders could be found for logger (us.codecraft.webmagic.scheduler.QueueScheduler).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

一看就是log4j的问题,尝试添加配置文件log4j.properties,再次运行,嗯?居然还是报错了……

好吧,看一看官方文档,原来作者说了:

WebMagic使用slf4j-log4j12作为slf4j的实现.如果你自己定制了slf4j的实现,请在项目中去掉此依赖。

ok,让我来替换成普通的log4j依赖:

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency>

果不其然,这几部操作之后就能正常运行了,点击run跑起来!竟然又有了新的问题……

[us.codecraft.webmagic.Spider] - Spider github.com started![us.codecraft.webmagic.downloader.HttpClientDownloader] - download page https://github.com/code4craft error

难道是网络的“不可抗力的问题”,所以才失败了?

继续寻找原因
最后在官方文档上找到了另外一个demo,尝试使用: public class SinaBlogProcessor implements PageProcessor { public static final String URL_LIST = "http://blog\.sina\.com\.cn/s/articlelist_1487828712_0_\d+\.html"; public static final String URL_POST = "http://blog\.sina\.com\.cn/s/blog_\w+\.html"; private Site site = Site .me() .setDomain("blog.sina.com.cn") .setSleepTime(3000) .setUserAgent( "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31"); @Override public void process(Page page) { //列表页 if (page.getUrl().regex(URL_LIST).match()) { page.addTargetRequests(page.getHtml().xpath("//div[@class="articleList"]").links().regex(URL_POST).all()); page.addTargetRequests(page.getHtml().links().regex(URL_LIST).all()); //文章页 } else { page.putField("title", page.getHtml().xpath("//div[@class='articalTitle']/h2")); page.putField("content", page.getHtml().xpath("//div[@id='articlebody']//div[@class='articalContent']")); page.putField("date", page.getHtml().xpath("//div[@id='articlebody']//span[@class='time SG_txtc']").regex("\((.*)\)")); } } @Override public Site getSite() { return site; } public static void main(String[] args) { Spider.create(new SinaBlogProcessor()).addUrl("http://blog.sina.com.cn/s/articlelist_1487828712_0_1.html") .run(); }}

嗯,这个demo爬的是博客的数据,没有了“不可抗力的问题”,果然这回就成功了。

总结

数据的采集大概就是通过系统日志获取和通过爬虫获取这两种,虽然试验了爬虫中的WebMagic方式,不过也只是简单的跑起来而已,中间想要修改代码达成自己想要的结果,不过因为时间问题,而且其中用到的正则表达式我并没有系统学过,所以也只能遗憾收手,将这个念想留到以后再继续实现。

参考

WebMagic官方文档

C语言中文网

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。