网购比较系统的设计与实现
- 上传者:诸葛月月
- 文件大小:1096 (KB)
- 文档格式:.docx
文档分类: 计算机与科学
关于本文
- 本文标题:网购比较系统的设计与实现.docx
- 链接地址:https://wk.sbvv.cn/view/21929.html
- 内容摘要:重庆大学网络教育学院毕业设计(论文)题目学生所在校外学习中心批次层次专业学号学生指导教师起止日期摘要当用户需要购买一件商品时他需要面临一个选择,即在哪个购买自己想要的商品,在这个时候用户会在各大电商中逐一搜索自己想要购买的商品,哪个提供的商品性价比最高,用户就会选择这个进行交易。开发一个网购比较系统是很有必要的。本文通过采用实时抓取的方法来实现网购的商品比对。通过对淘宝,京东以及亚马逊三大网购平台数据的捕捉,并利用JSP技术生成动态浏览器,使用者能够在搜索页面中找到相关商品的信息。本文详细描述了系统的设计思路以及实现步骤。关键词:网购;货品比较;网站设计目录摘要I1。前言12。系统设计方案12。1两种系统设计方案12。1。1方案22。1。2方案32。2方案选择43。系统整体设计44。系统详细设计与实现54。1系统功能简介54。2数据爬取层设计与实现64。2。1爬取商品列表64。2。2爬取商品基本信息84。2。3爬取分页相关信息134。3业务逻辑层和视图层设计与实现154。3。1业务逻辑层154。3。2视图层16结论20参考文献201。前言当用户需要购买一件商品时他需要面临一个选择,即在哪个购买自己想要的商品,在这个时候用户会在各大电商中逐一搜索自己想要购买的商品,哪个提供的商品性价比最高,用户就会选择这个进行交易。对使用者来说,寻找和对比产品确实是一项耗费时间和精力的工作,他们经常在各大电子商务平台之间转换,无法直观地看到这些产品之间的区别。除此之外,使用者经常是在一些较大的电子商务平台如淘宝、京东等找自己需求的产品,而没有去注意到其他小型的电子商务平台,使用者在不知情的情况下失去了一些要紧的数据。针对上述问题,一个价格比较系统的开发是非常紧要的。当使用者对一款产品有需求的时候,他只要在价格比较系统中搜寻他需要的产品。这个系统将会给使用者在相同的页面上展示不同平台直接这款产品的信息,使用者就能够直接看到产品在不同电子商务平台价格上的区别同一时间也能够获得其他未知购物平台的产品信息帮助使用者达成买卖。价格比较系统对使用者以及商家来说都有一定的助益,实现这样一个具备价格比较功能的系统是很值得的。Web系统开发是在目前的开发领域中Web系统是非常热门的一个,愈来愈多的程序编译人员都向着这个开发领域涌入。所以,认识并熟知一些Web开发过程中经常使用的技能是很重要的。Java、PHP和。net是现在这个开发过程中最通用的技能。该系统将使用Java这个技能来实现,同一时间理解这个技能开发系统的过程。熟知Java开发的一些通用手段,这对自身未来的道路有很大的帮助。所以开发这样一个以网络为基础的网上购物比价系统可以提高自身在职场上的竞争力,为在这个行业的未来业务铺平道路。2。系统设计方案2。1两种系统设计方案价格比较系统主要的事情有:抓取很多个电子商务平台的产品数据,同时将这些产品数据给使用者展示出来。但由于产品数量和分类很大,系统要在大类目里面搜寻出与使用者需求契合的产品。对于不论身处哪里都可以对产品进行搜寻做了2种不一样的计划信息数据库方法和实时抓取方法。信息数据库方法需要频繁刷新信息库里面的数据,另外的实时抓取方法则与该系统的计划目标更契合。在2。1。1以及2。1。2小节中将详细介绍这2种计划的详细情况,和两种计划的好处以及坏处。2。1。1方案数据库法:在本计划中,系统预先抓取了在各大电商中接近全部的产品数据,之后把每个产品的重要数据(产品的价格、产品的首页、产品的图片、产品的介绍)保存在计算服务器的信息库里,并且把每个产品在信息库里面的索引以及它的主要信息通过检查搜索索引工具(如:Lucene)在磁盘上创建通检文档。当使用者在价格比较系统的搜寻栏目里打入主要信息并且通过点击搜寻的时候,该系统通过对这个主要信息的获取,然后经过检查搜索索引工具的检查搜索性能获得一系列符合条件的产品的索引,然后从信息库中提取出这些产品的数据,通过jsp技能快速产生成一个网络界面提交给使用者的用户端口的网页浏览器。如图2。1所示的是计划1的系统过程。方案优点:抓取模块和响应客户端的模块是相对单独出来的。抓取模块可以在闲余时间抓取产品的数据。商品检查搜索在计算服务器上实行,具备较快的响应速度。计划的坏处:每个电子商务平台上都有多类目多种的产品,加上有电商平台有多个,产品的总量就会更大,但是电子商务平台的数据库不能对外开放直接访问,系统要经过电商的产品界面获得产品数据。如果每个产品都独立一个界面,那么需要处理的数据量就会很大。每次抓取都会消耗许多的资源,并带来一定的消费,而且这些产品的信息随时都可能变化,要通过高频率的刷新来保证信息的准确性。图2。1方案1数据库法2。1。2方案即时爬取法:方案1的实现类似于搜索引擎,计划2对比计划1则有很大的差异。计划2中对于产品数据的保存则不是在系统服务器端的信息库里。当使用者提交主要信息的时候,服务端口把主要信息提交给各大电子商务平台,之后从各大电子商务平台的搜寻结果页面里抓取出产品数据,对抓取的信息进行处理之后里面产生一个网页提交给使用者。如图2。2所示的是计划2的系统过程计划的好处:灵活多变,能很好地针对产品数据的频繁变化。服务器不用信息库来保存信息,减少了信息的维持保护成本。计划的坏处:每当使用者在客户界面提交一次主要信息时,服务器必须在每个电子商务平台中再次提交主要信息,之后实时抓取产品数据并将其反馈给使用者的网页浏览器,系统下载产品页面信息需要一定的时间,而每一次面向使用者的服务都需要对各大电子商务平台的产品界面数据做分析,尤其是在信息源非常多的条件下,这既费时又耗资源。图2。2方案2即时爬取法2。2方案选择最后开发计划:计划2实时抓取方法。在计划1(见图2。1)中,一次捕获所有电子商务平台的所有数据需要花费很多的时间,且在这段时间里,分析大量的网页需要进行大量的计算,在这个捕获周期中可能会出现各种不可预测的因素,另外整个捕获模块也会受到PC机器的性能以及网络环境等因素的限制,综合上述原因,计划1作为毕业设计的最后计划是不适合的。但是对比下计划2更容易实现,尽管使用者每一次的访问都要进行大量的计算,并行服务的性能肯定不是很强,但是不需要提前获取大量的产品数据,这比计划1更容易实现。基于以上分析,计划2作为系统的实施计划是最后的选择。3。系统整体设计平台将JAVAEE技术作为此次的核心开发技术。平台划分为三个板块:业务逻辑板块、信息捕捉板块、可视板块。该平台虽然不是严谨的MVC模式,但是和MVC模式十分相近。业务逻辑板块。该板块主要负责把网页中提供的参数进行简易的处理,利用有关的逻辑思维,单独生成三大电商的URL,把URL当成其中一个参数,呈递给信息捕捉板块。该板块和MVC中的C作用相同。信息捕捉板块。信息捕捉板块将业务逻辑板块呈递的URL作为本次操作的参数,对与该URL相对应的产品界面进行分析,获得界面的产品列表,对产品列表中的每一个产品进行透彻分析,最终将捕捉到的产品信息封装在对应的对象数据组中,反向呈交给业务逻辑板块。该板块和MVC中的M作用相同。可视板块。可视板块是与用户直接对接的一个板块,该板块中涵盖了两个界面:一个是静态的HTML界面,另一个则是动态的JSP界面。其中静态的HTML界面是平台的首页,其主要负责向平台呈递用户搜索时常用的核心词汇。动态的JSP界面主要是用来展示用户搜索弹出的详细内容,与此同时,其也具备静态界面中所有的功能。平台整体结构图如下图3。1所示。图3。1系统总体架构图4。系统详细设计与实现4。1系统功能简介本平台仅对淘宝软件、京东软件与亚马逊软件这三个大型网购平台的产品数据进行捕捉。平台能够依照用户递交的核心词汇在淘宝软件、京东软件与亚马逊软件捕捉有关产品数据,并且把捕捉到的数据,通过JSP技术手段,生成一个动态的界面递交给浏览器。用户能够在搜索结果页面中查阅到来自三大网购平台的产品信息,能够直接的浏览到不同平台的产品价格的差异,并且不需要单独在不同的平台搜索产品,这样不仅仅节省了用户的时间,而且还节省了用户的精力。在上述中主要讲解了平台的三大组成,因此下文会具体讲解这三个板块的设计和开发。4。2数据爬取层设计与实现信息捕捉板块的功能:以界面中的URL作为本次的核心参数,用于捕捉该界面的产品数据,并且把产品数据封装进每组的对象数据中。本章将重点讲解平台如何从界面中的URL参数中捕捉每一件产品的各类基础数据。4。2。1爬取商品列表京东软件中产品列表捕捉计算方法的设计与开发在京东软件中搜索获取产品的详情界面如下图4。1所示。在下图4。1中,红色矩形框圈出的产品才是平台需要捕捉的产品。信息捕捉板块需要把搜索到的产品信息从大量的产品中抽取出来,得到一个完整的信息列表,之后在对列表中的产品进行详细分析。本章将会具体讲解平台获取这个信息列表的过程。图4。1京东商品搜索结果页面在搜索结果的界面中,京东检索到的图书类与非图书类结果的界面框架是完全不同的,图书类与非图书类产品在搜索结果界面中的HTML代码比对表如下所示:ulclass=listhclearfixulclass=listhclearfixliclass=itembookbookid=”…”lisku=”…”图书商品1非图书商品1lililiclass=itembookbookid=”…”lisku=”…”图书商品2非图书商品2lililiclass=itembookbookid=”…”lisku=”…”图书商品3非图书商品3lili…………liclass=itembookbookid=”…”lisku=”…”图书商品N非图书商品Nlili…………ulul标签ulclass=listhclearfix中存放搜索得到的所有商品。获取商品的列表就是将标签ulclass=listhclearfix中的全部附属标签li所对应的Node结点抽取出来。平台中完成捕捉搜索结果界面中产品列表计算方法的类JDItemInfoList中的GetItemInfoList方法,类JDItemInfoList同时也是完成信息捕捉板块中的核心板块,该类的成员组成以及简要介绍见下表4。1所示。表4。1类JDItemInfoList成员简介PageInfoDatapagedata存储用户请求的页面信息对象pageurl当前需要解析的页面URLpublicJDItemInfoList(PageInfoDatapagedata1Stringurl)构造方法privateListItemInfogetItemInfoList()通过页面URL获取商品列表GetItemInfoList计算方法可以选取两类方法对产品搜索结果进行捕捉。其中的一种方法对图书类与非图书类的HTML代码框架较为敏感,另一种方法对两类的HTML代码框架极其不敏感。下面将会具体讲解这两种不同的计算方法。方法1:对两类的HTML代码框架十分不敏感方法1是一类针对两类产品的HTML代码框架特别不敏感的一种方法。图书类产品与非图书类产品都保存在标签ulclass=listhclearfix之中,平台可以从中抽取处与该标签对应的节点的专属标签对象,并且运用该对象的getChildren方法,便可得到产品的详细列表。方法1的优势:简单明了、工作效率高、发生故障可能性低。方法1的劣势:getChildren方法得到的产品列表中会包含大量的空白节点,在下一个细小板块对列表中的产品进行分析时会发生一些额外的支出去处理这些空白节点。方法2:对两类的HTML代码框架较为敏感方法2针对两类产品的HTML代码框架较为敏感,此方法直接从整个树中抽取出产品的li结点并得到一个完整的产品列表。但是平台提前并不知道此界面时图书类产品界面还是非图书类产品界面,平台需要同时使用两种捕捉法条,对产品进行捕捉从而获取结点列表。亚马逊产品列表捕捉计算方法的设计与开发亚马逊的界面产品列表所运用的捕捉计算方法和京东中运用的大体一致。亚马逊对所有商品的搜索结果页中商品局部HTML结构都是一样的,比京东的更简单。亚马逊搜索结果页的商品信息放在divclass=listView……div中,每件商品的信息放在divid=result_序号class=resultfitResultRowproductname=商品名字……div中,可以依据上诉规律来设定过滤条件。亚马逊的搜索结果界面框架比较统一,并且其不需要和京东那样运用多线程技术对两类不同的界面进行捕捉,此外,其他的程序与京东的流程大体一致,不再赘诉。4。2。2爬取商品基本信息产品的基础信息包含:产品、产品图片、产品价格、产品的简要介绍。这些基础信息都是用字符来表明的,在java中使用String来表示。平台使用一个类ItemInfoData来保存单个产品的基础信息。此类具备5个信息成员,其详情定义如下文所示:publicclassItemInfoData{publicStringitemUrlpublicStringitemIntropublicStringitemImagepublicStringitemPricepublicStringjdid}这之中,temUrl是产品的,itemIntro是产品的简要介绍,itemPrice是产品的具体价格。平台中全部的产品都需要捕捉前面的四个基础信息,并且每一件产品的信息都保存在ItemInfoData类型所对应的对象之中。针对京东还需要捕捉的产品ID,均保存在jdid当中。京东软件产品的基础信息捕捉计算方法在京东的搜索框内填入要查询的关键词之后,京东会自动按照所键入的信息搜寻符合标准的产品,并把搜索到的产品按相似程度依次排序。京东在每一个界面最多可容纳36个产品。在上述中提到,每一个产品的基础信息均存放在标签ulclass=listhclearfix中的每一个li标签中。标签li中的结构如下:lisku=777239divclass=pimgatarget=……img……datalazyload=图片URLa…divdivclass=pnamea……href=商品URL……诺基亚(NOKIA)……商品简介及关键词adivdivclass=pprice……div……li产品的HTML代码的文本当中,第一行是此产品的ID信息,第四行的image标签当中储存了产品的详情图,第九行的标签a当中储存了产品的首页信息,第十行是产品的简要介绍。类JDItemInfoList用于从产品列表捕捉产品的基础信息,其运用到的关键方法是getItemInfoList。类JDItemInfoGet各个组成成员的简要介绍见下表4。3。表4。3类JDItemInfoList方法简介PageInfoDatapagedata存储当前搜索分页信息publicJDItemInfoList(PageInfoDatapagedata)构造方法publicListItemInfogetItemInfoList()解析商品列表中的每件商品得到其基本信息privatevoidUpdatePrice(ListItemInfoitemlist)当爬取商品价格失败时调用此方法重新爬取商品价格privateJSONArraygetPriceJSONArray(Stringurl)爬取商品价格信息,返回JSONArray对象HTML代码的文本当中每一个Node结点均保存在同一个Node树中。京东软件当中的每一个产品在Node树中的部分框架见下图4。3。类JDItemInfoGet用于捕捉单个产品的基础信息。GetArrayFromList方法中运用这个方法对每一个产品进行分析。下文将会从四个层面对OneItemInfoGet捕捉产品基础信息的具体过程进行讲解。针对京东软件的捕捉板块在捕捉产品基础信息前需要捕捉产品的具体ID,产品的具体ID在下图4。3中核心板块结点中显示,也就是属性sku的数值。在标签divclass=pname和它的附属标签中包含的产品首页与产品的简要介绍。它在Node树中的框架具体见下图4。4所示。下图4。4中第二个板块的结点包含产品的首页数据,第三个板块全部的结点包含产品全部的简要介绍数据。能够将第三个板块中全部的附属结点转换成字符串,用于在可视图板块中展示产品的简要介绍。捕捉产品详情图产品的详情图数据保存在标签divclass=pimg的附属标签img……中,以某件商品为例,其该部分的HTML结构如下:divclass=pimgatarget=_blankhref=item。jd。777239。HTMLonclick=seClick(SEOQUERY_KEYWORD777239)searchlog(177723902)imgwidth=160height=160dataimg=1datalazyload=img12。360buyimg。7g14M090101BEhV1KHLNIIAAAAAADRHdZrlMAAFsqQGlEvQAANE1638。jpgadivclass=pi0shop_id=0divdiv在捕捉到的HTML代码文件当中的image…标签中存在一个属性名称是datalazyload的属性,其原身应该是src。捕捉产品具体价格产品的具体价格通常保存在divclass=pprice的附属标签中,京东的产品价格有些情况会直接在它的HTML代码文件中显示,但是在通常情况下,HTML代码文件中并不会存在产品的价格信息,这类情况的发生是因为京东运用了AJAX技术,其是根据产品的详细ID,动态化地捕捉产品的具体价格,所以针对京东捕捉板块需要额外的捕捉产品的具体ID。拿某一个产品举例说明,其具体的HTML代码框架如下文所示:divclass=ppriceememstrongclass=J_777239¥28。00(然而在更多情况下此处并没有价格信息)strongspanid=p777239spandiv因为在很多状态下,在上文提到的HTML文件当中的标签strongclass=J_1024062417之后并没有产品价格的具体信息,这时便需要运用其他的方式来获得产品的具体价格。类JDItemInfoList中包含的UpdatePrice方法可以用来捕捉产品的具体价格。京东的界面运用JS技术,通过get呈递的方式来捕捉产品的具体价格。在上述提及到的URL当中,每一个“J”之后的数字便是对应产品的具体ID号,把上面URL参数通过网页打开,可以在界面中查阅到上文中所有ID号对产品的具体价格,详情见下图4。5所示。图4。5商品价格UpdatePrice方法把和上图4。5中的长篇字符串进行对比解析,获取产品的具体价格,并且把获取到的价格保存在每一个产品相应的ItemInfoData类型对象的信息组成成员itemPrice当中。亚马逊平台产品基础信息捕捉计算方法亚马逊平台相比京东平台要更加规整、统一一些,而且在商品列表页中,商品、商品价格、产品简要介绍与产品详情图都很直接地展示在界面当中,能够直接进行捕捉,不需要通过其他途径进行捕捉,其所有流程与京东平台的捕捉方式大体一致,不需要再次进行繁复的介绍。亚马逊平台中的每一个产品的HTML代码框架图如下图4。6所示,图片中黑色矩形圈出的部分便是产品的四大基础信息所在标签的位置。针对亚马逊平台中的产品,其产品基础信息的捕捉方式大体会京东平台的方式一致,有些部分甚至会比京东平台的操作还有简易。图4。6亚马逊商品4。2。3爬取分页相关信息当我们要查找某件商品的时候,通常会查找出很多与这个商品相类似的物品,此时由于所要显示的商品数量很多,因此需要对其进行分页显示。本系统则优化了商品的分页显示。系统的分页功能需要靠一个类来实现:publicclassPageInfoData{publicintpagepublicintjdpagepublicintazpagepublicinttbpagepublicStringkeypublicStringkey_gbkpublicStringkey_utf8}其中,将一些重要的信息封装在了类PageInfoData当中。page的含义是向系统发送客户想要跳转的页码数,更加具体的说,当客户想要跳转到某一页时,当他在对页数进行搜索时,该page的值就会变成1,或者客户通过点击在第二页中的“上一页”按钮进行页数跳转时,此时,page的值同样也会变成1。jdpage的含义表示为当客户发出请求之后,系统对这个请求做出了反应,并将京东商城关于此商品的所有查找结果进行分页处理,最后将分页数回馈给客户。azpage则表示当系统在对客户的请求做出反应之后,亚马逊商城就会查找与此商品相关的商品进行分页,最后将分页数回馈给客户。tbpage表示为当系统对客户发出的请求信息做出响应之后,网就会对此商品进行查找与分页,并将分页数反馈给客户。既然是搜索,那么肯定就会有一个搜索关键字,而key就承担了这个重要的任务。而key又可以分成key_gbk与key_utf8,尽管他们都表示客户提供给系。。。
- 版权声明:知知范文网 本站所有内容的版权归相应内容作者或权利人所有,本站不对涉及的版权问题负法律责任。
- 内容来源:本站所有内容均有网络公开等合法途径整理而来,该资料仅作为交流学习使用,并无任何商业目的,任何访问,浏览本站,购买或者未购买的人,就代表已阅读,理解本条声明
- 免责声明:内容所标价格,是对本站搜集、整理资料以及本站运营必须费用支付的适当补偿,资料索取者尊重版权方的知识产权,谢谢!