题目:分布式框架下的商品价格抓取与分析系统实现
姓 名
导 师 2019年 5月 27 日
内容要求: 1. 课题背景 随着互联网的发展,互联网的竞争越来越激烈,企业对数据的实时掌控越来越重要。 网页上的价格抓取也是网络爬虫的一种应用。网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如: (1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通用搜索引擎所返回的结果包含大量用户不关心的网页。 (2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。 (3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据为力,不能很好地发现和获取。 (4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。 图(1)网络爬虫 为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。 1.聚焦爬虫工作原理以及关键技术概述 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。 图(2) 相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题: (1) 对抓取目标的描述或定义; (2) 对网页或数据的分析与过滤; (3) 对URL的搜索策略。 2. 设计进展状况 图(3) 设计进度已完成百分之六十五,通过上述框架生产者部分进行了改动,将生产者通过与套接字拆分成两个程序,第一个程序负责接收用户的url并进行校验是否合法,第二个程序接受第一个程序校验无误的url并进行查重放入刷新set表(底层是一颗红黑树,查重效率高)中并进行定时下载页面将页面数据放入消息队列。分布式的消息队列这里初期我考虑可以使用的是Kafka和redis这两种都是可以实现的,我用的是redis,后期我们可以进行比较哪个分布式消息队列对程序的效率影响较小。设计完成进度就到这里,至于消费者还在完成中。消费者的任务就是从消息队列中将网页数据中的商品价格和评论放入数据库中。本次设计就完成了。 3. 存在问题及解决措施 (1)初期进行设计的过程中没有考虑到生产者的一些具体细节,比如生产者如果使用一个进程去实现,第一,实现较为复杂,第二,运行效率偏低。 改进前: 图(4) 改进后: 图(5) (1)因为如果使用一个进程去实现改功能,需要使用多进程或者多线程,一个进程(线程)去接收处理用户输入的url,第二个进程去等待一个timewait(超时时间,因为我们需要规定一个周期,一个周期的去记录该商品的价格,到后期方便去观察我们关心的商品一段时间内的价格变化)。但是如果没有到timewait,说明该进程(线程)需要sleep,而另一个进程需要进行运行。这样的实现较为臃肿,复杂不直观,效率也会因为子进程的sleep而降低效率(cpu有一个唤醒的过程)。 (2)数据分析不能能准确的定位到问题,虽然我们将数据抓取进入了数据库,想要分析数据变化的原因,还是不能准确的定位其原因。因为例如我们关心的是苹果这个物品,从价格上我们能看出其波动,但是苹果的价格跟天气的影响是最直接的,这一季的气候好,收成好,苹果的价格就较为合理,收成不好,价格就会偏高,质量或者供大于求就会导致苹果价格偏低。但是我们不好去捕捉这个原因,这个原因不好去显示在网络上,这只是苹果,如果是其他商品呢?所以我们目前的解决办法是通过商品的评论去反映商品价格变动的原因去实现商品的价格变动分析。 4. 后期工作安排 (1)8~10周 :分布式消息队列Redis和Kafka效率的比较,提高程序效率。 (2)11~12周:完善消费者程序。 (3)13~15周:思考查询资料,去更好的实现商品价格的分析。 (4)15~17周:调试保证程序的平稳与准确性。 注:1、正文:宋体小四号字,行距22磅。
2、中期报告装订入毕业设计(论文)附件册。